次の方法で共有


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;


手記

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

必要条件

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