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.
[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 |