I’m wondering about the following code in module cddata.c, function
CdProcessException():
//
// If we are not a top level request then we just complete the
request
// with the current status code.
//
if (!FlagOn( IrpContext->Flags, IRP_CONTEXT_FLAG_TOP_LEVEL )) {
CdCompleteRequest( IrpContext, Irp, ExceptionCode );
return ExceptionCode;
}
If an IRP_MJ_READ enters CDFS which results in STATUS_CANT_WAIT then
CdProcessException() will be called from the main dispatch CdFsdDispatch()
routine and the IRP will be completed (in the above code), if the IRP is
not top-level, then the Irp will be retried in CdFsdDispatch(). Wouldn’t
this be problematic if the IRP is completed and then retried? This is a
situation that verifier.exe would catch…wouldn’t it?
I’m sure that I’m overlooking something, any help would be appreciated.
Thanks.