- Fill in Identifier field when creating NTFS_xCB

- Changed a memset call to RtlZeroMemory

svn path=/trunk/; revision=32694
This commit is contained in:
Pierre Schweitzer 2008-03-15 09:47:00 +00:00
parent 1789bf3561
commit 8bc4ddbd5d
2 changed files with 50 additions and 37 deletions

View file

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

View file

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