다음을 통해 공유


SCardGetAttrib 함수(winscard.h)

SCardGetAttrib 함수는 지정된 핸들에 대한 현재 판독기 특성을 검색합니다. 판독기, 드라이버 또는 카드상태에 영향을 주지 않습니다.

구문

LONG SCardGetAttrib(
  [in]      SCARDHANDLE hCard,
  [in]      DWORD       dwAttrId,
  [out]     LPBYTE      pbAttr,
  [in, out] LPDWORD     pcbAttrLen
);

매개 변수

[in] hCard

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

[in] dwAttrId

가져올 특성 의 식별자입니다. 다음 표에서는 dwAttrId에 대해 가능한 값을 나열합니다. 이 값은 읽기 전용입니다. 공급업체는 모든 특성을 지원하지 않을 수 있습니다.

의미
SCARD_ATTR_ATR_STRING
ATR(재설정) 문자열에 대한 답변입니다.
SCARD_ATTR_CHANNEL_ID
DWORD 는 0xDDDDCCCC로 인코딩됩니다. 여기서 DDDD = 데이터 채널 형식 및 CCCC = 채널 번호:
  • 다음 인코딩은 DDDD에 대해 정의됩니다.
  • 0x01 직렬 I/O; CCCC 는 포트 번호입니다.
  • 0x02 병렬 I/O; CCCC 는 포트 번호입니다.
  • 0x04 PS/2 키보드 포트; CCCC 는 0입니다.
  • 0x08 SCSI; CCCC 는 SCSI ID 번호입니다.
  • 0x10 IDE; CCCC 는 디바이스 번호입니다.
  • 0x20 USB; CCCC 는 디바이스 번호입니다.
  • 0xF범위 0 에서 15까지 의 범위에서 y 가 있는 y 공급업체 정의 인터페이스입니다. CCCC 는 공급업체가 정의합니다.
SCARD_ATTR_CHARACTERISTICS
지원되는 기계적 특성을 나타내는 DWORD입니다. 0이면 특별한 특성이 지원되지 않습니다. 여러 비트를 설정할 수 있습니다.
  • 0x00000001 카드 삼키는 메커니즘
  • 0x00000002 카드 배출 메커니즘
  • 0x00000004 카드 캡처 메커니즘
다른 모든 값은 나중에 RFU(사용)를 위해 예약됩니다.
SCARD_ATTR_CURRENT_BWT
현재 블록 대기 시간입니다.
SCARD_ATTR_CURRENT_CLK
현재 클록 속도(kHz)입니다.
SCARD_ATTR_CURRENT_CWT
현재 문자 대기 시간입니다.
SCARD_ATTR_CURRENT_D
비트 전송률 변환 계수입니다.
SCARD_ATTR_CURRENT_EBC_ENCODING
현재 오류 블록 컨트롤 인코딩.

0 = LRC(경도 중복 검사)

1 = CRC(순환 중복 검사)

SCARD_ATTR_CURRENT_F
클록 변환 계수입니다.
SCARD_ATTR_CURRENT_IFSC
정보 필드 크기 카드 현재 바이트 크기입니다.
SCARD_ATTR_CURRENT_IFSD
정보 필드 크기 디바이스의 현재 바이트 크기입니다.
SCARD_ATTR_CURRENT_N
현재 가드 시간입니다.
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
DWORDrrr이 RFU 이고 0x000 0x0 rrrpppp 로 인코딩됩니다. pppp 는 현재 프로토콜 형식을 인코딩합니다. 설정된 비트는 현재 사용 중인 ISO 프로토콜을 나타냅니다. (예를 들어 비트 0이 설정된 경우 T=0 프로토콜 이 적용됩니다.)
SCARD_ATTR_CURRENT_W
현재 작업 대기 시간입니다.
SCARD_ATTR_DEFAULT_CLK
기본 클록 속도(kHz)입니다.
SCARD_ATTR_DEFAULT_DATA_RATE
기본 데이터 속도(bps)입니다.
SCARD_ATTR_DEVICE_FRIENDLY_NAME
판독기 표시 이름입니다.
SCARD_ATTR_DEVICE_IN_USE
다음에 사용하도록 예약됩니다.
SCARD_ATTR_DEVICE_SYSTEM_NAME
판독기 시스템 이름입니다.
SCARD_ATTR_DEVICE_UNIT
컴퓨터에 연결된 이 공급업체 판독기의 인스턴스입니다. 첫 번째 instance 디바이스 단위 0이고, 다음 instance 1단원(동일한 독자 브랜드인 경우) 등이 됩니다. 독자의 두 가지 다른 브랜드는 모두이 값에 대 한 0이 있을 것 이다.
SCARD_ATTR_ICC_INTERFACE_STATUS
단일 바이트입니다. 스마트 카드 전기 접촉이 활성화되지 않은 경우 0이고, 접촉이 활성 상태이면 0이 아닙니다.
SCARD_ATTR_ICC_PRESENCE
스마트 카드 현재 상태를 나타내는 단일 바이트:

0 = 없음

1 = 카드 있지만 삼키지 않음(판독기가 스마트 카드 삼키는 경우에만 적용됨)

2 = 카드 존재 (판독기가 스마트 카드 삼키는 것을 지원하는 경우 삼킨다)

4 = 압수된 카드.

SCARD_ATTR_ICC_TYPE_PER_ATR
스마트 카드 형식을 나타내는 단일 바이트:

0 = 알 수 없는 형식

1 = 7816 비동기

2 = 7816 동기

기타 값 RFU.

SCARD_ATTR_MAX_CLK
최대 클록 속도(kHz)입니다.
SCARD_ATTR_MAX_DATA_RATE
최대 데이터 속도(bps)입니다.
SCARD_ATTR_MAX_IFSD
정보 파일 크기 디바이스의 최대 바이트입니다.
SCARD_ATTR_POWER_MGMT_SUPPORT
스마트 카드 삽입되는 동안 디바이스가 전원을 낮추지 않는 경우 0입니다. 그렇지 않으면 0이 아닌 값입니다.
SCARD_ATTR_PROTOCOL_TYPES
DWORDrrr이 RFU 이고 0x000 0x0 rrrpppp 로 인코딩됩니다. pppp 는 지원되는 프로토콜 형식을 인코딩합니다. 지정된 비트 위치의 '1'은 연결된 ISO 프로토콜에 대한 지원을 나타내므로 비트가 0과 1로 설정되면 T=0T=1 프로토콜이 모두 지원됩니다.
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
공급업체에서 제공하는 인터페이스 디바이스 일련 번호입니다.
SCARD_ATTR_VENDOR_IFD_TYPE
공급업체에서 제공하는 인터페이스 디바이스 유형(판독기의 모델 지정).
SCARD_ATTR_VENDOR_IFD_VERSION
공급업체에서 제공하는 인터페이스 디바이스 버전(MM = 주 버전, mm = 부 버전 및 bbbb = 빌드 번호인 0xMMmmbbbb 형식의 DWORD).
SCARD_ATTR_VENDOR_NAME
공급업체 이름입니다.

[out] pbAttr

ID가 dwAttrId에 제공된 특성을 수신하는 버퍼에 대한 포인터입니다. 이 값이 NULL이면 SCardGetAttribpcbAttrLen에 제공된 버퍼 길이를 무시하고, 이 매개 변수가 pcbAttrLenNULL이 아닌 경우 반환되었을 버퍼의 길이를 쓰고, 성공 코드를 반환합니다.

[in, out] pcbAttrLen

pbAttr 버퍼의 길이(바이트)와 수신된 특성의 실제 길이를 수신합니다. 버퍼 길이가 SCARD_AUTOALLOCATE 지정된 경우 pbAttr은 바이트 포인터에 대한 포인터로 변환되고 특성을 포함하는 메모리 블록의 주소를 받습니다. 이 메모리 블록은 SCardFreeMemory로 할당 취소되어야 합니다.

반환 값

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

반환 코드 설명
Success
SCARD_S_SUCCESS.
특성 값은 지원되지 않습니다.
ERROR_NOT_SUPPORTED.
기타 오류
오류 코드입니다. 자세한 내용은 스마트 카드 반환 값을 참조하세요.

설명

SCardGetAttrib 함수는 직접 카드 액세스 함수입니다. 다른 직접 액세스 함수에 대한 자세한 내용은 직접 카드 액세스 함수를 참조하세요.

예제

다음 예제에서는 카드 판독기 특성을 검색하는 방법을 보여줍니다. 이 예제에서는 hCardHandle이 SCardConnect 함수에 대한 이전 호출에서 가져온 유효한 핸들이라고 가정합니다.

LPBYTE   pbAttr = NULL;
DWORD    cByte = SCARD_AUTOALLOCATE;
DWORD    i;
LONG     lReturn;

lReturn = SCardGetAttrib(hCardHandle,
                         SCARD_ATTR_VENDOR_NAME,
                         (LPBYTE)&pbAttr,
                         &cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
    if ( ERROR_NOT_SUPPORTED == lReturn )
        printf("Value not supported\n");
    else
    {
        // Some other error occurred.
        printf("Failed SCardGetAttrib - %x\n", lReturn);
        exit(1);  // Or other appropriate action
    }
}
else
{
    // Output the bytes.
    for (i = 0; i < cByte; i++)
        printf("%c", *(pbAttr+i));
    printf("\n");

    // Free the memory when done.
    // hContext was set earlier by SCardEstablishContext
    lReturn = SCardFreeMemory( hContext, pbAttr );
}

요구 사항

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

추가 정보

SCardConnect

SCardFreeMemory

SCardSetAttrib