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
Raw Transfer プロトコルが使用されています。
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 を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー winscard.h
Library Winscard.lib
[DLL] Winscard.dll

こちらもご覧ください

SCardConnect

SCardDisconnect