mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 06:22:58 +00:00
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:
parent
8683e62101
commit
b22a7f63e8
3 changed files with 20 additions and 16 deletions
|
@ -68,7 +68,7 @@ NtfsWSubString(PWCHAR pTarget, const PWCHAR pSource, size_t pLength)
|
||||||
|
|
||||||
|
|
||||||
PNTFS_FCB
|
PNTFS_FCB
|
||||||
NtfsCreateFCB(PCWSTR FileName)
|
NtfsCreateFCB(PCWSTR FileName, PNTFS_VCB Vcb)
|
||||||
{
|
{
|
||||||
PNTFS_FCB Fcb;
|
PNTFS_FCB Fcb;
|
||||||
|
|
||||||
|
@ -78,6 +78,8 @@ NtfsCreateFCB(PCWSTR FileName)
|
||||||
Fcb->Identifier.Type = NTFS_TYPE_FCB;
|
Fcb->Identifier.Type = NTFS_TYPE_FCB;
|
||||||
Fcb->Identifier.Size = sizeof(NTFS_TYPE_FCB);
|
Fcb->Identifier.Size = sizeof(NTFS_TYPE_FCB);
|
||||||
|
|
||||||
|
Fcb->Vcb = Vcb;
|
||||||
|
|
||||||
if (FileName)
|
if (FileName)
|
||||||
{
|
{
|
||||||
wcscpy(Fcb->PathName, FileName);
|
wcscpy(Fcb->PathName, FileName);
|
||||||
|
@ -93,6 +95,10 @@ NtfsCreateFCB(PCWSTR FileName)
|
||||||
|
|
||||||
ExInitializeResourceLite(&Fcb->MainResource);
|
ExInitializeResourceLite(&Fcb->MainResource);
|
||||||
|
|
||||||
|
Fcb->RFCB.Resource = &(Fcb->MainResource);
|
||||||
|
|
||||||
|
InsertTailList(&(Vcb->FcbListHead), &(Fcb->FcbListEntry));
|
||||||
|
|
||||||
return(Fcb);
|
return(Fcb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,7 +161,7 @@ NtfsReleaseFCB(PNTFS_VCB Vcb,
|
||||||
if (Fcb->RefCount <= 0 && !NtfsFCBIsDirectory(Fcb))
|
if (Fcb->RefCount <= 0 && !NtfsFCBIsDirectory(Fcb))
|
||||||
{
|
{
|
||||||
RemoveEntryList(&Fcb->FcbListEntry);
|
RemoveEntryList(&Fcb->FcbListEntry);
|
||||||
CcUninitializeCacheMap (Fcb->FileObject, NULL, NULL);
|
CcUninitializeCacheMap(Fcb->FileObject, NULL, NULL);
|
||||||
NtfsDestroyFCB(Fcb);
|
NtfsDestroyFCB(Fcb);
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql);
|
KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql);
|
||||||
|
@ -169,7 +175,7 @@ NtfsAddFCBToTable(PNTFS_VCB Vcb,
|
||||||
KIRQL oldIrql;
|
KIRQL oldIrql;
|
||||||
|
|
||||||
KeAcquireSpinLock(&Vcb->FcbListLock, &oldIrql);
|
KeAcquireSpinLock(&Vcb->FcbListLock, &oldIrql);
|
||||||
Fcb->DevExt = Vcb;
|
Fcb->Vcb = Vcb;
|
||||||
InsertTailList(&Vcb->FcbListHead, &Fcb->FcbListEntry);
|
InsertTailList(&Vcb->FcbListHead, &Fcb->FcbListEntry);
|
||||||
KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql);
|
KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql);
|
||||||
}
|
}
|
||||||
|
@ -242,7 +248,7 @@ NtfsFCBInitializeCache(PNTFS_VCB Vcb,
|
||||||
FileObject->FsContext2 = newCCB;
|
FileObject->FsContext2 = newCCB;
|
||||||
newCCB->PtrFileObject = FileObject;
|
newCCB->PtrFileObject = FileObject;
|
||||||
Fcb->FileObject = FileObject;
|
Fcb->FileObject = FileObject;
|
||||||
Fcb->DevExt = Vcb;
|
Fcb->Vcb = Vcb;
|
||||||
|
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
CcInitializeCacheMap(FileObject,
|
CcInitializeCacheMap(FileObject,
|
||||||
|
@ -263,7 +269,7 @@ NtfsMakeRootFCB(PNTFS_VCB Vcb)
|
||||||
{
|
{
|
||||||
PNTFS_FCB Fcb;
|
PNTFS_FCB Fcb;
|
||||||
|
|
||||||
Fcb = NtfsCreateFCB(L"\\");
|
Fcb = NtfsCreateFCB(L"\\", Vcb);
|
||||||
|
|
||||||
// memset(Fcb->entry.Filename, ' ', 11);
|
// memset(Fcb->entry.Filename, ' ', 11);
|
||||||
|
|
||||||
|
@ -371,7 +377,7 @@ NtfsMakeFCBFromDirEntry(PVCB Vcb,
|
||||||
wcscat(pathName, entryName);
|
wcscat(pathName, entryName);
|
||||||
}
|
}
|
||||||
|
|
||||||
rcFCB = NtfsCreateFCB(pathName);
|
rcFCB = NtfsCreateFCB(pathName, Vcb);
|
||||||
memcpy(&rcFCB->Entry, Record, sizeof(DIR_RECORD));
|
memcpy(&rcFCB->Entry, Record, sizeof(DIR_RECORD));
|
||||||
|
|
||||||
Size = rcFCB->Entry.DataLengthL;
|
Size = rcFCB->Entry.DataLengthL;
|
||||||
|
@ -411,7 +417,7 @@ NtfsAttachFCBToFileObject(PNTFS_VCB Vcb,
|
||||||
FileObject->FsContext = Fcb;
|
FileObject->FsContext = Fcb;
|
||||||
FileObject->FsContext2 = newCCB;
|
FileObject->FsContext2 = newCCB;
|
||||||
newCCB->PtrFileObject = FileObject;
|
newCCB->PtrFileObject = FileObject;
|
||||||
Fcb->DevExt = Vcb;
|
Fcb->Vcb = Vcb;
|
||||||
|
|
||||||
if (!(Fcb->Flags & FCB_CACHE_INITIALIZED))
|
if (!(Fcb->Flags & FCB_CACHE_INITIALIZED))
|
||||||
{
|
{
|
||||||
|
|
|
@ -190,7 +190,7 @@ NtfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
|
||||||
|
|
||||||
DPRINT("BytesPerSector: %lu\n", DiskGeometry.BytesPerSector);
|
DPRINT("BytesPerSector: %lu\n", DiskGeometry.BytesPerSector);
|
||||||
BootSector = ExAllocatePoolWithTag(NonPagedPool,
|
BootSector = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
DiskGeometry.BytesPerSector, TAG_NTFS);
|
DiskGeometry.BytesPerSector, TAG_NTFS);
|
||||||
if (BootSector == NULL)
|
if (BootSector == NULL)
|
||||||
{
|
{
|
||||||
return(STATUS_INSUFFICIENT_RESOURCES);
|
return(STATUS_INSUFFICIENT_RESOURCES);
|
||||||
|
@ -235,7 +235,7 @@ NtfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
|
||||||
ExFreePool(BootSector);
|
ExFreePool(BootSector);
|
||||||
|
|
||||||
MftRecord = ExAllocatePoolWithTag(NonPagedPool,
|
MftRecord = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
NtfsInfo->BytesPerFileRecord, TAG_NTFS);
|
NtfsInfo->BytesPerFileRecord, TAG_NTFS);
|
||||||
if (MftRecord == NULL)
|
if (MftRecord == NULL)
|
||||||
{
|
{
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
@ -347,8 +347,7 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
Status = IoCreateDevice(NtfsGlobalData->DriverObject,
|
Status = IoCreateDevice(NtfsGlobalData->DriverObject,
|
||||||
sizeof(DEVICE_EXTENSION),
|
sizeof(DEVICE_EXTENSION),
|
||||||
NULL,
|
NULL,
|
||||||
FILE_DEVICE_FILE_SYSTEM,
|
FILE_DEVICE_DISK_FILE_SYSTEM,
|
||||||
// FILE_DEVICE_DISK_FILE_SYSTEM,
|
|
||||||
0,
|
0,
|
||||||
FALSE,
|
FALSE,
|
||||||
&NewDeviceObject);
|
&NewDeviceObject);
|
||||||
|
@ -380,7 +379,7 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
Vcb->StorageDevice);
|
Vcb->StorageDevice);
|
||||||
|
|
||||||
|
|
||||||
Fcb = NtfsCreateFCB(NULL);
|
Fcb = NtfsCreateFCB(NULL, Vcb);
|
||||||
if (Fcb == NULL)
|
if (Fcb == NULL)
|
||||||
{
|
{
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
@ -407,7 +406,7 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
Vcb->StreamFileObject->Vpb = Vcb->Vpb;
|
Vcb->StreamFileObject->Vpb = Vcb->Vpb;
|
||||||
Ccb->PtrFileObject = Vcb->StreamFileObject;
|
Ccb->PtrFileObject = Vcb->StreamFileObject;
|
||||||
Fcb->FileObject = Vcb->StreamFileObject;
|
Fcb->FileObject = Vcb->StreamFileObject;
|
||||||
Fcb->DevExt = (PDEVICE_EXTENSION)Vcb->StorageDevice;
|
Fcb->Vcb = (PDEVICE_EXTENSION)Vcb->StorageDevice;
|
||||||
|
|
||||||
Fcb->Flags = FCB_IS_VOLUME_STREAM;
|
Fcb->Flags = FCB_IS_VOLUME_STREAM;
|
||||||
|
|
||||||
|
@ -425,7 +424,6 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
Fcb);
|
Fcb);
|
||||||
|
|
||||||
ExInitializeResourceLite(&Vcb->DirResource);
|
ExInitializeResourceLite(&Vcb->DirResource);
|
||||||
// ExInitializeResourceLite(&DeviceExt->FatResource);
|
|
||||||
|
|
||||||
KeInitializeSpinLock(&Vcb->FcbListLock);
|
KeInitializeSpinLock(&Vcb->FcbListLock);
|
||||||
InitializeListHead(&Vcb->FcbListHead);
|
InitializeListHead(&Vcb->FcbListHead);
|
||||||
|
|
|
@ -130,7 +130,7 @@ typedef struct _FCB
|
||||||
SECTION_OBJECT_POINTERS SectionObjectPointers;
|
SECTION_OBJECT_POINTERS SectionObjectPointers;
|
||||||
|
|
||||||
PFILE_OBJECT FileObject;
|
PFILE_OBJECT FileObject;
|
||||||
PDEVICE_EXTENSION DevExt;
|
PNTFS_VCB Vcb;
|
||||||
|
|
||||||
WCHAR *ObjectName; /* point on filename (250 chars max) in PathName */
|
WCHAR *ObjectName; /* point on filename (250 chars max) in PathName */
|
||||||
WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
|
WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
|
||||||
|
@ -428,7 +428,7 @@ NtfsRelReadAhead(PVOID Context);
|
||||||
/* fcb.c */
|
/* fcb.c */
|
||||||
|
|
||||||
PNTFS_FCB
|
PNTFS_FCB
|
||||||
NtfsCreateFCB(PCWSTR FileName);
|
NtfsCreateFCB(PCWSTR FileName, PNTFS_VCB Vcb);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NtfsDestroyFCB(PNTFS_FCB Fcb);
|
NtfsDestroyFCB(PNTFS_FCB Fcb);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue