SCardListReadersWithDeviceInstanceIdA 関数 (winscard.h)
SCardListReadersWithDeviceInstanceId 関数は、デバイス インスタンス識別子を指定したリーダーの一覧を取得します。 この関数は、リーダーの状態には影響しません。
構文
LONG SCardListReadersWithDeviceInstanceIdA(
[in] SCARDCONTEXT hContext,
[in] LPCSTR szDeviceInstanceId,
[out, optional] LPSTR mszReaders,
[in, out] LPDWORD pcchReaders
);
パラメーター
[in] hContext
クエリのリソース マネージャー コンテキストを識別するハンドル。 リソース マネージャー コンテキストは、 SCardEstablishContext 関数の前の呼び出しによって設定できます。 このパラメーターを NULL にすることはできません。
[in] szDeviceInstanceId
リーダーのデバイス インスタンス ID。 この値を取得するには、リーダー名で SCardGetReaderDeviceInstanceId 関数を呼び出すか、DDK から SetupDiGetDeviceInstanceId 関数を呼び出します。
[out, optional] mszReaders
指定されたデバイス インスタンス識別子内のスマート カード リーダーを含む複数文字列。 この値が NULL の場合、関数は pcchReaders パラメーターで指定されたバッファー長を無視し、このパラメーターが null でない場合に返されるバッファーの長さを pcchReaders に書き込み、成功コードを返します。
[in, out] pcchReaders
mszReaders バッファーの長さ (文字数)。 このパラメーターは、終端のすべての null 文字を含む、複数文字列構造の実際の長さを受け取ります。 バッファー長が SCARD_AUTOALLOCATE として指定されている場合、 mszReaders はバイト ポインターへのポインターに変換され、複数文字列構造を含むメモリ ブロックのアドレスを受け取ります。 このメモリの使用が完了したら、 SCardFreeMemory 関数を使用して割り当てを解除します。
戻り値
この関数は、成功するか失敗するかによって異なる値を返します。
リターン コード | 説明 |
---|---|
|
SCARD_S_SUCCESS。 |
|
エラー コード。 詳細については、「 スマート カードの戻り値」を参照してください。 |
解説
この関数はリダイレクトされません。 リモート デスクトップ セッション内でエラー コードがSCARD_E_READER_UNAVAILABLEで失敗した場合に SCardListReadersWithDeviceInstanceId 関数を呼び出します。
例
szDeviceInstanceIdcchReaderNameLONG lReturn, lReturn2;
LPTSTR pmszReaders = NULL;
LPTSTR pReader = NULL;WCHAR
DWORD cchReaderName = SCARD_AUTOALLOCATE;
// Retrieve the reader’s name from it’s device instance ID
// hContext was set by a previous call to SCardEstablishContext.
// szDeviceInstanceId was obtained by calling SetupDiGetDeviceInstanceId
lReturn = SCardListReadersWithDeviceInstanceId (hContext,
szDeviceInstanceId,
(LPTSTR)&pmszReaders,
&cchReaderName);
switch( lReturn )
{
case SCARD_E_NO_READERS_AVAILABLE:
printf("No readers have the provided device instance ID.\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( hContext,
pmszReaders );
if ( SCARD_S_SUCCESS != lReturn2 )
printf("Failed SCardFreeMemory\n");
break;
default:
printf("Failed SCardListReaders\n");
// Take appropriate action.
// ...
break;
Note
winscard.h ヘッダーは、SCardListReadersWithDeviceInstanceId をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winscard.h |