SCardTransmit 関数 (winscard.h)
SCardTransmit 関数は、スマート カードにサービス要求を送信し、カードからデータを受信することを想定しています。
構文
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
);
パラメーター
[in] hCard
SCardConnect 関数から返される参照値。
[in] pioSendPci
命令のプロトコル ヘッダー構造体へのポインター。 このバッファーは、 SCARD_IO_REQUEST 構造体の形式で、その後に特定のプロトコル制御情報 (PCI) が続きます。
T=0、T=1、および Raw プロトコルの場合、PCI 構造体は定数です。 スマート カード サブシステムは、グローバル T=0、T=1、または Raw PCI 構造体を提供します。この構造体は、それぞれシンボル SCARD_PCI_T0、SCARD_PCI_T1、SCARD_PCI_RAWを使用して参照できます。
[in] pbSendBuffer
カードに書き込まれる実際のデータへのポインター。
T=0 の場合、データ パラメーターは、次の構造に従って pbSendBuffer が指すアドレスに配置されます。
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;
カードに送信されるデータは、送信バッファーの直後に行う必要があります。 カードにデータが送信されず、戻り値としてデータが予期されない特殊なケースでは、bP3 は送信されません。
メンバー | 説明 |
---|---|
|
T=0 命令クラス。 |
|
T=0 命令クラスの命令コード。 |
|
命令コードを完了する参照コード。 |
|
ISO 7816-4、セクション 8.2.1 に従って、コマンド中に送信されるデータ バイト数。 |
[in] cbSendLength
pbSendBuffer パラメーターの長さ (バイト単位)。
T=0 の場合、データがカードに送信されず、返されるデータがない特殊なケースでは、この長さは bP3 メンバーが送信されていないことを反映している必要があります。長さは にするsizeof(CmdBytes) - sizeof(BYTE)
必要があります。
[in, out, optional] pioRecvPci
命令のプロトコル ヘッダー構造体へのポインター。その後に、使用中のプロトコルに固有の返されたプロトコル制御情報 (PCI) を受け取るバッファーが続きます。 PCI が返されない場合、このパラメーターは NULL にすることができます。
[out] pbRecvBuffer
カードから返されたデータへのポインター。
T=0 の場合、データの直後に SW1 および SW2 状態バイトが続きます。 カードからデータが返されない場合、このバッファーには SW1 および SW2 状態バイトのみが含まれます。
[in, out] pcbRecvLength
pbRecvBuffer パラメーターの長さをバイト単位で指定し、スマート カードから受信した実際のバイト数を受け取ります。
SCardTransmit はSCARD_AUTOALLOCATEをサポートしていないため、この値をSCARD_AUTOALLOCATEできません。
T=0 の場合、SW1 および SW2 状態バイトを受信するには、受信バッファーの長さが 2 バイト以上である必要があります。
戻り値
関数がスマート カードにサービス要求を正常に送信した場合、戻り値はSCARD_S_SUCCESS。
関数が失敗した場合はエラー コードを返します。 詳細については、「 スマート カードの戻り値」を参照してください。
解説
SCardTransmit 関数は、スマート カードおよびリーダー アクセス関数です。 その他のアクセス機能については、「 スマート カードおよびリーダー アクセス関数」を参照してください。
T=0 プロトコルの場合、受信したデータは SW1 と SW2 の状態コードで、応答データが前にある可能性があります。 次の段落では、データの転送とコマンドの発行に使用される送受信バッファーに関する情報を提供します。
例
次の例は、スマート カードへのサービス要求の送信を示しています。
// 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
}
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winscard.h |
Library | Winscard.lib |
[DLL] | Winscard.dll |