SCardListReadersWithDeviceInstanceIdA 함수(winscard.h)

SCardListReadersWithDeviceInstanceId 함수는 디바이스 instance 식별자를 제공한 판독기 목록을 가져옵니다. 이 함수는 판독기의 상태에 영향을 주지 않습니다.

구문

LONG SCardListReadersWithDeviceInstanceIdA(
  [in]            SCARDCONTEXT hContext,
  [in]            LPCSTR       szDeviceInstanceId,
  [out, optional] LPSTR        mszReaders,
  [in, out]       LPDWORD      pcchReaders
);

매개 변수

[in] hContext

쿼리에 대한 리소스 관리자 컨텍스트를 식별하는 핸들입니다. SCardEstablishContext 함수에 대한 이전 호출을 통해 리소스 관리자 컨텍스트를 설정할 수 있습니다. 이 매개 변수는 NULL일 수 없습니다.

[in] szDeviceInstanceId

판독기의 디바이스 instance ID입니다. 판독기 이름으로 SCardGetReaderDeviceInstanceId 함수를 호출하거나 DDK에서 SetupDiGetDeviceInstanceId 함수를 호출하여 이 값을 가져올 수 있습니다.

[out, optional] mszReaders

제공된 디바이스 instance 식별자 내에서 스마트 카드 판독기를 포함하는 다중 문자열입니다. 이 값이 NULL이면 함수는 pcchReaders 매개 변수에 제공된 버퍼 길이를 무시하고, 이 매개 변수가 pcchReadersNULL이 아닌 경우 반환되었을 버퍼의 길이를 쓰고, 성공 코드를 반환합니다.

[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;


참고

winscard.h 헤더는 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 SCardListReadersWithDeviceInstanceId를 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winscard.h