Freigeben über


SCardTransmit-Funktion (winscard.h)

Die SCardTransmit-Funktion sendet eine Dienstanforderung an den smarten Karte und erwartet, dass daten vom Karte zurück empfangen werden.

Syntax

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
);

Parameter

[in] hCard

Ein Verweiswert, der von der SCardConnect-Funktion zurückgegeben wird.

[in] pioSendPci

Ein Zeiger auf die Protokollheaderstruktur für die Anweisung. Dieser Puffer hat das Format einer SCARD_IO_REQUEST-Struktur , gefolgt von den spezifischen Protokollsteuerungsinformationen (PCI).

Für die Protokolle T=0, T=1 und Raw ist die PCI-Struktur konstant. Das Smart Karte-Subsystem stellt eine globale T=0-, T=1- oder Raw-PCI-Struktur bereit, auf die Sie mithilfe der Symbole SCARD_PCI_T0, SCARD_PCI_T1 und SCARD_PCI_RAW verweisen können.

[in] pbSendBuffer

Ein Zeiger auf die tatsächlichen Daten, die in den Karte geschrieben werden sollen.

Für T=0 werden die Datenparameter gemäß der folgenden Struktur in die Adresse eingefügt, auf die pbSendBuffer verweist:

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;

Die an den Karte gesendeten Daten sollten sofort dem Sendepuffer folgen. In dem Sonderfall, in dem keine Daten an die Karte gesendet werden und im Gegenzug keine Daten erwartet werden, wird bP3 nicht gesendet.

Mitglied Bedeutung
bCla
Die T=0-Anweisungsklasse.
Bins
Ein Anweisungscode in der T=0-Anweisungsklasse.
bP1, bP2
Referenzcodes, die den Anweisungscode vervollständigen.
bP3
Die Anzahl der Während des Befehls zu übertragenden Datenbytes gemäß ISO 7816-4, Abschnitt 8.2.1.

[in] cbSendLength

Die Länge des pbSendBuffer-Parameters in Bytes.

Für T=0 muss diese Länge im Sonderfall, in dem keine Daten an die Karte gesendet werden und keine Daten im Gegenzug erwartet werden, widerspiegeln, dass der bP3-Member nicht gesendet wird. Die Länge sollte lautensizeof(CmdBytes) - sizeof(BYTE).

[in, out, optional] pioRecvPci

Zeiger auf die Protokollheaderstruktur für die Anweisung, gefolgt von einem Puffer, in dem alle zurückgegebenen Protokollsteuerungsinformationen (PCI) spezifisch für das verwendete Protokoll empfangen werden sollen. Dieser Parameter kann NULL sein, wenn kein PCI zurückgegeben wird.

[out] pbRecvBuffer

Zeiger auf alle Daten, die vom Karte zurückgegeben werden.

Für T=0 folgen die Daten unmittelbar auf die status Bytes SW1 und SW2. Wenn keine Daten vom Karte zurückgegeben werden, enthält dieser Puffer nur die status Bytes SW1 und SW2.

[in, out] pcbRecvLength

Gibt die Länge des pbRecvBuffer-Parameters in Bytes an und empfängt die tatsächliche Anzahl von Bytes, die vom smarten Karte empfangen werden.

Dieser Wert kann nicht SCARD_AUTOALLOCATE werden, da SCardTransmit SCARD_AUTOALLOCATE nicht unterstützt.

Für T=0 muss der Empfangspuffer mindestens zwei Bytes lang sein, um die SW1- und SW2-status Bytes zu empfangen.

Rückgabewert

Wenn die Funktion erfolgreich eine Dienstanforderung an die smarte Karte sendet, wird der Rückgabewert SCARD_S_SUCCESS.

Wenn die Ausführung der Funktion fehlschlägt, wird ein Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Smartcard-Rückgabewerte.

Hinweise

Die SCardTransmit-Funktion ist eine intelligente Karte- und Lesezugriffsfunktion. Weitere Informationen zu anderen Zugriffsfunktionen finden Sie unter Smartcard- und Lesezugriffsfunktionen.

Für das T=0-Protokoll sind die zurückerhaltenen Daten die Status codes SW1 und SW2, denen möglicherweise Antwortdaten vorangestellt sind. Die folgenden Absätze enthalten Informationen zu den Sende- und Empfangspuffern, die zum Übertragen von Daten und zum Ausgeben eines Befehls verwendet werden.

Beispiele

Das folgende Beispiel zeigt das Senden einer Dienstanforderung an die smarte Karte.

//  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
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winscard.h
Bibliothek Winscard.lib
DLL Winscard.dll

Weitere Informationen

SCARD_IO_REQUEST

SCardConnect