Поделиться через


Драйвер средства чтения WDM

Обязательные подпрограммы

Для драйвера чтения WDM требуются следующие подпрограммы.

DriverEntry

Инициализирует объект драйвера и таблицу диспетчеризации.

AddDevice

Создает объект устройства для средства чтения смарт-карта. Кроме того, AddDevice может вызывать любую из следующих подпрограмм библиотек драйверов:

Выгрузить

Удаляет драйвер из системы.

DispatchCreate

- и -

DispatchClose

Поддерживает IRP_MJ_CREATE и IRP_MJ_CLOSE< соответственно. Чтобы установить подключение к средству чтения, диспетчер ресурсов отправляет IRP_MJ_CREATE драйверу средства чтения. Чтобы разорвать подключение, диспетчер ресурсов отправляет IRP_MJ_CLOSE.

DispatchCleanup

Поддерживает IRP_MJ_CLEANUP, которые диспетчер ресурсов отправляет драйверу средства чтения для отмены ожидающих запросов ввода-вывода.

DispatchPnP

Поддерживает IRP_MJ_PNP

DispatchPower

Поддерживает IRP_MJ_POWER.

DispatchDeviceControl

Поддерживает IRP_MJ_DEVICE_CONTROL и является main точкой входа для запросов смарт-карта. После получения IRP_MJ_DEVICE_CONTROL DispatchDeviceControl должен немедленно вызвать SmartcardDeviceControl (WDM), который является подпрограммой библиотеки драйверов смарт-карта, обрабатывающей запросы на управление устройством. В следующем примере кода показано, как вызвать эту подпрограмму библиотеки из драйвера WDM:

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

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

Если не удается обработать определенный IOCTL,указанный в вызове, SmartcardDeviceControl вызовет обратный вызов драйвера для неизвестных запросов IOCTL.