In “Windows NT Device Driver Development” by Peter Viscarola and Tony Mason
(1st edition) there is a section on Fast I/O. On page 240 the last
paragraph states that non-file system drivers can use Fast I/O for
IRP_MJ_DEVICE_CONTROL. I’ve been using this for our drivers under NT and
W2K (WDM driver) and in some cases it has provided us with a substantial
performance improvement.
I’m now testing our drivers on Windows XP and have discovered that the Fast
I/O dispatch doesn’t appear to be called at least for non-file system
drivers. Does anyone have any information on this?
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
“Steve Whitman” wrote in message news:xxxxx@ntdev…
>
> I’m now testing our drivers on Windows XP and have discovered that the
Fast
> I/O dispatch doesn’t appear to be called at least for non-file system
> drivers. Does anyone have any information on this?
>
This is news to me. Last time I checked (after Beta 2), this still worked
for my drivers.
Your Fast I/O entry point is just NOT being CALLED anymore as a result of a
user app sending up a IRP_MJ_DEVICE_CONTROL request? What error is the app
getting back?
Which Build of XP are you using?
Peter
OSR
—
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
Peter,
That is exactly what is happening. My app calls DeviceIoControl(), my
driver gets called but not through the Fast I/O entry point. I first
noticed this because I had an ASSERT in the dispatch routine for the same
IOCTL codes that are implemented in the Fast I/O dispatch and the ASSERT
fired. I then placed a breakpoint in the Fast I/O dispatch routine but it
was never hit. Without the assert the driver was returning
STATUS_INVALID_DEVICE_REQUEST.
Another odd thing is I have an NT driver using Fast I/O and that works just
fine under XP. However my WDM driver (which is mostly the same driver as
the NT one) doesn’t work.
I’m running XP RC2.
-----Original Message-----
From: Peter Viscarola [mailto:xxxxx@osr.com]
Sent: Wednesday, August 22, 2001 2:04 PM
To: NT Developers Interest List
Subject: [ntdev] Re: Fast I/O Dispatch
“Steve Whitman” wrote in message
> news:xxxxx@ntdev…
> >
> > I’m now testing our drivers on Windows XP and have
> discovered that the
> Fast
> > I/O dispatch doesn’t appear to be called at least for
> non-file system
> > drivers. Does anyone have any information on this?
> >
>
> This is news to me. Last time I checked (after Beta 2), this
> still worked
> for my drivers.
>
> Your Fast I/O entry point is just NOT being CALLED anymore as
> a result of a
> user app sending up a IRP_MJ_DEVICE_CONTROL request? What
> error is the app
> getting back?
>
> Which Build of XP are you using?
>
> Peter
> OSR
>
>
>
>
> —
> You are currently subscribed to ntdev as: xxxxx@cognex.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
“Steve Whitman” wrote in message news:xxxxx@ntdev…
>
> Another odd thing is I have an NT driver using Fast I/O and that works
just
> fine under XP. However my WDM driver (which is mostly the same driver as
> the NT one) doesn’t work.
>
Hmmmm. How are you opening the device… Are you exporting a symbolic link
or (ugh) registering a device interface? Not that I know if that makes any
difference, but it’s the only question I could think of to ask :-o
Peter
OSR
—
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
“Steve Whitman” wrote in message news:xxxxx@ntdev…
>
> I’m now testing our drivers on Windows XP and have discovered that the
Fast
> I/O dispatch doesn’t appear to be called at least for non-file system
> drivers. Does anyone have any information on this?
>
Steve and I took this offline for some real-time discussion.
Steve cleverly narrowed-down the problem to the case (on XP) when he was
running Driver Verifier. When he ran with Verifier, his Fast I/O dispatch
entry point for Device I/O Control was NEVER called. When Driver Verifier
was NOT enabled, it was ALWAYS called.
This makes sense, though it’s annoying. Recall that Eliyas has told us that
Verifier inserts filters above and below a driver’s FDO. Because Fast I/O
entry points are only called in drivers that are the first driver entered
from the I/O Manager, having a filter above your device results in your
driver’s Fast I/O entry point never being called.
So, this means that device drivers (such as Steve’s) that KNOW they will be
the first driver entered from the I/O Manager (because they know this by
design – as in when they control specialized equipment in a closed system
that should never have strange filters installed), must provide for handling
of Device Control calls via normal dispatch entry points. They can do this
pretty easily by writing a short DispatchDeviceControl routine that merely
calls the Fast I/O Dispatch routine with the correct parameters, and then
calls IoCompeteRequest( ).
It would sure be nice if this were documented somewhere… I guess I’ll
file a bug bash bug and get myself a coffee mug :-p
Peter
—
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
I could’ve lost my memory, but I’m almost 100% sure that I saw fastio
on RC1.
Anders
PV> “Steve Whitman” wrote in message news:xxxxx@ntdev…
>>
>> I’m now testing our drivers on Windows XP and have discovered that the
PV> Fast
>> I/O dispatch doesn’t appear to be called at least for non-file system
>> drivers. Does anyone have any information on this?
>>
PV> This is news to me. Last time I checked (after Beta 2), this still worked
PV> for my drivers.
PV> Your Fast I/O entry point is just NOT being CALLED anymore as a result of a
PV> user app sending up a IRP_MJ_DEVICE_CONTROL request? What error is the app
PV> getting back?
PV> Which Build of XP are you using?
PV> Peter
PV> OSR
PV> —
PV> You are currently subscribed to ntdev as: xxxxx@flaffer.com
PV> To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
–
Best regards,
Anders mailto:xxxxx@flaffer.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