From b22a7f63e89a24814feb83de73b2f4ce88617547 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 20 Jun 2008 18:40:57 +0000 Subject: [PATCH] Miscellaneous NTFS patch: - Filled FCB structures with more informations - Added them to linked list - Set mounted volume to FILE_DEVICE_DISK_FILE_SYSTEM - Various code cleanup svn path=/trunk/; revision=34036 --- reactos/drivers/filesystems/ntfs/fcb.c | 20 +++++++++++++------- reactos/drivers/filesystems/ntfs/fsctl.c | 12 +++++------- reactos/drivers/filesystems/ntfs/ntfs.h | 4 ++-- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/reactos/drivers/filesystems/ntfs/fcb.c b/reactos/drivers/filesystems/ntfs/fcb.c index b92485540a3..6e8f9b9a8fa 100644 --- a/reactos/drivers/filesystems/ntfs/fcb.c +++ b/reactos/drivers/filesystems/ntfs/fcb.c @@ -68,7 +68,7 @@ NtfsWSubString(PWCHAR pTarget, const PWCHAR pSource, size_t pLength) PNTFS_FCB -NtfsCreateFCB(PCWSTR FileName) +NtfsCreateFCB(PCWSTR FileName, PNTFS_VCB Vcb) { PNTFS_FCB Fcb; @@ -77,6 +77,8 @@ NtfsCreateFCB(PCWSTR FileName) Fcb->Identifier.Type = NTFS_TYPE_FCB; Fcb->Identifier.Size = sizeof(NTFS_TYPE_FCB); + + Fcb->Vcb = Vcb; if (FileName) { @@ -92,6 +94,10 @@ NtfsCreateFCB(PCWSTR FileName) } ExInitializeResourceLite(&Fcb->MainResource); + + Fcb->RFCB.Resource = &(Fcb->MainResource); + + InsertTailList(&(Vcb->FcbListHead), &(Fcb->FcbListEntry)); return(Fcb); } @@ -155,7 +161,7 @@ NtfsReleaseFCB(PNTFS_VCB Vcb, if (Fcb->RefCount <= 0 && !NtfsFCBIsDirectory(Fcb)) { RemoveEntryList(&Fcb->FcbListEntry); - CcUninitializeCacheMap (Fcb->FileObject, NULL, NULL); + CcUninitializeCacheMap(Fcb->FileObject, NULL, NULL); NtfsDestroyFCB(Fcb); } KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql); @@ -169,7 +175,7 @@ NtfsAddFCBToTable(PNTFS_VCB Vcb, KIRQL oldIrql; KeAcquireSpinLock(&Vcb->FcbListLock, &oldIrql); - Fcb->DevExt = Vcb; + Fcb->Vcb = Vcb; InsertTailList(&Vcb->FcbListHead, &Fcb->FcbListEntry); KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql); } @@ -242,7 +248,7 @@ NtfsFCBInitializeCache(PNTFS_VCB Vcb, FileObject->FsContext2 = newCCB; newCCB->PtrFileObject = FileObject; Fcb->FileObject = FileObject; - Fcb->DevExt = Vcb; + Fcb->Vcb = Vcb; Status = STATUS_SUCCESS; CcInitializeCacheMap(FileObject, @@ -263,7 +269,7 @@ NtfsMakeRootFCB(PNTFS_VCB Vcb) { PNTFS_FCB Fcb; - Fcb = NtfsCreateFCB(L"\\"); + Fcb = NtfsCreateFCB(L"\\", Vcb); // memset(Fcb->entry.Filename, ' ', 11); @@ -371,7 +377,7 @@ NtfsMakeFCBFromDirEntry(PVCB Vcb, wcscat(pathName, entryName); } - rcFCB = NtfsCreateFCB(pathName); + rcFCB = NtfsCreateFCB(pathName, Vcb); memcpy(&rcFCB->Entry, Record, sizeof(DIR_RECORD)); Size = rcFCB->Entry.DataLengthL; @@ -411,7 +417,7 @@ NtfsAttachFCBToFileObject(PNTFS_VCB Vcb, FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; newCCB->PtrFileObject = FileObject; - Fcb->DevExt = Vcb; + Fcb->Vcb = Vcb; if (!(Fcb->Flags & FCB_CACHE_INITIALIZED)) { diff --git a/reactos/drivers/filesystems/ntfs/fsctl.c b/reactos/drivers/filesystems/ntfs/fsctl.c index bfca017bf18..049e5efcba5 100644 --- a/reactos/drivers/filesystems/ntfs/fsctl.c +++ b/reactos/drivers/filesystems/ntfs/fsctl.c @@ -190,7 +190,7 @@ NtfsGetVolumeData(PDEVICE_OBJECT DeviceObject, DPRINT("BytesPerSector: %lu\n", DiskGeometry.BytesPerSector); BootSector = ExAllocatePoolWithTag(NonPagedPool, - DiskGeometry.BytesPerSector, TAG_NTFS); + DiskGeometry.BytesPerSector, TAG_NTFS); if (BootSector == NULL) { return(STATUS_INSUFFICIENT_RESOURCES); @@ -235,7 +235,7 @@ NtfsGetVolumeData(PDEVICE_OBJECT DeviceObject, ExFreePool(BootSector); MftRecord = ExAllocatePoolWithTag(NonPagedPool, - NtfsInfo->BytesPerFileRecord, TAG_NTFS); + NtfsInfo->BytesPerFileRecord, TAG_NTFS); if (MftRecord == NULL) { return STATUS_INSUFFICIENT_RESOURCES; @@ -347,8 +347,7 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, Status = IoCreateDevice(NtfsGlobalData->DriverObject, sizeof(DEVICE_EXTENSION), NULL, - FILE_DEVICE_FILE_SYSTEM, -// FILE_DEVICE_DISK_FILE_SYSTEM, + FILE_DEVICE_DISK_FILE_SYSTEM, 0, FALSE, &NewDeviceObject); @@ -380,7 +379,7 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, Vcb->StorageDevice); - Fcb = NtfsCreateFCB(NULL); + Fcb = NtfsCreateFCB(NULL, Vcb); if (Fcb == NULL) { Status = STATUS_INSUFFICIENT_RESOURCES; @@ -407,7 +406,7 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, Vcb->StreamFileObject->Vpb = Vcb->Vpb; Ccb->PtrFileObject = Vcb->StreamFileObject; Fcb->FileObject = Vcb->StreamFileObject; - Fcb->DevExt = (PDEVICE_EXTENSION)Vcb->StorageDevice; + Fcb->Vcb = (PDEVICE_EXTENSION)Vcb->StorageDevice; Fcb->Flags = FCB_IS_VOLUME_STREAM; @@ -425,7 +424,6 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, Fcb); ExInitializeResourceLite(&Vcb->DirResource); -// ExInitializeResourceLite(&DeviceExt->FatResource); KeInitializeSpinLock(&Vcb->FcbListLock); InitializeListHead(&Vcb->FcbListHead); diff --git a/reactos/drivers/filesystems/ntfs/ntfs.h b/reactos/drivers/filesystems/ntfs/ntfs.h index 217721d947d..2a3cd315853 100644 --- a/reactos/drivers/filesystems/ntfs/ntfs.h +++ b/reactos/drivers/filesystems/ntfs/ntfs.h @@ -130,7 +130,7 @@ typedef struct _FCB SECTION_OBJECT_POINTERS SectionObjectPointers; PFILE_OBJECT FileObject; - PDEVICE_EXTENSION DevExt; + PNTFS_VCB Vcb; WCHAR *ObjectName; /* point on filename (250 chars max) in PathName */ WCHAR PathName[MAX_PATH]; /* path+filename 260 max */ @@ -428,7 +428,7 @@ NtfsRelReadAhead(PVOID Context); /* fcb.c */ PNTFS_FCB -NtfsCreateFCB(PCWSTR FileName); +NtfsCreateFCB(PCWSTR FileName, PNTFS_VCB Vcb); VOID NtfsDestroyFCB(PNTFS_FCB Fcb);