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=0T=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 は送信されません。

メンバー 説明
bCla
T=0 命令クラス。
ビン
T=0 命令クラスの命令コード。
bP1bP2
命令コードを完了する参照コード。
bP3
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

関連項目

SCARD_IO_REQUEST

SCardConnect