I was wondering where does IoAllocateController get the IRP pointer that it
passes to your execution routine? I am guessing that it gets it from a
current IRP pointer in the DEVICE_OBJECT that you pass to it. If so, when
does this pointer get updated, and isn’t this completely unsafe to do on
multiple threads/processors?
–>Phillip Susi
xxxxx@iag.net
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
Yes the IRP pointer is CurrentIrp pointer of the DeviceObject. The pointer
gets updated when you call IoStartNextPacket. Please note, CurrentIrp,
StartIo Routine, IoStartPacket, and IoStartNextPacket go as a package. Their
usage is tied with one another. So to understand the safety of this pointer,
you have to understand how IoStartPacket/IoStartNextPacket works for
queuing/de-queueing IRPs from the deviceobject’s internal queue. Check the
i8042prt sample to learn more.
-Eliyas
-----Original Message-----
From: Phillip Susi [mailto:xxxxx@iag.net]
Sent: Saturday, February 24, 2001 2:43 PM
To: NT Developers Interest List
Subject: [ntdev] IoAllocateController and the IRP pointer it gives
I was wondering where does IoAllocateController get the IRP pointer that it
passes to your execution routine? I am guessing that it gets it from a
current IRP pointer in the DEVICE_OBJECT that you pass to it. If so, when
does this pointer get updated, and isn’t this completely unsafe to do on
multiple threads/processors?
–>Phillip Susi
xxxxx@iag.net
You are currently subscribed to ntdev as: xxxxx@microsoft.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
Aha!, so if I’m not using IoStartNextPacket() to queue and serialize
service of the IRPs, I must ignore the IRP pointer. Thanks for clearing
that up.
At 10:51 AM 2/26/01 -0800, you wrote:
Yes the IRP pointer is CurrentIrp pointer of the DeviceObject. The pointer
gets updated when you call IoStartNextPacket. Please note, CurrentIrp,
StartIo Routine, IoStartPacket, and IoStartNextPacket go as a package. Their
usage is tied with one another. So to understand the safety of this pointer,
you have to understand how IoStartPacket/IoStartNextPacket works for
queuing/de-queueing IRPs from the deviceobject’s internal queue. Check the
i8042prt sample to learn more.
-Eliyas
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com