WDM Reader Driver

Required routines

The following routines are required by a WDM reader driver.

DriverEntry

Initializes the driver object and the dispatch table.

AddDevice

Creates a device object for the smart card reader. In addition, AddDevice can call any of the following driver library routines:

Unload

Removes the driver from the system.

DispatchCreate

-and-

DispatchClose

Supports IRP_MJ_CREATE and IRP_MJ_CLOSE&lt, respectively. To establish a connection to the reader, the resource manager sends IRP_MJ_CREATE to the reader driver. To sever the connection, the resource manager sends IRP_MJ_CLOSE.

DispatchCleanup

Supports IRP_MJ_CLEANUP, which the resource manager sends to the reader driver to cancel pending I/O requests.

DispatchPnP

Supports IRP_MJ_PNP

DispatchPower

Supports IRP_MJ_POWER.

DispatchDeviceControl

Supports IRP_MJ_DEVICE_CONTROL and is the main entry point for smart card requests. Upon receiving IRP_MJ_DEVICE_CONTROL, DispatchDeviceControl must immediately call SmartcardDeviceControl (WDM), which is the smart card driver library routine that handles device-control requests. The following code example shows how to call this library routine from a WDM driver:

NTSTATUS
DriverDeviceControl(
    PDEVICE_OBJECT DeviceObject,
    PIRP Irp
    )
{
    PDEVICE_EXTENSION deviceExtension = DeviceObject -> DeviceExtension;

    return SmartcardDeviceControl(
        &(deviceExtension->SmartcardExtension),
        Irp
        );

If it is unable to handle the particular IOCTL that is indicated in the call, SmartcardDeviceControl will call the driver's callback for unknown IOCTL requests.