Exemplo de sequência
Veja a seguir uma sequência de exemplo de IOCTLs no gerenciador de recursos do Cartão Inteligente:
Sequência de inicialização
Use a API DevObj ou CfgMgr com o GUID da interface do dispositivo de acesso do Cartão Inteligente para descobrir o nome do driver de dispositivo NFC e usá-lo com CreateFile para abrir um identificador de dispositivo.
Inicializar o pool de threads.
Determinar o nome do leitor.
- IOCTL_SMARTCARD_GET_ATTRIBUTE em SCARD_ATTR_VENDOR_NAME, SCARD_ATTR_VENDOR_IFD_TYPE e SCARD_ATTR_DEVICE_UNIT
Determinar as características do leitor.
- IOCTL_SMARTCARD_GET_ATTRIBUTE em SCARD_ATTR_CHARACTERISTICS
Inicie o monitor de estado cartão.
IOCTL_SMARTCARD_IS_PRESENT – aguardar a chegada de um cartão inteligente.
IOCTL_SMARTCARD_IS_ABSENT – para aguardar a partida de cartão inteligente.
A redefinição de energia é irrelevante, pois não oferecemos suporte a SCARD_SWALLOWED, SCARD_POWERED estado.
Sequência de conexão
Início do loop.
IOCTL_SMARTCARD_GET_STATE
Caso SCARD_UNKNOWN e SCARD_ABSENT, não faça nada
Caso SCARD_PRESENT, engole cartão
SCARD_SWALLOWED de caso, redefinição a frio
SCARD_POWERED de maiúsculas e minúsculas, redefinição quente
SCARD_NEGOTIABLE de caso, determine o CARTÃO ATR
SCARD_SPECIFIC de caso, determine o cartão ATR e o protocolo
IOCTL_SMARTCARD_SET_PROTOCOL
Sequência de desconexão
O tempo limite de desligamento é iniciado.
Início do loop.
IOCTL_SMARTCARD_GET_STATE
SCARD_SPECIFIC de caso, SCARD_NEGOTIABLE, SCARD_POWERED, defina a energia para baixo
Caso SCARD_SWALLOWED, SCARD_PRESENT, não faça nada
Caso SCARD_ABSENT, SCARD_UNKNOWN, não faça nada