次の方法で共有


SCardListCardsA 関数 (winscard.h)

SCardListCards 関数は、スマート カード データベース を検索し、ユーザーが以前にシステムに導入した名前付きカードの一覧を提供します。

呼び出し元は、ATR 文字列、インターフェイス識別子 (GUID)、またはその両方を指定します。 ATR 文字列と識別子配列の両方が指定されている場合、返されるカードは指定された ATR 文字列と一致し、指定されたインターフェイスをサポートします。

構文

LONG SCardListCardsA(
  [in]           SCARDCONTEXT hContext,
  [in, optional] LPCBYTE      pbAtr,
  [in]           LPCGUID      rgquidInterfaces,
  [in]           DWORD        cguidInterfaceCount,
  [out]          CHAR         *mszCards,
  [in, out]      LPDWORD      pcchCards
);

パラメーター

[in] hContext

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

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

[in, optional] pbAtr

既知のカードと比較する ATR 文字列のアドレス。ATR 照合を実行しない場合は NULL

[in] rgquidInterfaces

識別子 (GUID) の配列。インターフェイスの一致が実行されない場合は NULL を します。 配列を指定すると、指定したすべての識別子がカードでサポートされている場合にのみ、カード名が返されます。

[in] cguidInterfaceCount

rgguidInterfaces 配列内のエントリの数。 rgguidInterfaces が NULL場合、この値は無視されます。

[out] mszCards

見つかった スマート カードを一覧表示する複数文字列。 この値が NULL場合、SCardListCards は、pcchCardsで指定されたバッファー長を無視し、このパラメーターが pcchCards と成功コードを するために NULL されなかった場合に返されたバッファーの長さを返します。

[in, out] pcchCards

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

戻り値

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

リターン コード 形容
成功 の
SCARD_S_SUCCESS。
エラーの
エラー コード。 詳細については、「スマート カードの戻り値 を参照してください。

備考

この関数はリダイレクトされませんが、リモート デスクトップ セッション内で関数を呼び出してもエラーは発生しません。 これは、結果がローカル コンピューターではなくリモート コンピューターからの結果であることを意味するだけです。

サブシステムに導入されたすべてのスマート カードを返すには、pbAtr 設定し、rgguidInterfaces を nullします。

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

この関数の呼び出しは、トランザクションの外部で行う必要があります。 アプリケーションは、SCardBeginTransaction 関数を使用してトランザクションを開始した後、この関数を呼び出すと、SCardBeginTransaction 関数の hCard パラメーター (型 SCARDHANDLE) をリセットします。

Windows Server 2008 R2 および Windows 7: トランザクション内でこの関数を呼び出すと、コンピューターが応答しなくなる可能性があります。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: 適用されません。

次の例は、スマート カードの一覧を示しています。

LPTSTR pmszCards = NULL;
LPTSTR pCard;
LONG lReturn;
DWORD cch = SCARD_AUTOALLOCATE;

// Retrieve the list of cards.
lReturn = SCardListCards(NULL,
                         NULL,
                         NULL,
                         NULL,
                         (LPTSTR)&pmszCards,
                         &cch );
if ( SCARD_S_SUCCESS != lReturn )
{
    printf("Failed SCardListCards\n");
    exit(1); // Or other appropriate error action
}
// Do something with the multi string of cards.
// Output the values.
// A double-null terminates the list of values.
pCard = pmszCards;
while ( '\0' != *pCard )
{
    // Display the value.
    printf("%S\n", pCard );
    // Advance to the next value.
    pCard = pCard + wcslen(pCard) + 1;
}

// Remember to free pmszCards (by calling SCardFreeMemory).
// ...

手記

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

必要条件

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

関連項目

SCardEstablishContext

SCardFreeMemory

SCardGetProviderId

SCardListInterfaces

SCardListReaderGroups

SCardListReaders