Share via


SCardListReadersW 함수(winscard.h)

SCardListReaders 함수는 명명된 판독기 그룹 집합 내에서 판독기 목록을 제공하여 중복을 제거합니다.

호출자는 판독기 그룹 목록을 제공하고 명명된 그룹 내의 판독기 목록을 받습니다. 인식할 수 없는 그룹 이름은 무시됩니다. 이 함수는 현재 시스템에 연결되어 있고 사용할 수 있는 명명된 그룹 내에서만 판독기를 반환합니다.

구문

LONG SCardListReadersW(
  [in]           SCARDCONTEXT hContext,
  [in, optional] LPCWSTR      mszGroups,
  [out]          LPWSTR       mszReaders,
  [in, out]      LPDWORD      pcchReaders
);

매개 변수

[in] hContext

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

이 매개 변수가 NULL로 설정된 경우 판독기 검색은 컨텍스트로 제한되지 않습니다.

[in, optional] mszGroups

시스템에 정의된 판독기 그룹의 이름(다중 문자열)입니다. NULL 값을 사용하여 시스템의 모든 판독기(즉, SCard$AllReaders 그룹)를 나열합니다.

의미
SCARD_ALL_READERS
TEXT("SCard$AllReaders\000")
읽기 프로그램을 나열할 때 그룹 이름이 제공되지 않을 때 사용되는 그룹입니다. 판독기의 그룹 또는 그룹에 관계없이 모든 판독기 목록을 반환합니다.
SCARD_DEFAULT_READERS
TEXT("SCard$DefaultReaders\000")
시스템에 도입될 때 모든 판독기를 추가하는 기본 그룹입니다.
SCARD_LOCAL_READERS
TEXT("SCard$LocalReaders\000")
사용되지 않는 레거시 값입니다. 읽기 권한자 그룹 API를 사용하여 수정할 수 없는 내부적으로 관리되는 그룹입니다. 열거형에만 사용됩니다.
SCARD_SYSTEM_READERS
TEXT("SCard$SystemReaders\000")
사용되지 않는 레거시 값입니다. 읽기 권한자 그룹 API를 사용하여 수정할 수 없는 내부적으로 관리되는 그룹입니다. 열거형에만 사용됩니다.

[out] mszReaders

제공된 판독기 그룹 내의 카드 판독기를 나열하는 다중 문자열입니다. 이 값이 NULL이면 SCardListReaderspcchReaders에 제공된 버퍼 길이를 무시하고, 이 매개 변수가 pcchReadersNULL이 아닌 경우 반환된 버퍼의 길이를 쓰고, 성공 코드를 반환합니다.

[in, out] pcchReaders

mszReaders 버퍼의 길이(문자)입니다. 이 매개 변수는 모든 후행 null 문자를 포함하여 다중 문자열 구조체의 실제 길이를 받습니다. 버퍼 길이가 SCARD_AUTOALLOCATE 지정되면 mszReaders 는 바이트 포인터에 대한 포인터로 변환되고 다중 문자열 구조를 포함하는 메모리 블록의 주소를 받습니다. 이 메모리 블록은 SCardFreeMemory로 할당을 취소해야 합니다.

반환 값

이 함수는 성공 여부에 따라 다른 값을 반환합니다.

반환 코드/값 설명
Success
0(0x0)
SCARD_S_SUCCESS
그룹에 판독기 없음
2148532270(0x8010002E)
SCARD_E_NO_READERS_AVAILABLE
지정된 판독기는 현재 사용할 수 없습니다.
2148532247(0x80100017)
SCARD_E_READER_UNAVAILABLE
기타
오류 코드입니다. 자세한 내용은 스마트 카드 반환 값을 참조하세요.

설명

SCardListReaders 함수는 데이터베이스 쿼리 함수입니다. 다른 데이터베이스 쿼리 함수에 대한 자세한 내용은 스마트 카드 데이터베이스 쿼리 함수를 참조하세요.

예제

다음 예제에서는 판독기를 나열하는 방법을 보여 줍니다.

LPTSTR          pmszReaders = NULL;
LPTSTR          pReader;
LONG            lReturn, lReturn2;
DWORD           cch = SCARD_AUTOALLOCATE;

// Retrieve the list the readers.
// hSC was set by a previous call to SCardEstablishContext.
lReturn = SCardListReaders(hSC,
                           NULL,
                           (LPTSTR)&pmszReaders,
                           &cch );
switch( lReturn )
{
    case SCARD_E_NO_READERS_AVAILABLE:
        printf("Reader is not in groups.\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( hSC,
                                   pmszReaders );
        if ( SCARD_S_SUCCESS != lReturn2 )
            printf("Failed SCardFreeMemory\n");
        break;

default:
        printf("Failed SCardListReaders\n");
        // Take appropriate action.
        // ...
        break;
}

참고

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winscard.h
라이브러리 Winscard.lib
DLL Winscard.dll

추가 정보

SCardEstablishContext

SCardFreeMemory

SCardGetProviderId

SCardListCards

SCardListInterfaces

SCardListReaderGroups