Partilhar via


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:

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 -&gt; DeviceExtension;

    return SmartcardDeviceControl(
        &(deviceExtension-&gt;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.