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 関数を使用して割り当てを解除します。

戻り値

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

リターン コード 説明
Success
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