Explanation for verifier bug check 0xc9, 0x23a

Hi,

On stressing my filter driver on XP, by executing a program stored on a CD
and ejecting the CD while it is loading, I got a verifier error 0xc9,
0x23A, which is described as “A driver has forwarded an IRP at an IRQL that
is illegal for this major code. (IRP specified.)”.

The stack is:
fc6a9c0c 80644931 nt!DbgBreakPoint
fc6a9c28 806449cd nt!ViBugcheckPrompt+0xf0
fc6a9ebc 80644a66 nt!VfBugcheckThrowException+0x8a
fc6a9fa8 806454b7 nt!VfBugcheckThrowIoException+0x8c
fc6a9fc8 80644206 nt!VfGenericVerifyNewIrp+0x5e
fc6a9fe8 80647dc6 nt!VfMajorVerifyNewIrp+0x56
fc6aa044 8063ca7f nt!IovpCallDriver1+0x377
fc6aa06c fb1efa74 nt!IovCallDriver+0x8c
fc6aa090 fb2017b5 iOraIcpt!SoftCdUtilReadFile+0x74
fc6aa144 fb1f9def iOraIcpt!SoftCdDrvFileRead+0x59b
fc6aa210 804ec04f iOraIcpt!SoftCdHookHook+0xa08
fc6aa220 8063ca91 nt!IopfCallDriver+0x31
fc6aa244 804e88bb nt!IovCallDriver+0x9e
fc6aa258 804e88db nt!IopPageReadInternal+0xf2
fc6aa278 804e8972 nt!IoPageRead+0x19
fc6aa2e8 804edf29 nt!MiDispatchFault+0x270
fc6aa338 804d7a5b nt!MmAccessFault+0xb0b
fc6aa338 80582e79 nt!KiTrap0E+0xb8
fc6aa414 8058300e nt!MiSecureVirtualMemory+0x105
fc6aa428 bf84036a nt!MmSecureVirtualMemory+0x13

The “iOraIcpt” calls are mine. The IRQL==2 and SoftCdUtilReadFile creates
an IRP_MJ_READ (with IoBuildSynchronousFsdRequest) and passes it down the
device chain.

I have some questions:

  1. Is there any IRQL constraint on IRP_MJ_READ IRPs in IoCallDriver?
  2. As this is in a paging context, do I need any extra flags in the IRP I
    create and pass down?
  3. Is it a “bad idea” to eject a CD-ROM from which you are currently
    paging?

Thanks

Brian


You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com