次の方法で共有


SCardListReadersA 関数 (winscard.h)

SCardListReaders 関数は、名前付き リーダー グループのセット内で リーダーの一覧を提供し、重複を排除します。

呼び出し元はリーダー グループの一覧を提供し、名前付きグループ内のリーダーの一覧を受け取ります。 認識できないグループ名は無視されます。 この関数は、現在システムにアタッチされ、使用できる名前付きグループ内のリーダーのみを返します。

構文

LONG SCardListReadersA(
  [in]           SCARDCONTEXT hContext,
  [in, optional] LPCSTR       mszGroups,
  [out]          LPSTR        mszReaders,
  [in, out]      LPDWORD      pcchReaders
);

パラメーター

[in] hContext

クエリのリソース マネージャー コンテキスト を識別するハンドル。 リソース マネージャー コンテキストは、SCardEstablishContextする前の呼び出しによって設定できます。

このパラメーターが NULL設定されている場合、リーダーの検索はどのコンテキストにも限定されません。

[in, optional] mszGroups

複数文字列としてシステムに定義されているリーダー グループの名前。 NULL 値を使用して、システム内のすべてのリーダー (つまり、SCard$AllReaders グループ) を一覧表示します。

価値 意味
SCARD_ALL_READERS
TEXT("SCard$AllReaders\000")
閲覧者を一覧表示するときにグループ名が指定されていない場合に使用されるグループ。 リーダーがどのグループに含まれているかに関係なく、すべてのリーダーの一覧を返します。
SCARD_DEFAULT_READERS
TEXT("SCard$DefaultReaders\000")
システムに導入されたときにすべてのリーダーが追加される既定のグループ。
SCARD_LOCAL_READERS
TEXT("SCard$LocalReaders\000")
未使用のレガシ値。 これは、リーダー グループ API を使用して変更できない内部管理グループです。 これは、列挙にのみ使用することを目的としています。
SCARD_SYSTEM_READERS
TEXT("SCard$SystemReaders\000")
未使用のレガシ値。 これは、リーダー グループ API を使用して変更できない内部管理グループです。 これは、列挙にのみ使用することを目的としています。

[out] mszReaders

指定されたリーダー グループ内のカード リーダーを一覧表示する複数文字列。 この値が NULLの場合、SCardListReaders は、pcchReadersで指定されたバッファーの長さを無視し、このパラメーターが pcchReadersを するために NULL されていない場合に返されたバッファーの長さを書き込み、成功コードを返します。

[in, out] pcchReaders

mszReaders バッファーの長さ (文字数)。 このパラメーターは、末尾のすべての null 文字を含む、複数文字列構造体の実際の長さを受け取ります。 バッファー長が SCARD_AUTOALLOCATE として指定されている場合、mszReaders はバイト ポインターへのポインターに変換され、複数文字列構造を含むメモリ ブロックのアドレスを受け取ります。 このメモリ ブロックは、SCardFreeMemoryで割り当てを解除する必要があります。

戻り値

この関数は、成功するか失敗したかに応じて異なる値を返します。

戻りコード/値 形容
成功 の
0 (0x0)
SCARD_S_SUCCESS
グループに閲覧者が含
2148532270 (0x8010002E)
SCARD_E_NO_READERS_AVAILABLE
指定されたリーダーは現在使用できません
2148532247 (0x80100017)
SCARD_E_READER_UNAVAILABLE
その他の
エラー コード。 詳細については、「スマート カードの戻り値 を参照してください。

備考

SCardListReaders 関数は、データベース クエリ関数です。 その他のデータベース クエリ関数の詳細については、「スマート カード データベース クエリ関数の」を参照してください。

次の例は、リーダーの一覧を示しています。

LPTSTR          pmszReaders = NULL;
LPTSTR          pReader;
LONG            lReturn, lReturn2;
DWORD           cch = SCARD_AUTOALLOCATE;

// Retrieve the list the readers.
// hSC was set by a previous call to SCardEstablishContext.
lReturn = SCardListReaders(hSC,
                           NULL,
                           (LPTSTR)&pmszReaders,
                           &cch );
switch( lReturn )
{
    case SCARD_E_NO_READERS_AVAILABLE:
        printf("Reader is not in groups.\n");
        // Take appropriate action.
        // ...
        break;

    case SCARD_S_SUCCESS:
        // Do something with the multi string of readers.
        // Output the values.
        // A double-null terminates the list of values.
        pReader = pmszReaders;
        while ( '\0' != *pReader )
        {
            // Display the value.
            printf("Reader: %S\n", pReader );
            // Advance to the next value.
            pReader = pReader + wcslen((wchar_t *)pReader) + 1;
        }
        // Free the memory.
        lReturn2 = SCardFreeMemory( hSC,
                                   pmszReaders );
        if ( SCARD_S_SUCCESS != lReturn2 )
            printf("Failed SCardFreeMemory\n");
        break;

default:
        printf("Failed SCardListReaders\n");
        // Take appropriate action.
        // ...
        break;
}

手記

winscard.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SCardListReaders を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

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

関連項目

SCardEstablishContext

SCardFreeMemory

SCardGetProviderId

SCardListCards

SCardListInterfaces

SCardListReaderGroups