SMARTCARD_EXTENSION 구조체(smclib.h)
SMARTCARD_EXTENSION 구조는 스마트 카드 판독기 드라이버와 스마트 카드 드라이버 라이브러리 모두에서 다른 모든 스마트 카드 데이터 구조에 액세스하는 데 사용됩니다.
구문
typedef struct _SMARTCARD_EXTENSION {
ULONG Version;
VENDOR_ATTR VendorAttr;
NTSTATUS( *ReaderFunction[16];
SCARD_CARD_CAPABILITIES CardCapabilities;
ULONG LastError;
struct {
PULONG Information;
PUCHAR RequestBuffer;
ULONG RequestBufferLength;
PUCHAR ReplyBuffer;
ULONG ReplyBufferLength;
} IoRequest;
ULONG MajorIoControlCode;
ULONG MinorIoControlCode;
POS_DEP_DATA OsData;
SCARD_READER_CAPABILITIES ReaderCapabilities;
PREADER_EXTENSION ReaderExtension;
SMARTCARD_REPLY SmartcardReply;
SMARTCARD_REQUEST SmartcardRequest;
T0_DATA T0;
T1_DATA T1;
PPERF_INFO PerfInfo;
ULONG Reserved[25 - sizeof(PPERF_INFO)];
} *PSMARTCARD_EXTENSION, SMARTCARD_EXTENSION;
멤버
Version
이 구조체의 버전을 나타냅니다.
VendorAttr
공급업체 이름, 단위 번호 및 일련 번호와 같은 판독기 드라이버를 식별하는 정보를 포함합니다.
ReaderFunction[16]
구문 블록의 줄을 읽어야 합니다. NTSTATUS (*ReaderFunction[16])(PSMARTCARD_EXTENSION);
판독기용 콜백 함수 배열에 대한 포인터입니다. 공급업체에서 제공하는 판독기 드라이버가 구현할 수 있는 콜백 함수입니다. 판독기 드라이버는 스마트 카드 라이브러리 루틴인 SmartcardDeviceControl에서 이러한 콜백 함수를 사용하여 스마트 카드 디바이스 확장에 포인터를 저장하여 호출할 수 있도록 합니다.
- RDF_ATR_PARSE
- RDF_CARD_EJECT
- RDF_CARD_POWER
- RDF_CARD_TRACKING
- RDF_IOCTL_VENDOR
- RDF_READER_SWALLOW
- RDF_SET_PROTOCOL
- RDF_TRANSMIT
CardCapabilities
삽입된 스마트 카드 기능을 포함합니다.
LastError
사용되지 않습니다.
IoRequest
다음 멤버가 있는 구조체:
IoRequest.Information
반환된 바이트 수를 포함합니다.
IoRequest.RequestBuffer
카드 보낼 사용자의 I/O 요청에 있는 데이터에 대한 포인터입니다.
IoRequest.RequestBufferLength
카드 보낼 바이트 수를 나타냅니다.
IoRequest.ReplyBuffer
I/O 요청에 의해 반환되는 데이터를 보유하는 버퍼에 대한 포인터입니다.
IoRequest.ReplyBufferLength
I/O 요청에 의해 반환되는 데이터의 바이트 수를 나타냅니다.
MajorIoControlCode
주요 I/O 제어 코드를 포함합니다.
MinorIoControlCode
부 I/O 컨트롤 코드를 포함합니다.
OsData
운영 체제 및 드라이버 유형과 관련된 정보를 포함합니다.
ReaderCapabilities
키보드 판독기의 기능을 포함합니다.
ReaderExtension
스마트 카드 판독기 관련 데이터를 포함합니다.
SmartcardReply
판독기에서 가져온 데이터를 포함합니다.
SmartcardRequest
현재 명령과 스마트 카드 전송되는 데이터를 포함합니다.
T0
T=0 프로토콜에 사용할 데이터를 포함합니다.
T1
T=1 프로토콜과 함께 사용되는 데이터를 포함합니다.
PerfInfo
Reserved[25 - sizeof(PPERF_INFO)]
시스템에서 사용하도록 예약되었습니다.
설명
이 구조체는 모든 콜백 함수에 전달됩니다.
개별 콜백 함수는 ReaderFunction 배열에 대한 인덱스로 사용해야 하는 일련의 상수 값으로 식별됩니다.
인덱스 | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|
RDF_ATR_PARSE | 선택 사항입니다. RDF_ATR_PARSE 구문 분석 함수는 드라이버 라이브러리가 스마트 카드 드라이버 라이브러리를 인식하거나 구문 분석할 수 없는 경우 스마트 카드 드라이버 라이브러리에 대한 ATR(응답-재설정)을 구문 분석합니다. | ||||||||
RDF_CARD_EJECT | 선택 사항입니다. RDF_CARD_EJECT 콜백 함수 RDF_CARD_EJECT 콜백 함수는 판독기에서 삽입된 스마트 카드 배출합니다. |
||||||||
RDF_CARD_POWER | RDF_CARD_POWER 콜백 함수는 삽입된 스마트 카드 다시 설정하거나 해제합니다. 스마트 카드 판독기 드라이버가 이 콜백 함수를 구현해야 합니다.
입력에서 SmartcardExtension 이 가리키는 구조체에는 다음 멤버 값이 있어야 합니다.
|
||||||||
RDF_CARD_TRACKING | RDF_CARD_TRACKING 콜백 함수는 카드 삽입되거나 카드 판독기에서 제거될 때마다 추적하는 이벤트 처리기를 설치합니다. 스마트 카드 판독기 드라이버가 이 콜백 함수를 구현해야 합니다.
IOCTL_SMARTCARD_IS_PRESENT 요청을 받으면 드라이버 라이브러리는 스마트 카드 이미 있는지 확인합니다. 스마트 카드 있는 경우 드라이버 라이브러리는 STATUS_SUCCESS 상태 사용하여 요청을 완료합니다. 스마트 카드 없는 경우 드라이버 라이브러리는 판독기 드라이버의 스마트 카드 추적 콜백 함수를 호출하고 판독기 드라이버는 스마트 카드 찾기 시작합니다. 스마트 카드 추적을 시작한 후 드라이버 라이브러리는 요청을 STATUS_PENDING 상태 있는 것으로 표시합니다. 드라이버 라이브러리가 요청을 완료합니다. WDM 디바이스 드라이버 해당 WDM 드라이버 라이브러리는 SmartcardExtension-OsData-NotificationIrp>>의 요청에 포인터를 추가합니다. 판독기 드라이버는 스마트 카드 삽입 또는 제거되었음을 감지하는 즉시 요청을 완료해야 합니다. 판독기 드라이버는 IoCompleteRequest를 호출하여 요청을 완료합니다. 그 후 판독기 드라이버는 SmartcardExtension -> OsData의 NotificationIrp 멤버를 NULL로 다시 설정하여 판독기 드라이버가 추가 스마트 카드 추적 요청을 수락할 수 있음을 드라이버 라이브러리에 알려야 합니다. 이 호출은 무기한 기간을 가질 수 있고 호출자가 완료되기 전에 요청을 종료할 수 있으므로 이 IRP를 취소 가능한 것으로 표시하는 것이 중요합니다.
|
||||||||
RDF_IOCTL_VENDOR | RDF_IOCTL_VENDOR 콜백 함수는 공급업체별 IOCTL 작업을 수행합니다. 스마트 카드 판독기 드라이버가 이 콜백 함수를 구현하는 것은 선택 사항입니다.
입력에서 호출자는 함수에 다음 값을 전달해야 합니다.
|
||||||||
RDF_READER_SWALLOW | RDF_READER_SWALLOW 콜백 함수는 스마트 카드 스마트 카드 판독기에 완전히 삽입될 때 발생하는 기계적 제비 기능을 수행합니다. 스마트 카드 판독기 드라이버가 이 콜백 함수를 구현하는 것은 선택 사항입니다. | ||||||||
RDF_SET_PROTOCOL | RDF_SET_PROTOCOL 콜백 함수는 삽입된 스마트 카드 대한 전송 프로토콜을 선택합니다. 스마트 카드 판독기 드라이버는 이 콜백 함수를 구현해야 합니다.
입력에서 호출자는 다음 값을 함수에 전달해야 합니다.
|
||||||||
RDF_TRANSMIT | RDF_TRANSMIT 콜백 함수는 데이터 전송을 수행합니다. 스마트 카드 판독기 드라이버는 이 콜백 함수를 구현해야 합니다.
입력에서 호출자는 다음 값을 함수에 전달해야 합니다.
dwProtocol 멤버는 IOCTL_SMARTCARD_SET_PROTOCOL 호출에 의해 반환되는 프로토콜 식별자를 포함해야 합니다. cbPciLength 멤버는 SCARD_IO_REQUEST 구조체의 크기(바이트)를 포함합니다. 이 구조체의 크기는 일반적으로 8바이트입니다. SCARD_IO_REQUEST 구조 다음에는 (프로토콜) 데이터를 사용하여 카드 전송합니다. 전송에 사용할 프로토콜에 따라 라이브러리는 여러 지원 기능을 제공합니다. 이러한 지원 함수에 대한 자세한 내용은 SmartcardT0Request(WDM) 및 SmartcardT1Request(WDM)를 참조하세요. RequestBuffer 및 ReplyBuffer는 동일한 시스템 버퍼를 가리킵니다. 라이브러리 함수 SmartcardxxRequest 및 SmartcardxxReply를 사용하는 경우 입력 버퍼를 덮어쓰지 않습니다. 이러한 함수를 사용하지 않는 경우 전송을 시작하기 전에 RequestBuffer 의 복사본을 만듭니다. SCARD_IO_REQUEST 구조체를 ReplyBuffer 매개 변수에 복사한 다음 카드 받은 데이터를 복사해야 합니다. 다시 SmartcardxxRequest 및 SmartcardxxReply 함수를 사용하는 경우 라이브러리는 구조체를 복사합니다. |
요구 사항
요구 사항 | 값 |
---|---|
헤더 | smclib.h(Smclib.h 포함) |