Драйвер средства чтения WDM
Обязательные подпрограммы
Для драйвера чтения WDM требуются следующие подпрограммы.
DriverEntry
Инициализирует объект драйвера и таблицу диспетчеризации.
AddDevice
Создает объект устройства для средства чтения смарт-карта. Кроме того, AddDevice может вызывать любую из следующих подпрограмм библиотек драйверов:
- SmartcardInitialize (WDM) для завершения инициализации драйвера. Вызов этой процедуры в AddDevice является обязательным.
- SmartcardLogError (WDM) для регистрации ошибки. Драйверы должны вызывать эту подпрограмму в AddDevice в случае сбоя SmartcardInitialize (WDM).
- SmartcardCreateLink (WDM) для создания символьной ссылки для устройства чтения в реестре.
Выгрузить
Удаляет драйвер из системы.
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 -> DeviceExtension;
return SmartcardDeviceControl(
&(deviceExtension->SmartcardExtension),
Irp
);
Если не удается обработать определенный IOCTL,указанный в вызове, SmartcardDeviceControl вызовет обратный вызов драйвера для неизвестных запросов IOCTL.