SCardStatusA 関数 (winscard.h)
SCardStatus 関数は、リーダー内のスマート カードの現在の状態を提供します。 SCardConnect を正常に呼び出した後、SCardDisconnect を正常に呼び出す前にいつでも呼び出すことができます。 リーダーまたはリーダー ドライバーの状態には影響しません。
構文
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
リーダー内のスマート カードの現在の状態。 成功すると、次のいずれかの状態インジケーターを受け取ります。
値 | 意味 |
---|---|
|
リーダーにカードはありません。 |
|
リーダーにはカードがありますが、使用する位置に移動されていません。 |
|
リーダーには、使用する位置にカードがあります。 カードに電源が入っていない。 |
|
カードに電源が供給されていますが、リーダー ドライバーはカードのモードを認識されません。 |
|
カードがリセットされ、PTS ネゴシエーションを待機しています。 |
|
カードがリセットされ、特定の通信プロトコルが確立されました。 |
[out, optional] pdwProtocol
現在のプロトコル (存在する場合)。 戻り値は、 pdwState の戻り値がSCARD_SPECIFICMODE場合にのみ意味があります。
値 | 意味 |
---|---|
|
Raw Transfer プロトコルが使用されています。 |
|
ISO 7816/3 T=0 プロトコルが使用されています。 |
|
ISO 7816/3 T=1 プロトコルが使用されています。 |
[out] pbAtr
現在挿入されているカードから ATR 文字列を受け取る 32 バイトのバッファーへのポインター (使用可能な場合)。
[in, out, optional] pcbAtrLen
入力時に、 pbAtr バッファーの長さを指定します。 出力時に、ATR 文字列のバイト数を受け取ります (最大 32 バイト)。 このバッファー長を SCARD_AUTOALLOCATE として指定すると、 pbAtr はバイト ポインターへのポインターに変換され、複数文字列構造を含むメモリ ブロックのアドレスを受け取ります。
戻り値
関数がリーダー内のスマート カードの現在の状態を正常に提供した場合、戻り値はSCARD_S_SUCCESS。
関数が失敗した場合はエラー コードを返します。 詳細については、「 スマート カードの戻り値」を参照してください。
注釈
SCardStatus 関数は、スマート カードおよびリーダー アクセス関数です。 その他のアクセス機能の詳細については、「 スマート カードとリーダー アクセス関数」を参照してください。
例
次の例は、スマート カードの状態を確認する方法を示しています。
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 を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winscard.h |
Library | Winscard.lib |
[DLL] | Winscard.dll |