[NTDEV] Rules for the use of IoGetCurrentIrpStackLocation in Windows 2000

Dual Pentium II’s
Windows 2000, SP1

In a function that is called during DIRQL, I am calling IGCISL, with a valid
IRP, to decide which of three IO control codes that I may have. All though
the code is fresh for this 2000 driver, it is legacy logic from a functional
NT 4 driver. In other words … the infamous whine of “Well it worked in
NT4”.

When accessing the stack location before passing the control function to the
hardware, I note that StackCount in the IRP is at 2 and that CurrentLocation
is set to 2. The return from IGCISL has a valid pointer. However, when I
call IGCISL at DIRQL, CurrentLocation is set to 4, and the stack pointer I
get back is NULL. I could pass the stack location via a context pointer, but
that requires setting up the storage and deviates from once functional code.
Besides, IGCISL does not indicate it cannot be called at an IRQL above
DISPATCH_LEVEL… I see no reason why IRQL should be a restriction since all
IGCISL does is fetch the CurrentStackLocation field in the Tail.Overlay
structure of the IRP. However, why are CurrentStackLocation NULL and
CurrentLocation 4?

Gary


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