SCardStatusA 関数 (winscard.h)
SCardStatus 関数は、リーダーの スマート カード の現在の状態を提供します。 SCardConnect を正常に呼び出
構文
LONG SCardStatusA(
[in] SCARDHANDLE hCard,
[out] LPSTR mszReaderNames,
[in, out, optional] LPDWORD pcchReaderLen,
[out, optional] LPDWORD pdwState,
[out, optional] LPDWORD pdwProtocol,
[out] LPBYTE pbAtr,
[in, out, optional] LPDWORD pcbAtrLen
);
パラメーター
[in] hCard
SCardConnectから返される参照値。
[out] mszReaderNames
現在接続されているリーダーが認識されている表示名 (複数の文字列) の一覧。
[in, out, optional] pcchReaderLen
入力時に、szReaderName バッファーの長さを指定します。
出力時に、リーダー名リストの実際の長さ (文字数) を受け取ります(末尾の NULL 文字を含む)。 このバッファー長が SCARD_AUTOALLOCATE として指定されている場合、szReaderName はバイト ポインターへのポインターに変換され、複数文字列構造を含むメモリ ブロックのアドレスを受け取ります。
[out, optional] pdwState
リーダーのスマート カードの現在の 状態。 成功すると、次のいずれかの状態インジケーターを受け取ります。
[out, optional] pdwProtocol
現在のプロトコル (存在する場合)。 戻り値は、pdwState の戻り値
価値 | 意味 |
---|---|
|
生転送プロトコルが使用されています。 |
|
ISO 7816/3 T=0 プロトコルが使用されています。 |
|
ISO 7816/3 T=1 プロトコルが使用されています。 |
[out] pbAtr
現在挿入されているカードから
[in, out, optional] pcbAtrLen
入力時に、pbAtr バッファーの長さを指定します。 出力時に、ATR 文字列のバイト数 (最大 32 バイト) を受け取ります。 このバッファー長が SCARD_AUTOALLOCATE として指定されている場合、pbAtr はバイト ポインターへのポインターに変換され、複数文字列構造を含むメモリ ブロックのアドレスを受け取ります。
戻り値
関数が リーダーで スマート カード の現在の状態を正常に提供した場合、戻り値はSCARD_S_SUCCESS。
関数が失敗すると、エラー コードが返されます。 詳細については、「スマート カードの戻り値 を参照してください。
備考
例
次の例は、スマート カードの状態を確認する方法を示しています。
WCHAR szReader[200];
DWORD cch = 200;
BYTE bAttr[32];
DWORD cByte = 32;
DWORD dwState, dwProtocol;
LONG lReturn;
// Determine the status.
// hCardHandle was set by an earlier call to SCardConnect.
lReturn = SCardStatus(hCardHandle,
szReader,
&cch,
&dwState,
&dwProtocol,
(LPBYTE)&bAttr,
&cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
printf("Failed SCardStatus\n");
exit(1); // or other appropriate action
}
// Examine retrieved status elements.
// Look at the reader name and card state.
printf("%S\n", szReader );
switch ( dwState )
{
case SCARD_ABSENT:
printf("Card absent.\n");
break;
case SCARD_PRESENT:
printf("Card present.\n");
break;
case SCARD_SWALLOWED:
printf("Card swallowed.\n");
break;
case SCARD_POWERED:
printf("Card has power.\n");
break;
case SCARD_NEGOTIABLE:
printf("Card reset and waiting PTS negotiation.\n");
break;
case SCARD_SPECIFIC:
printf("Card has specific communication protocols set.\n");
break;
default:
printf("Unknown or unexpected card state.\n");
break;
}
手記
winscard.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SCardStatus を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winscard.h |
ライブラリ | Winscard.lib |
DLL | Winscard.dll |