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.

Membro Significato
bCla
Classe di istruzioni T=0.
Bidoni
Codice di istruzione nella classe di istruzioni T=0.
bP1, bP2
Codici di riferimento che completano il codice di istruzione.
bP3
Numero di byte di dati da trasmettere durante il comando, per ISO 7816-4, Sezione 8.2.1.

[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

Vedi anche

SCARD_IO_REQUEST

SCardConnect