You hit it on the head.
In my initial System PowerIrp handler.
Bad Code;
return PoCallDriver(FdoDx->DeviceToSendIrpsTo, Irp);
Good code;
PoCallDriver(FdoDx->DeviceToSendIrpsTo, Irp);
return STATUS_PENDING;
daniel
-----Original Message-----
From: COX,DAVID (HP-Roseville,ex1) [mailto:david_cox2@hp.com]
Sent: Thursday, May 11, 2000 1:59 PM
To: NT Developers Interest List
Subject: [ntdev] RE: Driver Verifier error message
The instructions you cited say your dispatch should propagate the
status returned from the lower driver; but if the lower driver does
not return STATUS_PENDING, but you are going to defer completion
processing, maybe your dispatch must return STATUS_PENDING?
Dave Cox
Hewlett-Packard Co.
HPSO/SSMO (Santa Barbara)
https://ecardfile.com/id/Dave+Cox
-----Original Message-----
From: Nemiroff, Daniel [mailto:xxxxx@intel.com]
Sent: Thursday, May 11, 2000 1:27 PM
To: NT Developers Interest List
Subject: [ntdev] RE: Driver Verifier error message
DriverVerifier complains during the power-up sequence.
I compared the toaster example with my power-up code path and it’s
functionally identical.
Right after I return STATUS_MORE_PROCESSING_REQUIRED Verifier complains.
Any ideas?
Daniel
-----Original Message-----
From: Eliyas Yakub [mailto:xxxxx@microsoft.com]
Sent: Thursday, May 11, 2000 11:37 AM
To: NT Developers Interest List
Subject: [ntdev] RE: Driver Verifier error message
Yep. You should also Walter Oney’s book to get another perspective on how
this thing works.
-----Original Message-----
From: Nemiroff, Daniel [mailto:xxxxx@intel.com]
Sent: Thursday, May 11, 2000 11:24 AM
To: NT Developers Interest List
Subject: [ntdev] RE: Driver Verifier error message
Eliyas:
Just looked at the Toaster/func sample and it’s pretty strait forward.
However, I’ve always been told that we have to handle PowerUp and PowerDown
conditions differently.
Is this true?
Thanks,
Daniel
-----Original Message-----
From: Eliyas Yakub [mailto:xxxxx@microsoft.com]
Sent: Thursday, May 11, 2000 11:09 AM
To: NT Developers Interest List
Subject: [ntdev] RE: Driver Verifier error message
This stuff is pretty complex and DDK documentation is not very clear. The
doc has not described several little steps that one needs to perform to
avoid violating IRP rules. It just tells you what you need to conceptually.
Not going into lot of details what you are doing wrong, I would suggest you
to follow the function driver’s power handling logic of toaster package. It
shows in terms of real code what the doc is trying to explain in words. It
will save your lot of time and energy.
-Eliyas
-----Original Message-----
From: Nemiroff, Daniel [mailto:xxxxx@intel.com]
Sent: Thursday, May 11, 2000 10:33 AM
To: NT Developers Interest List
Subject: [ntdev] RE: Driver Verifier error message
As I call IoCompleteRequest in the callback routine I set in
PoRequestPowerIrp(…). DriverVerifier signals an error before it sends the
DevicePower Irp I requested with PoRequestPowerIrp.
The DDK states what to do in the callback routine set in PoRequestPowerIrp.
I follow it to the letter:
***From the DDK***
The callback routine must do the following:
- Call PoStartNextPowerIrp to start the next power IRP.
- Complete the system set-power IRP (IoCompleteRequest) with the status
returned for the device set-power IRP.
- Return the status with which the set-power IRPs completed.
***
-Daniel
-----Original Message-----
From: Jamey Kirby [mailto:xxxxx@storagecraft.com]
Sent: Thursday, May 11, 2000 10:13 AM
To: NT Developers Interest List
Subject: [ntdev] RE: Driver Verifier error message
Are you calling IoCompleteRequest()? You must do this yourself if you return
STATUS_MORE_PROCESSING_REQUIRED.
Jamey
-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of Nemiroff, Daniel
Sent: Thursday, May 11, 2000 10:11 AM
To: NT Developers Interest List
Subject: [ntdev] Driver Verifier error message
I’m getting the following DriverVerifier error message in the debugger:
“An IRP dispatch handler has returned without passing down or completing
this Irp or someone forgot to return STATUS_PENDING.”
It appears that it’s mad a me returning STATUS_MORE_PROCESSING_REQUIRED
after I call PoRequestPowerIrp(…). However, I’m following the
exact steps
specified in the DDK, below.
FROM DDK:
- Set an IoCompletion routine in the system set-power IRP.
- Set up the IRP stack location for the next lower driver by
calling IoCopyCurrentIrpStackLocationToNext.
- Call PoCallDriver to pass the IRP to the next-lower driver.
- Propagate the status returned by PoCallDriver as the return value
of its DispatchPower routine.
In the IoCompletion routine, the driver sends a device set-power IRP as
follows:
- Inspect the IRP to get the requested system power state. Choose
an appropriate device power state for that system state.
- Call PoRequestPowerIrp to send an IRP_MN_SET_POWER for the device
power state determined in Step 1. The power policy owner must send the
device set-power request even if the device is already in that state.
- Specify a callback routine (CompletionFunction) in the call to
PoRequestPowerIrp and pass the system IRP in the Context area.
- Return STATUS_MORE_PROCESSING_REQUIRED from the IoCompletion
routine, so that the driver can finish processing the system set-power IRP
in the callback routine.
Any ideas?
Daniel
You are currently subscribed to ntdev as: xxxxx@storagecraft.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
You are currently subscribed to ntdev as: xxxxx@intel.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
You are currently subscribed to ntdev as: xxxxx@microsoft.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
You are currently subscribed to ntdev as: xxxxx@intel.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
You are currently subscribed to ntdev as: xxxxx@microsoft.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
You are currently subscribed to ntdev as: xxxxx@intel.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
You are currently subscribed to ntdev as: david_cox2@hp.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)
You are currently subscribed to ntdev as: xxxxx@intel.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)