Partilhar via


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

  1. 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.

  2. Inicializar o pool de threads.

  3. Determinar o nome do leitor.

    • IOCTL_SMARTCARD_GET_ATTRIBUTE em SCARD_ATTR_VENDOR_NAME, SCARD_ATTR_VENDOR_IFD_TYPE e SCARD_ATTR_DEVICE_UNIT
  4. Determinar as características do leitor.

    • IOCTL_SMARTCARD_GET_ATTRIBUTE em SCARD_ATTR_CHARACTERISTICS
  5. 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

  1. Início do loop.

  2. 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

  3. IOCTL_SMARTCARD_SET_PROTOCOL

Sequência de desconexão

  1. O tempo limite de desligamento é iniciado.

  2. Início do loop.

  3. 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