Compartilhar via


IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)

A solicitação IOCTL_SMARTCARD_TRANSMIT transmite dados e recebe dados do cartão inteligente inserido.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada

  • Irp->AssociatedIrp.SystemBuffer Um ponteiro para uma estrutura SCARD_IO_REQUEST seguida pelos dados a serem transmitidos para a cartão inteligente inserida.

Comprimento do buffer de entrada

  • Parameters.DeviceIoControl.InputBufferLength Contém o tamanho da estrutura mais o comprimento dos bytes de dados à direita (se houver). O membro dwProtocol deve ser definido como o protocolo selecionado anteriormente e o membro cbPciLength deve ser definido como o tamanho da estrutura SCARD_IO_REQUEST em si (geralmente oito bytes). A estrutura é usada para protocolos futuros. Os dados que serão transmitidos para o cartão devem seguir imediatamente essa estrutura.

Buffer de saída

O buffer de bytes contém o resultado da transmissão. O buffer aponta para a estrutura SCARD_IO_REQUEST imediatamente seguida pelos dados recebidos.

  • Irp->AssociatedIrp.SystemBuffer Recebe o resultado da transmissão. Esse buffer também deve começar com uma estrutura SCARD_IO_REQUEST . Todos os dados recebidos do cartão devem ser armazenados imediatamente após a estrutura.

Comprimento do buffer de saída

  • Parameters.DeviceIoControl.OutputBufferLength Contém o comprimento do buffer de saída.

Bloco de status

Irp->IoStatus.Status é definido como um dos valores a seguir.

Valor Significado
STATUS_SUCCESS A transmissão foi bem-sucedida.
STATUS_NO_MEDIA Nenhum cartão inteligente é detectado no leitor.
STATUS_IO_TIMEOUT Tempo limite da operação esgotado.
STATUS_INVALID_DEVICE_STATE O protocolo no arquivo de cabeçalho não corresponde ao protocolo de cartão inteligente que foi selecionado anteriormente.
STATUS_BUFFER_TOO_SMALL O buffer de saída é muito pequeno para os dados de retorno.
STATUS_DEVICE_POWERED_OFF O controle de rádio de proximidade está desativado.

Comentários

IOCTL_SMARTCARD_TRANSMIT transmite dados do cliente para a cartão inteligente detectada na APDU compatível com ISO7816-4. Essas APDUs são interpretadas em relação à especificação pc/SC (a Seção 4.3.7 tem requisitos mais detalhados sobre o suporte para diferentes formatos de marca nfc sem contato). Como o recurso NFP compartilha o mesmo driver com o cartão inteligente, o cartão deve ser conectado logo após a descoberta, nenhuma conexão explícita para o 'Transmit' é necessária.

Como o buffer de entrada e o buffer de saída estão apontando para a mesma área de memória, o driver deve evitar substituir os dados de entrada. Use a biblioteca de driver de cartão inteligente para garantir que os dados de entrada não sejam substituídos.

Requisitos

Requisito Valor
Cabeçalho winsmcrd.h

Confira também

Guia de design de NFC (comunicação a curta distância)

Guia de design de cartão inteligente