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 de SCARD_IO_REQUEST seguida pelos dados a serem transmitidos para o cartão inteligente inserido.

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 de 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 de 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 está 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 A operação atingiu o tempo limite.
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.

Observações

IOCTL_SMARTCARD_TRANSMIT transmite dados do cliente para o cartão inteligente detectado 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 sem contato NFC). 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

Consulte também

Guia de design da NFC (comunicação de campo próximo)

guia de design de cartão inteligente