Função SCardTransmit (winscard.h)
A função SCardTransmit envia uma solicitação de serviço para a cartão inteligente e espera receber dados de volta do cartão.
Sintaxe
LONG SCardTransmit(
[in] SCARDHANDLE hCard,
[in] LPCSCARD_IO_REQUEST pioSendPci,
[in] LPCBYTE pbSendBuffer,
[in] DWORD cbSendLength,
[in, out, optional] LPSCARD_IO_REQUEST pioRecvPci,
[out] LPBYTE pbRecvBuffer,
[in, out] LPDWORD pcbRecvLength
);
Parâmetros
[in] hCard
Um valor de referência retornado da função SCardConnect .
[in] pioSendPci
Um ponteiro para a estrutura do cabeçalho do protocolo para a instrução. Esse buffer está no formato de uma estrutura de SCARD_IO_REQUEST , seguido pelas PCI (informações de controle de protocolo) específicas.
Para os protocolos T=0, T=1 e Raw, a estrutura PCI é constante. O subsistema smart cartão fornece uma estrutura T=0, T=1 ou PCI bruta global, que você pode referenciar usando os símbolos SCARD_PCI_T0, SCARD_PCI_T1 e SCARD_PCI_RAW respectivamente.
[in] pbSendBuffer
Um ponteiro para os dados reais a serem gravados no cartão.
Para T=0, os parâmetros de dados são colocados no endereço apontado por pbSendBuffer de acordo com a seguinte estrutura:
struct {
BYTE
bCla, // the instruction class
bIns, // the instruction code
bP1, // parameter to the instruction
bP2, // parameter to the instruction
bP3; // size of I/O transfer
} CmdBytes;
Os dados enviados para o cartão devem seguir imediatamente o buffer de envio. No caso especial em que nenhum dado é enviado para o cartão e nenhum dado é esperado em troca, bP3 não é enviado.
[in] cbSendLength
O comprimento, em bytes, do parâmetro pbSendBuffer .
Para T=0, no caso especial em que nenhum dado é enviado para o cartão e nenhum dado esperado em troca, esse comprimento deve refletir que o membro bP3 não está sendo enviado; o comprimento deve ser sizeof(CmdBytes) - sizeof(BYTE)
.
[in, out, optional] pioRecvPci
Ponteiro para a estrutura do cabeçalho do protocolo para a instrução, seguido por um buffer no qual receber qualquer PCI (informações de controle de protocolo) retornadas específicas para o protocolo em uso. Esse parâmetro poderá ser NULL se nenhuma PCI for retornada.
[out] pbRecvBuffer
Ponteiro para todos os dados retornados do cartão.
Para T=0, os dados são imediatamente seguidos pelos bytes de status SW1 e SW2. Se nenhum dado for retornado do cartão, esse buffer conterá apenas os bytes de status SW1 e SW2.
[in, out] pcbRecvLength
Fornece o comprimento, em bytes, do parâmetro pbRecvBuffer e recebe o número real de bytes recebidos da cartão inteligente.
Esse valor não pode ser SCARD_AUTOALLOCATE porque sCardTransmit não dá suporte a SCARD_AUTOALLOCATE.
Para T=0, o buffer de recebimento deve ter pelo menos dois bytes de comprimento para receber os bytes de status SW1 e SW2.
Valor retornado
Se a função enviar com êxito uma solicitação de serviço para a cartão inteligente, o valor retornado será SCARD_S_SUCCESS.
Se a função falhar, será exibido um código de erro. Para obter mais informações, consulte Valores retornados do cartão inteligente.
Comentários
A função SCardTransmit é uma função de acesso inteligente cartão e leitor. Para obter informações sobre outras funções de acesso, consulte Funções de acesso de cartão inteligente e leitor.
Para o protocolo T=0, os dados recebidos de volta são os códigos sw1 e SW2 status, possivelmente precedidos por dados de resposta. Os parágrafos a seguir fornecem informações sobre os buffers de envio e recebimento usados para transferir dados e emitir um comando.
Exemplos
O exemplo a seguir mostra o envio de uma solicitação de serviço para o cartão inteligente.
// Transmit the request.
// lReturn is of type LONG.
// hCardHandle was set by a previous call to SCardConnect.
// pbSend points to the buffer of bytes to send.
// dwSend is the DWORD value for the number of bytes to send.
// pbRecv points to the buffer for returned bytes.
// dwRecv is the DWORD value for the number of returned bytes.
lReturn = SCardTransmit(hCardHandle,
SCARD_PCI_T0,
pbSend,
dwSend,
NULL,
pbRecv,
&dwRecv );
if ( SCARD_S_SUCCESS != lReturn )
{
printf("Failed SCardTransmit\n");
exit(1); // or other appropriate error action
}
Requisitos
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winscard.h |
Biblioteca | Winscard.lib |
DLL | Winscard.dll |