X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fdrivers%2Ffilesystems%2Fntfs%2Ffcb.c;h=e9b0cc4c23f709bb6a0924fce2e69a3465a8f811;hp=f0235354bf4b38293ff24790a85d71321a08d677;hb=011e52835bf9a3bf5469fc3ca5e51b6f7a7f420f;hpb=afe0ca9945eef1c79fff19b423897200f0278878 diff --git a/reactos/drivers/filesystems/ntfs/fcb.c b/reactos/drivers/filesystems/ntfs/fcb.c index f0235354bf4..e9b0cc4c23f 100644 --- a/reactos/drivers/filesystems/ntfs/fcb.c +++ b/reactos/drivers/filesystems/ntfs/fcb.c @@ -275,19 +275,43 @@ PNTFS_FCB NtfsMakeRootFCB(PNTFS_VCB Vcb) { PNTFS_FCB Fcb; + PFILE_RECORD_HEADER MftRecord; + PFILENAME_ATTRIBUTE FileName; - Fcb = NtfsCreateFCB(L"\\", Vcb); + MftRecord = ExAllocatePoolWithTag(NonPagedPool, + Vcb->NtfsInfo.BytesPerFileRecord, + TAG_NTFS); + if (MftRecord == NULL) + { + return NULL; + } + + if (!NT_SUCCESS(ReadFileRecord(Vcb, NTFS_FILE_ROOT, MftRecord))) + { + return NULL; + } -// memset(Fcb->entry.Filename, ' ', 11); + FileName = GetFileNameFromRecord(MftRecord); + if (!FileName) + { + return NULL; + } + + Fcb = NtfsCreateFCB(L"\\", Vcb); + if (!Fcb) + { + return NULL; + } -// Fcb->Entry.DataLengthL = Vcb->CdInfo.RootSize; -// Fcb->Entry.ExtentLocationL = Vcb->CdInfo.RootStart; -// Fcb->Entry.FileFlags = 0x02; // FILE_ATTRIBUTE_DIRECTORY; + memcpy(&Fcb->Entry, FileName, FIELD_OFFSET(FILENAME_ATTRIBUTE, NameLength)); + Fcb->Entry.NameType = FileName->NameType; + Fcb->Entry.NameLength = 0; + Fcb->Entry.Name[0] = UNICODE_NULL; Fcb->RefCount = 1; Fcb->DirIndex = 0; - Fcb->RFCB.FileSize.QuadPart = PAGE_SIZE;//Vcb->CdInfo.RootSize; - Fcb->RFCB.ValidDataLength.QuadPart = PAGE_SIZE;//Vcb->CdInfo.RootSize; - Fcb->RFCB.AllocationSize.QuadPart = PAGE_SIZE;//Vcb->CdInfo.RootSize; + Fcb->RFCB.FileSize.QuadPart = FileName->DataSize; + Fcb->RFCB.ValidDataLength.QuadPart = FileName->DataSize; + Fcb->RFCB.AllocationSize.QuadPart = FileName->AllocatedSize; Fcb->MFTIndex = NTFS_FILE_ROOT; NtfsFCBInitializeCache(Vcb, Fcb); @@ -390,6 +414,8 @@ NtfsMakeFCBFromDirEntry(PNTFS_VCB Vcb, return STATUS_INSUFFICIENT_RESOURCES; } + memcpy(&rcFCB->Entry, FileName, FIELD_OFFSET(FILENAME_ATTRIBUTE, NameLength)); + rcFCB->Entry.NameType = FileName->NameType; rcFCB->RFCB.FileSize.QuadPart = FileName->DataSize; rcFCB->RFCB.ValidDataLength.QuadPart = FileName->DataSize; rcFCB->RFCB.AllocationSize.QuadPart = FileName->AllocatedSize;