다음을 통해 공유


SCardStatusA 함수(winscard.h)

SCardStatus 함수는 판독기에서 스마트 카드 현재 상태 제공합니다. SCardConnect를 성공적으로 호출한 후 SCardDisconnect를 성공적으로 호출하기 전에 언제든지 호출할 수 있습니다. 판독기 또는 판독기 드라이버상태에는 영향을 주지 않습니다.

구문

LONG SCardStatusA(
  [in]                SCARDHANDLE hCard,
  [out]               LPSTR       mszReaderNames,
  [in, out, optional] LPDWORD     pcchReaderLen,
  [out, optional]     LPDWORD     pdwState,
  [out, optional]     LPDWORD     pdwProtocol,
  [out]               LPBYTE      pbAtr,
  [in, out, optional] LPDWORD     pcbAtrLen
);

매개 변수

[in] hCard

SCardConnect에서 반환된 참조 값입니다.

[out] mszReaderNames

현재 연결된 판독기가 알려진 표시 이름(여러 문자열) 목록입니다.

[in, out, optional] pcchReaderLen

입력 시 szReaderName 버퍼의 길이를 제공합니다.

출력에서 는 후행 NULL 문자를 포함하여 판독기 이름 목록의 실제 길이(문자)를 받습니다. 이 버퍼 길이가 SCARD_AUTOALLOCATE 지정되면 szReaderName 은 바이트 포인터에 대한 포인터로 변환되고 다중 문자열 구조가 포함된 메모리 블록의 주소를 받습니다.

[out, optional] pdwState

판독기에서 스마트 카드 현재 상태입니다. 성공하면 다음 상태 표시기 중 하나를 받습니다.

의미
SCARD_ABSENT
판독기에서 카드 없습니다.
SCARD_PRESENT
판독기에는 카드 있지만 사용할 위치로 이동되지 않았습니다.
SCARD_SWALLOWED
판독기에서 사용할 수 있는 위치에 카드 있습니다. 카드 전원이 공급되지 않습니다.
SCARD_POWERED
전원이 카드 제공되지만 판독기 드라이버는 카드 모드를 인식하지 못합니다.
SCARD_NEGOTIABLE
카드 재설정되었으며 PTS 협상을 기다리고 있습니다.
SCARD_SPECIFIC
카드 재설정되었으며 특정 통신 프로토콜이 설정되었습니다.

[out, optional] pdwProtocol

현재 프로토콜(있는 경우) 반환된 값은 pdwState 의 반환된 값이 SCARD_SPECIFICMODE 경우에만 의미가 있습니다.

의미
SCARD_PROTOCOL_RAW
원시 전송 프로토콜이 사용 중입니다.
SCARD_PROTOCOL_T0
ISO 7816/3 T=0 프로토콜이 사용 중입니다.
SCARD_PROTOCOL_T1
ISO 7816/3 T=1 프로토콜이 사용 중입니다.

[out] pbAtr

사용 가능한 경우 현재 삽입된 카드 ATR 문자열을 수신하는 32비트 버퍼에 대한 포인터입니다.

[in, out, optional] pcbAtrLen

입력에서 pbAtr 버퍼의 길이를 제공합니다. 출력 시 ATR 문자열의 바이트 수(최대 32바이트)를 받습니다. 이 버퍼 길이가 SCARD_AUTOALLOCATE 지정되면 pbAtr 은 바이트 포인터에 대한 포인터로 변환되고 다중 문자열 구조가 포함된 메모리 블록의 주소를 받습니다.

반환 값

함수가 판독기에서 스마트 카드 현재 상태 성공적으로 제공하면 반환 값이 SCARD_S_SUCCESS.

함수가 실패하면 오류 코드를 반환합니다. 자세한 내용은 스마트 카드 반환 값을 참조하세요.

설명

SCardStatus 함수는 스마트 카드판독기 액세스 함수입니다. 다른 액세스 함수에 대한 자세한 내용은 스마트 카드 및 읽기 권한자 액세스 함수를 참조하세요.

예제

다음 예제에서는 스마트 카드 상태를 확인하는 방법을 보여줍니다.

WCHAR           szReader[200];
DWORD           cch = 200;
BYTE            bAttr[32];
DWORD           cByte = 32;
DWORD           dwState, dwProtocol;
LONG            lReturn;

// Determine the status.
// hCardHandle was set by an earlier call to SCardConnect.
lReturn = SCardStatus(hCardHandle,
                      szReader,
                      &cch,
                      &dwState,
                      &dwProtocol,
                      (LPBYTE)&bAttr,
                      &cByte); 

if ( SCARD_S_SUCCESS != lReturn )
{
    printf("Failed SCardStatus\n");
    exit(1);     // or other appropriate action
}

// Examine retrieved status elements.
// Look at the reader name and card state.
printf("%S\n", szReader );
switch ( dwState )
{
    case SCARD_ABSENT:
        printf("Card absent.\n");
        break;
    case SCARD_PRESENT:
        printf("Card present.\n");
        break;
    case SCARD_SWALLOWED:
        printf("Card swallowed.\n");
        break;
    case SCARD_POWERED:
        printf("Card has power.\n");
        break;
    case SCARD_NEGOTIABLE:
        printf("Card reset and waiting PTS negotiation.\n");
        break;
    case SCARD_SPECIFIC:
        printf("Card has specific communication protocols set.\n");
        break;
    default:
        printf("Unknown or unexpected card state.\n");
        break;
}

참고

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

요구 사항

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

추가 정보

SCardConnect

SCardDisconnect