mirror of
https://github.com/reactos/reactos.git
synced 2024-08-12 22:26:31 +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
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue