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 バージョンを自動的に選択するエイリアスとして SCardListCards を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winscard.h |
Library | Winscard.lib |
[DLL] | Winscard.dll |