if( BooleanFlagOn( pCcb->Flags, CCB_FLAG_DIR_OF_DIRS_ONLY))
{
- if( !(AFSGetFileAttributes( pFcb->ParentFcb, pDirEntry) & FILE_ATTRIBUTE_DIRECTORY))
+ AFSFcb * pParentFcb = NULL;
+
+ if ( pFcb->ParentFcb )
+ {
+ pParentFcb = pFcb->ParentFcb;
+ }
+ else if (pFcb->DirEntry->DirectoryEntry.FileId.Vnode == 1)
+ {
+ pParentFcb = pFcb;
+ }
+
+ if( !(AFSGetFileAttributes( pParentFcb, pDirEntry) & FILE_ATTRIBUTE_DIRECTORY))
{
if( pDirEntry->ListEntry.fLink != NULL)
pDirInfo->ChangeTime = pDirEntry->DirectoryEntry.LastWriteTime;
pDirInfo->EndOfFile = pDirEntry->DirectoryEntry.EndOfFile;
pDirInfo->AllocationSize = pDirEntry->DirectoryEntry.AllocationSize;
- pDirInfo->FileAttributes = AFSGetFileAttributes( pFcb->ParentFcb, pDirEntry);
+
+ {
+ AFSFcb * pParentFcb = NULL;
+
+ if ( pFcb->ParentFcb )
+ {
+ pParentFcb = pFcb->ParentFcb;
+ }
+ else if (pFcb->DirEntry->DirectoryEntry.FileId.Vnode == 1)
+ {
+ pParentFcb = pFcb;
+ }
+
+ pDirInfo->FileAttributes = AFSGetFileAttributes( pParentFcb, pDirEntry);
+ }
+
pDirInfo->FileIndex = pDirEntry->DirectoryEntry.FileIndex;
pDirInfo->FileNameLength = pDirEntry->DirectoryEntry.FileName.Length;
if( *Length >= sizeof( FILE_STANDARD_INFORMATION))
{
+ ULONG ulAttrs;
+ AFSFcb * pParentFcb = NULL;
RtlZeroMemory( Buffer,
*Length);
Buffer->EndOfFile = Fcb->DirEntry->DirectoryEntry.EndOfFile;
Buffer->NumberOfLinks = 0;
Buffer->DeletePending = BooleanFlagOn( Fcb->Flags, AFS_FCB_PENDING_DELETE);
- Buffer->Directory = BooleanFlagOn( AFSGetFileAttributes( Fcb->ParentFcb, Fcb->DirEntry), FILE_ATTRIBUTE_DIRECTORY);
+
+ if ( Fcb->ParentFcb )
+ {
+ pParentFcb = Fcb->ParentFcb;
+ }
+ else if (Fcb->DirEntry->DirectoryEntry.FileId.Vnode == 1)
+ {
+ pParentFcb = Fcb;
+ }
+
+ ulAttrs = AFSGetFileAttributes( pParentFcb, Fcb->DirEntry);
+
+ Buffer->Directory = BooleanFlagOn( ulAttrs, FILE_ATTRIBUTE_DIRECTORY);
*Length -= sizeof( FILE_STANDARD_INFORMATION);
}