Driver de Leitor do WDM
Rotinas necessárias
As rotinas a seguir são exigidas por um driver de leitor do WDM.
DriverEntry
Inicializa o objeto driver e a tabela de expedição.
AddDevice
Cria um objeto de dispositivo para o leitor de cartão inteligente. Além disso, AddDevice pode chamar qualquer uma das seguintes rotinas de biblioteca de driver:
- SmartcardInitialize (WDM) para concluir a inicialização do driver. Chamar essa rotina em AddDevice é obrigatório.
- SmartcardLogError (WDM) para registrar um erro. Os drivers devem chamar essa rotina em AddDevice se o SmartcardInitialize (WDM) falhar.
- SmartcardCreateLink (WDM) para criar um link simbólico para o dispositivo leitor no registro.
Descarregar
Remove o driver do sistema.
DispatchCreate
-e-
DispatchClose
Dá suporte a IRP_MJ_CREATE e IRP_MJ_CLOSE<, respectivamente. Para estabelecer uma conexão com o leitor, o gerenciador de recursos envia IRP_MJ_CREATE para o driver de leitor. Para cortar a conexão, o gerenciador de recursos envia IRP_MJ_CLOSE.
DispatchCleanup
Dá suporte a IRP_MJ_CLEANUP, que o gerenciador de recursos envia ao driver de leitor para cancelar solicitações de E/S pendentes.
DispatchPnP
Dá suporte a IRP_MJ_PNP
DispatchPower
Dá suporte a IRP_MJ_POWER.
DispatchDeviceControl
Dá suporte a IRP_MJ_DEVICE_CONTROL e é o ponto de entrada main para solicitações de cartão inteligentes. Ao receber IRP_MJ_DEVICE_CONTROL, DispatchDeviceControl deve chamar imediatamente SmartcardDeviceControl (WDM), que é a rotina de biblioteca de driver de cartão inteligente que lida com solicitações de controle de dispositivo. O exemplo de código a seguir mostra como chamar essa rotina de biblioteca de um driver WDM:
NTSTATUS
DriverDeviceControl(
PDEVICE_OBJECT DeviceObject,
PIRP Irp
)
{
PDEVICE_EXTENSION deviceExtension = DeviceObject -> DeviceExtension;
return SmartcardDeviceControl(
&(deviceExtension->SmartcardExtension),
Irp
);
Se não for possível lidar com o IOCTL específico indicado na chamada, SmartcardDeviceControl chamará o retorno de chamada do driver para solicitações IOCTL desconhecidas.