PIRP Irp;
NTSTATUS Status;
+again:
KeInitializeEvent(&Event,
NotificationEvent,
FALSE);
if (Status == STATUS_VERIFY_REQUIRED)
{
PDEVICE_OBJECT DeviceToVerify;
- NTSTATUS NewStatus;
DPRINT1("STATUS_VERIFY_REQUIRED\n");
DeviceToVerify = IoGetDeviceToVerify(PsGetCurrentThread());
IoSetDeviceToVerify(PsGetCurrentThread(), NULL);
- NewStatus = IoVerifyVolume(DeviceToVerify, FALSE);
- DPRINT1("IoVerifyVolume() returned (Status %lx)\n", NewStatus);
+ Status = IoVerifyVolume(DeviceToVerify, FALSE);
+ DPRINT1("IoVerifyVolume() returned (Status %lx)\n", Status);
+
+ if (NT_SUCCESS(Status))
+ {
+ DPRINT1("Volume verify succeeded; trying request again\n");
+ goto again;
+ }
}
DPRINT("CdfsReadSectors() failed (Status %x)\n", Status);
InputBuffer, InputBufferSize, OutputBuffer, OutputBufferSize,
OutputBufferSize ? *OutputBufferSize : 0);
+again:
KeInitializeEvent (&Event, NotificationEvent, FALSE);
DPRINT("Building device I/O control request ...\n");
if (Status == STATUS_VERIFY_REQUIRED)
{
PDEVICE_OBJECT DeviceToVerify;
- NTSTATUS NewStatus;
DPRINT1("STATUS_VERIFY_REQUIRED\n");
DeviceToVerify = IoGetDeviceToVerify(PsGetCurrentThread());
IoSetDeviceToVerify(PsGetCurrentThread(), NULL);
- NewStatus = IoVerifyVolume(DeviceToVerify, FALSE);
- DPRINT1("IoVerifyVolume() returned (Status %lx)\n", NewStatus);
+ if (DeviceToVerify)
+ {
+ Status = IoVerifyVolume(DeviceToVerify, FALSE);
+ DPRINT1("IoVerifyVolume() returned (Status %lx)\n", Status);
+ }
+
+ if (NT_SUCCESS(Status))
+ {
+ DPRINT1("Volume verify succeeded; trying request again\n");
+ goto again;
+ }
}
DPRINT("Returning Status %x\n", Status);