Funzione SCardTransmit (winscard.h)
La funzione SCardTransmit invia una richiesta di servizio alla smart card e prevede di ricevere i dati dalla scheda.
Sintassi
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
);
Parametri
[in] hCard
Valore di riferimento restituito dalla funzione SCardConnect .
[in] pioSendPci
Puntatore alla struttura di intestazione del protocollo per l'istruzione. Questo buffer è nel formato di una struttura SCARD_IO_REQUEST , seguita da informazioni di controllo del protocollo specifiche (PCI).
Per i protocolli T=0, T=1 e Raw, la struttura PCI è costante. Il sottosistema smart card fornisce una struttura T=0, T=1 o PCI non elaborata, a cui è possibile fare riferimento usando i simboli SCARD_PCI_T0, SCARD_PCI_T1 e SCARD_PCI_RAW rispettivamente.
[in] pbSendBuffer
Puntatore ai dati effettivi da scrivere nella scheda.
Per T=0, i parametri di dati vengono inseriti nell'indirizzo a cui punta pbSendBuffer in base alla struttura seguente:
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;
I dati inviati alla scheda devono seguire immediatamente il buffer di invio. Nel caso speciale in cui non vengono inviati dati alla scheda e non è previsto alcun dato in cambio, bP3 non viene inviato.
[in] cbSendLength
Lunghezza, in byte, del parametro pbSendBuffer .
Per T=0, nel caso speciale in cui non vengono inviati dati alla scheda e nessun dato previsto in cambio, questa lunghezza deve riflettere che il membro bP3 non viene inviato; la lunghezza deve essere sizeof(CmdBytes) - sizeof(BYTE)
.
[in, out, optional] pioRecvPci
Puntatore alla struttura di intestazione del protocollo per l'istruzione, seguita da un buffer in cui ricevere le informazioni di controllo del protocollo restituite (PCI) specifiche del protocollo in uso. Questo parametro può essere NULL se non viene restituito alcun pci.
[out] pbRecvBuffer
Puntatore a tutti i dati restituiti dalla scheda.
Per T=0, i dati vengono immediatamente seguiti dai byte di stato SW1 e SW2. Se non vengono restituiti dati dalla scheda, questo buffer conterrà solo i byte di stato SW1 e SW2.
[in, out] pcbRecvLength
Fornisce la lunghezza, in byte, del parametro pbRecvBuffer e riceve il numero effettivo di byte ricevuti dalla smart card.
Questo valore non può essere SCARD_AUTOALLOCATE perché SCardTransmit non supporta SCARD_AUTOALLOCATE.
Per T=0, il buffer di ricezione deve essere lungo almeno due byte per ricevere i byte di stato SW1 e SW2.
Valore restituito
Se la funzione invia correttamente una richiesta di servizio alla smart card, il valore restituito viene SCARD_S_SUCCESS.
Se la funzione non viene completata, restituisce un codice di errore. Per altre informazioni, vedere Valori restituiti della smart card.
Commenti
La funzione SCardTransmit è una funzione di accesso tramite smart card e lettore . Per informazioni su altre funzioni di accesso, vedere Funzioni di accesso tramite smart card e lettore.
Per il protocollo T=0, i dati ricevuti di nuovo sono i codici di stato SW1 e SW2, possibilmente preceduti dai dati di risposta. I paragrafi seguenti forniscono informazioni sui buffer di invio e ricezione usati per trasferire i dati ed eseguire un comando.
Esempio
Nell'esempio seguente viene illustrato l'invio di una richiesta di servizio alla smart card.
// 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
}
Requisiti
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winscard.h |
Libreria | Winscard.lib |
DLL | Winscard.dll |