Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
[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 |