次の方法で共有


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

リーダーのスマート カードの現在の 状態。 成功すると、次のいずれかの状態インジケーターを受け取ります。

価値 意味
SCARD_ABSENT
リーダーにカードがありません。
SCARD_PRESENT
リーダーにカードがありますが、使用する位置に移動されていません。
SCARD_SWALLOWED
リーダーの位置に使用するカードがあります。 カードの電源が入っていません。
SCARD_POWERED
カードに電源が供給されていますが、リーダー ドライバーはカードのモードを認識できません。
SCARD_NEGOTIABLE
カードがリセットされ、PTS ネゴシエーションを待機しています。
SCARD_SPECIFIC
カードがリセットされ、通信プロトコル 特定の が確立されました。

[out, optional] pdwProtocol

現在のプロトコル (存在する場合)。 戻り値は、pdwState の戻り値 SCARD_SPECIFICMODE場合にのみ意味があります。

価値 意味
SCARD_PROTOCOL_RAW
生転送プロトコルが使用されています。
SCARD_PROTOCOL_T0
ISO 7816/3 T=0 プロトコルが使用されています。
SCARD_PROTOCOL_T1
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 を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winscard.h
ライブラリ Winscard.lib
DLL Winscard.dll

関連項目

SCardConnect

SCardDisconnect