33
The NT 4 DDK wrongly states that RemoveHeadList and RemoveTailList return NULL if the list is empty.
34
See Chapter 19 for the best way to talk to a parallel port in NT and W2000.
35
You might want to add another IOCTL that tells you which resources a device is using, so applications know which WdmIo device to use.
36
Or for that matter, an application must not fire off several overlapped requests at the same time.
37
If there is more than one WdmIo device, each device has a device queue that can be processed simultaneously by WdmIoStartIo.
38
Note that the
39
At the last moment, I have moved this code back into
40
In fact, the I/O Manager could work out if an IRP is in the device queue.
41
You may also decide to queue IRPs while a device is asleep. The example drivers in this book opt to wake up the device when an I/O request arrives.
42
Note that the interrupt level is not the same as the IRQ number. IRQ7 has interrupt level 20.
43
Actually, the commands could take a long time to run if the Win32 application includes large delay commands. However, moving the command processing to the DPC would not help, as a Critical section routine would have to be run, bringing the IRQL back up the DIRQL.
44
The
45
I do not know where they go in Windows 98.
46
You can also access the HID class driver in a user-mode client application.
47
The only alternative is to remove the
48
See Chapter 23 for details of