Partilhar via


Rotinas de retorno de chamada da biblioteca de driver de cartão inteligente

A arquitetura de cartão inteligente define um conjunto de tipos de rotina de retorno de chamada padrão. Para obter detalhes sobre essas rotinas, consulte Retornos de chamada do Driver de Cartão Inteligente.

Um driver de leitor deve disponibilizar essas rotinas de retorno de chamada para a rotina da biblioteca de driver, SmartcardDeviceControl (WDM), para chamar armazenando ponteiros para eles na extensão de dispositivo de cartão inteligente, que é do tipo SMARTCARD_EXTENSION. Esses ponteiros são armazenados em uma matriz localizada no membro ReaderFunction da estrutura SMARTCARD_EXTENSION. Rotinas de retorno de chamada individuais podem ser identificadas por uma série de valores constantes, que devem ser usados como índices na matriz ReaderFunction .

Por exemplo, se você quiser que SmartcardDeviceControl chame uma rotina de retorno de chamada no driver de leitor chamado DriverCardPower sempre que terminar de processar uma solicitação de IOCTL_SMARTCARD_POWER , use a constante RDF_CARD_POWER para inicializar a extensão do dispositivo da seguinte maneira:

SmartcardExtension->ReaderFunction[RDF_CARD_POWER] = 
DriverCardPower;

RDF_CARD_POWER é uma constante fixa definida pelo sistema que sempre corresponde à rotina de retorno de chamada que atende à solicitação de IOCTL_SMARTCARD_POWER.

Se o membro da matriz ReaderFunction que corresponde ao IOCTL que está sendo processado for NULL, SmartcardDeviceControl retornará um status de STATUS_NOT_SUPPORTED para o driver de leitor. Em alguns casos, esse comportamento é útil. Se, por exemplo, o driver não der suporte a cartão ejetar ou cartão engolir, basta atribuir o membro apropriado da matriz ReaderFunction como NULL e SmartcardDeviceControl retornará STATUS_NOT_SUPPORTED sempre que essa rotina de membro for chamada.

A tabela a seguir lista as constantes que identificam os vários tipos de rotinas de retorno de chamada. Essas são as constantes que você deve usar como índices na matriz ReaderFunction . A tabela também fornece uma breve descrição de cada tipo de rotina e indica se é obrigatório ou opcional para um driver de leitor implementar a rotina.

Índice Descrição da rotina de retorno de chamada correspondente Implementação pelo driver de leitor

RDF_CARD_POWER

Redefine ou desativa uma cartão inteligente inserida

Obrigatório

RDF_CARD_EJECT

Ejeta uma cartão inteligente inserida

Opcional

RDF_CARD_TRACKING

Instala um manipulador de eventos para acompanhar cartão inserções e remoções

Obrigatório

RDF_IOCTL_VENDOR

Executa operações IOCTL específicas do fornecedor

Opcional

RDF_READER_SWALLOW

Faz uma andorinha mecânica

Opcional

RDF_SET_PROTOCOL

Seleciona um protocolo de transmissão para o cartão que está no leitor de cartão

Obrigatório

RDF_TRANSMIT

Executa transmissões de dados

Obrigatório

Quando o driver de leitor chama essas rotinas, ele deve recuperar os parâmetros de chamada dos buffers de entrada, conforme descrito em Retornos de chamada do Driver de Cartão Inteligente. O driver de leitor também deve armazenar os dados de saída nas áreas de buffer apropriadas, conforme descrito na mesma seção.

Quando qualquer rotina de retorno de chamada diferente da rotina de retorno de chamada de acompanhamento de cartão retorna STATUS_PENDING, a biblioteca de cartão inteligente para de atender a mais chamadas do driver de leitor. (Para obter informações sobre a rotina de retorno de chamada de acompanhamento de cartão, consulte RDF_CARD_TRACKING.) Se o driver de leitor tentar usar uma rotina de biblioteca de driver enquanto a biblioteca estiver nesse estado, a rotina da biblioteca retornará uma status de STATUS_DEVICE_BUSY. Isso impede efetivamente que o driver de leitor atendo solicitações IOCTL do gerenciador de recursos, pois o driver de leitor não pode processar solicitações IOCTL se não puder chamar SmartcardDeviceControl.