mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 05:32:55 +00:00
[CDFS]
- Fix CD-ROM disc change handling - Fixes CORE-6119 svn path=/trunk/; revision=65635
This commit is contained in:
parent
5d774268db
commit
2021ab5899
2 changed files with 9 additions and 22 deletions
|
@ -140,10 +140,6 @@ CdfsOpenFile(PDEVICE_EXTENSION DeviceExt,
|
||||||
DPRINT ("Status %lx\n", Status);
|
DPRINT ("Status %lx\n", Status);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (Status == STATUS_NO_MEDIA_IN_DEVICE || Status == STATUS_VERIFY_REQUIRED)
|
|
||||||
{
|
|
||||||
DeviceExt->VolumeDevice->Flags |= DO_VERIFY_VOLUME;
|
|
||||||
}
|
|
||||||
DPRINT1 ("Status %lx\n", Status);
|
DPRINT1 ("Status %lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -453,34 +453,25 @@ CdfsVerifyVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
PIRP Irp)
|
PIRP Irp)
|
||||||
{
|
{
|
||||||
PDEVICE_EXTENSION DeviceExt;
|
PDEVICE_EXTENSION DeviceExt;
|
||||||
PDEVICE_OBJECT DeviceToVerify;
|
|
||||||
PIO_STACK_LOCATION Stack;
|
PIO_STACK_LOCATION Stack;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
CDINFO CdInfo;
|
CDINFO CdInfo;
|
||||||
|
|
||||||
PLIST_ENTRY Entry;
|
PLIST_ENTRY Entry;
|
||||||
PFCB Fcb;
|
PFCB Fcb;
|
||||||
|
PVPB VpbToVerify;
|
||||||
|
|
||||||
DPRINT1 ("CdfsVerifyVolume() called\n");
|
DPRINT1 ("CdfsVerifyVolume() called\n");
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (DeviceObject != CdfsGlobalData->DeviceObject)
|
|
||||||
{
|
|
||||||
DPRINT1("DeviceObject != CdfsGlobalData->DeviceObject\n");
|
|
||||||
return(STATUS_INVALID_DEVICE_REQUEST);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DeviceExt = DeviceObject->DeviceExtension;
|
DeviceExt = DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
Stack = IoGetCurrentIrpStackLocation (Irp);
|
Stack = IoGetCurrentIrpStackLocation (Irp);
|
||||||
DeviceToVerify = Stack->Parameters.VerifyVolume.DeviceObject;
|
VpbToVerify = Stack->Parameters.VerifyVolume.Vpb;
|
||||||
|
|
||||||
FsRtlEnterFileSystem();
|
FsRtlEnterFileSystem();
|
||||||
ExAcquireResourceExclusiveLite (&DeviceExt->VcbResource,
|
ExAcquireResourceExclusiveLite (&DeviceExt->VcbResource,
|
||||||
TRUE);
|
TRUE);
|
||||||
|
|
||||||
if (!(DeviceToVerify->Flags & DO_VERIFY_VOLUME))
|
if (!(VpbToVerify->RealDevice->Flags & DO_VERIFY_VOLUME))
|
||||||
{
|
{
|
||||||
DPRINT1 ("Volume has been verified!\n");
|
DPRINT1 ("Volume has been verified!\n");
|
||||||
ExReleaseResourceLite (&DeviceExt->VcbResource);
|
ExReleaseResourceLite (&DeviceExt->VcbResource);
|
||||||
|
@ -488,14 +479,14 @@ CdfsVerifyVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT1 ("Device object %p Device to verify %p\n", DeviceObject, DeviceToVerify);
|
DPRINT1("Device object %p Device to verify %p\n", DeviceObject, VpbToVerify->RealDevice);
|
||||||
|
|
||||||
Status = CdfsGetVolumeData (DeviceToVerify,
|
Status = CdfsGetVolumeData(VpbToVerify->RealDevice,
|
||||||
&CdInfo);
|
&CdInfo);
|
||||||
if (NT_SUCCESS(Status) &&
|
if (NT_SUCCESS(Status) &&
|
||||||
CdInfo.SerialNumber == DeviceToVerify->Vpb->SerialNumber &&
|
CdInfo.SerialNumber == VpbToVerify->SerialNumber &&
|
||||||
CdInfo.VolumeLabelLength == DeviceToVerify->Vpb->VolumeLabelLength &&
|
CdInfo.VolumeLabelLength == VpbToVerify->VolumeLabelLength &&
|
||||||
!wcsncmp (CdInfo.VolumeLabel, DeviceToVerify->Vpb->VolumeLabel, CdInfo.VolumeLabelLength))
|
!wcsncmp(CdInfo.VolumeLabel, VpbToVerify->VolumeLabel, CdInfo.VolumeLabelLength))
|
||||||
{
|
{
|
||||||
DPRINT1 ("Same volume!\n");
|
DPRINT1 ("Same volume!\n");
|
||||||
|
|
||||||
|
@ -520,7 +511,7 @@ CdfsVerifyVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
Status = STATUS_WRONG_VOLUME;
|
Status = STATUS_WRONG_VOLUME;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceToVerify->Flags &= ~DO_VERIFY_VOLUME;
|
VpbToVerify->RealDevice->Flags &= ~DO_VERIFY_VOLUME;
|
||||||
|
|
||||||
ExReleaseResourceLite (&DeviceExt->VcbResource);
|
ExReleaseResourceLite (&DeviceExt->VcbResource);
|
||||||
FsRtlExitFileSystem();
|
FsRtlExitFileSystem();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue