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
This commit is contained in:
Pierre Schweitzer 2008-06-20 18:40:57 +00:00
parent 8683e62101
commit b22a7f63e8
3 changed files with 20 additions and 16 deletions

View file

@ -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))
{

View file

@ -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);

View file

@ -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);