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
[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;
手記
winscard.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SCardListReadersWithDeviceInstanceId を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2012 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winscard.h |