mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 22:52:54 +00:00
- Fill in Identifier field when creating NTFS_xCB
- Changed a memset call to RtlZeroMemory svn path=/trunk/; revision=32694
This commit is contained in:
parent
1789bf3561
commit
8bc4ddbd5d
2 changed files with 50 additions and 37 deletions
|
@ -75,6 +75,9 @@ NtfsCreateFCB(PCWSTR FileName)
|
||||||
Fcb = ExAllocatePoolWithTag(NonPagedPool, sizeof(NTFS_FCB), TAG_FCB);
|
Fcb = ExAllocatePoolWithTag(NonPagedPool, sizeof(NTFS_FCB), TAG_FCB);
|
||||||
RtlZeroMemory(Fcb, sizeof(NTFS_FCB));
|
RtlZeroMemory(Fcb, sizeof(NTFS_FCB));
|
||||||
|
|
||||||
|
Fcb->Identifier.Type = NTFS_TYPE_FCB;
|
||||||
|
Fcb->Identifier.Size = sizeof(NTFS_TYPE_FCB);
|
||||||
|
|
||||||
if (FileName)
|
if (FileName)
|
||||||
{
|
{
|
||||||
wcscpy(Fcb->PathName, FileName);
|
wcscpy(Fcb->PathName, FileName);
|
||||||
|
@ -231,6 +234,9 @@ NtfsFCBInitializeCache(PNTFS_VCB Vcb,
|
||||||
}
|
}
|
||||||
RtlZeroMemory(newCCB, sizeof(NTFS_CCB));
|
RtlZeroMemory(newCCB, sizeof(NTFS_CCB));
|
||||||
|
|
||||||
|
newCCB->Identifier.Type = NTFS_TYPE_CCB;
|
||||||
|
newCCB->Identifier.Size = sizeof(NTFS_TYPE_CCB);
|
||||||
|
|
||||||
FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers;
|
FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers;
|
||||||
FileObject->FsContext = Fcb;
|
FileObject->FsContext = Fcb;
|
||||||
FileObject->FsContext2 = newCCB;
|
FileObject->FsContext2 = newCCB;
|
||||||
|
@ -396,7 +402,10 @@ NtfsAttachFCBToFileObject(PNTFS_VCB Vcb,
|
||||||
{
|
{
|
||||||
return(STATUS_INSUFFICIENT_RESOURCES);
|
return(STATUS_INSUFFICIENT_RESOURCES);
|
||||||
}
|
}
|
||||||
memset(newCCB, 0, sizeof(NTFS_CCB));
|
RtlZeroMemory(newCCB, sizeof(NTFS_CCB));
|
||||||
|
|
||||||
|
newCCB->Identifier.Type = NTFS_TYPE_CCB;
|
||||||
|
newCCB->Identifier.Size = sizeof(NTFS_TYPE_CCB);
|
||||||
|
|
||||||
FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers;
|
FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers;
|
||||||
FileObject->FsContext = Fcb;
|
FileObject->FsContext = Fcb;
|
||||||
|
|
|
@ -304,12 +304,12 @@ static NTSTATUS
|
||||||
NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
PIRP Irp)
|
PIRP Irp)
|
||||||
{
|
{
|
||||||
PDEVICE_EXTENSION DeviceExt = NULL;
|
|
||||||
PDEVICE_OBJECT NewDeviceObject = NULL;
|
PDEVICE_OBJECT NewDeviceObject = NULL;
|
||||||
PDEVICE_OBJECT DeviceToMount;
|
PDEVICE_OBJECT DeviceToMount;
|
||||||
PIO_STACK_LOCATION Stack;
|
PIO_STACK_LOCATION Stack;
|
||||||
PNTFS_FCB Fcb = NULL;
|
PNTFS_FCB Fcb = NULL;
|
||||||
PNTFS_CCB Ccb = NULL;
|
PNTFS_CCB Ccb = NULL;
|
||||||
|
PNTFS_VCB Vcb = NULL;
|
||||||
PVPB Vpb;
|
PVPB Vpb;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
@ -343,26 +343,28 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
goto ByeBye;
|
goto ByeBye;
|
||||||
|
|
||||||
NewDeviceObject->Flags = NewDeviceObject->Flags | DO_DIRECT_IO;
|
NewDeviceObject->Flags = NewDeviceObject->Flags | DO_DIRECT_IO;
|
||||||
DeviceExt = (PVOID)NewDeviceObject->DeviceExtension;
|
Vcb = (PVOID)NewDeviceObject->DeviceExtension;
|
||||||
RtlZeroMemory(DeviceExt,
|
RtlZeroMemory(Vcb, sizeof(NTFS_VCB));
|
||||||
sizeof(DEVICE_EXTENSION));
|
|
||||||
|
Vcb->Identifier.Type = NTFS_TYPE_VCB;
|
||||||
|
Vcb->Identifier.Size = sizeof(NTFS_TYPE_VCB);
|
||||||
|
|
||||||
Status = NtfsGetVolumeData(DeviceToMount,
|
Status = NtfsGetVolumeData(DeviceToMount,
|
||||||
DeviceExt);
|
Vcb);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
goto ByeBye;
|
goto ByeBye;
|
||||||
|
|
||||||
NewDeviceObject->Vpb = DeviceToMount->Vpb;
|
NewDeviceObject->Vpb = DeviceToMount->Vpb;
|
||||||
|
|
||||||
DeviceExt->StorageDevice = DeviceToMount;
|
Vcb->StorageDevice = DeviceToMount;
|
||||||
DeviceExt->StorageDevice->Vpb->DeviceObject = NewDeviceObject;
|
Vcb->StorageDevice->Vpb->DeviceObject = NewDeviceObject;
|
||||||
DeviceExt->StorageDevice->Vpb->RealDevice = DeviceExt->StorageDevice;
|
Vcb->StorageDevice->Vpb->RealDevice = Vcb->StorageDevice;
|
||||||
DeviceExt->StorageDevice->Vpb->Flags |= VPB_MOUNTED;
|
Vcb->StorageDevice->Vpb->Flags |= VPB_MOUNTED;
|
||||||
NewDeviceObject->StackSize = DeviceExt->StorageDevice->StackSize + 1;
|
NewDeviceObject->StackSize = Vcb->StorageDevice->StackSize + 1;
|
||||||
NewDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
NewDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
|
|
||||||
DeviceExt->StreamFileObject = IoCreateStreamFileObject(NULL,
|
Vcb->StreamFileObject = IoCreateStreamFileObject(NULL,
|
||||||
DeviceExt->StorageDevice);
|
Vcb->StorageDevice);
|
||||||
|
|
||||||
|
|
||||||
Fcb = NtfsCreateFCB(NULL);
|
Fcb = NtfsCreateFCB(NULL);
|
||||||
|
@ -380,47 +382,49 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto ByeBye;
|
goto ByeBye;
|
||||||
}
|
}
|
||||||
RtlZeroMemory(Ccb,
|
RtlZeroMemory(Ccb, sizeof(NTFS_CCB));
|
||||||
sizeof(NTFS_CCB));
|
|
||||||
|
|
||||||
DeviceExt->StreamFileObject->FsContext = Fcb;
|
Ccb->Identifier.Type = NTFS_TYPE_CCB;
|
||||||
DeviceExt->StreamFileObject->FsContext2 = Ccb;
|
Ccb->Identifier.Size = sizeof(NTFS_TYPE_CCB);
|
||||||
DeviceExt->StreamFileObject->SectionObjectPointer = &Fcb->SectionObjectPointers;
|
|
||||||
DeviceExt->StreamFileObject->PrivateCacheMap = NULL;
|
Vcb->StreamFileObject->FsContext = Fcb;
|
||||||
DeviceExt->StreamFileObject->Vpb = DeviceExt->Vpb;
|
Vcb->StreamFileObject->FsContext2 = Ccb;
|
||||||
Ccb->PtrFileObject = DeviceExt->StreamFileObject;
|
Vcb->StreamFileObject->SectionObjectPointer = &Fcb->SectionObjectPointers;
|
||||||
Fcb->FileObject = DeviceExt->StreamFileObject;
|
Vcb->StreamFileObject->PrivateCacheMap = NULL;
|
||||||
Fcb->DevExt = (PDEVICE_EXTENSION)DeviceExt->StorageDevice;
|
Vcb->StreamFileObject->Vpb = Vcb->Vpb;
|
||||||
|
Ccb->PtrFileObject = Vcb->StreamFileObject;
|
||||||
|
Fcb->FileObject = Vcb->StreamFileObject;
|
||||||
|
Fcb->DevExt = (PDEVICE_EXTENSION)Vcb->StorageDevice;
|
||||||
|
|
||||||
Fcb->Flags = FCB_IS_VOLUME_STREAM;
|
Fcb->Flags = FCB_IS_VOLUME_STREAM;
|
||||||
|
|
||||||
Fcb->RFCB.FileSize.QuadPart = DeviceExt->NtfsInfo.SectorCount * DeviceExt->NtfsInfo.BytesPerSector;
|
Fcb->RFCB.FileSize.QuadPart = Vcb->NtfsInfo.SectorCount * Vcb->NtfsInfo.BytesPerSector;
|
||||||
Fcb->RFCB.ValidDataLength.QuadPart = DeviceExt->NtfsInfo.SectorCount * DeviceExt->NtfsInfo.BytesPerSector;
|
Fcb->RFCB.ValidDataLength.QuadPart = Vcb->NtfsInfo.SectorCount * Vcb->NtfsInfo.BytesPerSector;
|
||||||
Fcb->RFCB.AllocationSize.QuadPart = DeviceExt->NtfsInfo.SectorCount * DeviceExt->NtfsInfo.BytesPerSector; /* Correct? */
|
Fcb->RFCB.AllocationSize.QuadPart = Vcb->NtfsInfo.SectorCount * Vcb->NtfsInfo.BytesPerSector; /* Correct? */
|
||||||
|
|
||||||
// Fcb->Entry.ExtentLocationL = 0;
|
// Fcb->Entry.ExtentLocationL = 0;
|
||||||
// Fcb->Entry.DataLengthL = DeviceExt->CdInfo.VolumeSpaceSize * BLOCKSIZE;
|
// Fcb->Entry.DataLengthL = DeviceExt->CdInfo.VolumeSpaceSize * BLOCKSIZE;
|
||||||
|
|
||||||
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
CcInitializeCacheMap(Vcb->StreamFileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
FALSE,
|
FALSE,
|
||||||
&(NtfsGlobalData->CacheMgrCallbacks),
|
&(NtfsGlobalData->CacheMgrCallbacks),
|
||||||
Fcb);
|
Fcb);
|
||||||
|
|
||||||
ExInitializeResourceLite(&DeviceExt->DirResource);
|
ExInitializeResourceLite(&Vcb->DirResource);
|
||||||
// ExInitializeResourceLite(&DeviceExt->FatResource);
|
// ExInitializeResourceLite(&DeviceExt->FatResource);
|
||||||
|
|
||||||
KeInitializeSpinLock(&DeviceExt->FcbListLock);
|
KeInitializeSpinLock(&Vcb->FcbListLock);
|
||||||
InitializeListHead(&DeviceExt->FcbListHead);
|
InitializeListHead(&Vcb->FcbListHead);
|
||||||
|
|
||||||
/* Get serial number */
|
/* Get serial number */
|
||||||
NewDeviceObject->Vpb->SerialNumber = DeviceExt->NtfsInfo.SerialNumber;
|
NewDeviceObject->Vpb->SerialNumber = Vcb->NtfsInfo.SerialNumber;
|
||||||
|
|
||||||
/* Get volume label */
|
/* Get volume label */
|
||||||
NewDeviceObject->Vpb->VolumeLabelLength = DeviceExt->NtfsInfo.VolumeLabelLength;
|
NewDeviceObject->Vpb->VolumeLabelLength = Vcb->NtfsInfo.VolumeLabelLength;
|
||||||
RtlCopyMemory (NewDeviceObject->Vpb->VolumeLabel,
|
RtlCopyMemory(NewDeviceObject->Vpb->VolumeLabel,
|
||||||
DeviceExt->NtfsInfo.VolumeLabel,
|
Vcb->NtfsInfo.VolumeLabel,
|
||||||
DeviceExt->NtfsInfo.VolumeLabelLength);
|
Vcb->NtfsInfo.VolumeLabelLength);
|
||||||
|
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
|
@ -428,8 +432,8 @@ ByeBye:
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* Cleanup */
|
/* Cleanup */
|
||||||
if (DeviceExt && DeviceExt->StreamFileObject)
|
if (Vcb && Vcb->StreamFileObject)
|
||||||
ObDereferenceObject(DeviceExt->StreamFileObject);
|
ObDereferenceObject(Vcb->StreamFileObject);
|
||||||
if (Fcb)
|
if (Fcb)
|
||||||
ExFreePool(Fcb);
|
ExFreePool(Fcb);
|
||||||
if (Ccb)
|
if (Ccb)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue