Freigeben über


SCardTransmit-Funktion (winscard.h)

Die Funktion SCardTransmit sendet eine Serviceanfrage an die Smartcard und erwartet, dass Daten von der 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
);

Die Parameter

[in] hCard

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

[in] pioSendPci

Ein Zeiger auf die Protokollheaderstruktur für die Anweisung. Dieser Puffer befindet sich im 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 Smartcard-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 auf die 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 die Karte gesendeten Daten sollten sofort dem Sendepuffer folgen. Wenn keine Daten an die Karte gesendet werden und keine Daten im Gegenzug erwartet werden, wird bP3 nicht gesendet.

Mitglied Bedeutung
bCla
Die T=0-Anweisungsklasse.
Behälter
Ein Anweisungscode in der T=0-Anweisungsklasse.
bP1, bP2
Referenzcodes, die den Anweisungscode abschließen.
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.

Bei T=0 muss diese Länge im Speziellen fall, in dem keine Daten an die Karte gesendet werden und keine daten zurückgegeben werden, diese Länge muss widerspiegeln, dass das bP3-Mitglied nicht gesendet wird; die Länge sollte sein sizeof(CmdBytes) - sizeof(BYTE).

[in, out, optional] pioRecvPci

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

[out] pbRecvBuffer

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

Für T=0 folgen die Daten sofort den Statusbyte SW1 und SW2. Wenn keine Daten von der Karte zurückgegeben werden, enthält dieser Puffer nur die STATUSbyte SW1 und SW2.

[in, out] pcbRecvLength

Stellt die Länge des PbRecvBuffer-Parameters in Bytes und empfängt die tatsächliche Anzahl der Bytes, die von der Smartcard empfangen wurden.

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 STATUSbytes SW1 und SW2 zu empfangen.

Rückgabewert

Wenn die Funktion erfolgreich eine Serviceanfrage an die Smartcard sendet, wird der Rückgabewert SCARD_S_SUCCESS.

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

Bemerkungen

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

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

Examples

Das folgende Beispiel zeigt das Senden einer Serviceanfrage an die Smartcard.

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

Anforderung Wert
Mindestens unterstützter Client Windows XP [nur Desktop-Apps]
Mindestanforderungen für unterstützte Server Windows Server 2003 [Nur Desktop-Apps]
Zielplattform Fenster
Header winscard.h
Library Winscard.lib
DLL Winscard.dll

Siehe auch

SCARD_IO_REQUEST

SCardConnect