[oR]
Testing Driver Dispatch Routines
Even though a driver may be far from complete when only the DriverEntry, Unload, and Dispatch routines are present, significant code paths can be
tested
at this point. In particular, all of the following can be
verified
with a simple Win32 console program:
-
Opens and
closes
a handle to the device.
-
Supports Win32 I/O function calls that return successfully, even if zero byte transfers are specified.
-
Manages
requests
from multiple
callers
.
While the successful completion of these tests is hardly earth-shattering, it does form a tried-and-true recipe for driver authoring: Build a driver framework that is proven
before
adding hardware interaction.
Testing Procedure
The following procedure checks all the code paths through a driver's Dispatch routines:
-
Write IRP_MJ_CREATE and IRP_MJ_CLOSE Dispatch routines for the driver.
-
Test the driver with a simple Win32 console program that gets a handle to the device under test and then closes the handle.
-
Write other Dispatch routines but ensure that all call
IoCompeteRequest
rather than starting any device operations.
-
Enhance the Win32 test program to make
ReadFile
,
WriteFile
, and
DeviceIoControl
calls that exercise each driver's Dispatch routine. Alternatively, the test program can request zero-byte transfers.
-
If a device is
sharable
, run several copies of the test program at once to be sure the driver works with multiple
open
handles.
-
If a driver supports multiple physical devices, repeat the test with each device unit.
Sample Test Program
This is an example of a Win32 console test program that can be used to verify code paths through a driver's Dispatch routines.
#include <windows.h>
#include <stdio.h>
void main() {
HANDLE hDevice;
BOOL status;
hDevice = CreateFile( "\\.\LBK1" ... );
:
status = ReadFile( hDevice, ... );
:
status = WriteFile( hDevice, ... );
:
status = DeviceIoControl( hDevice, ... );
:
status = CloseHandle( hDevice );
}
|