IOCTL_SMARTCARD_TRANSMIT IOCTL(winsmcrd.h)

IOCTL_SMARTCARD_TRANSMIT 요청은 삽입된 스마트 카드 데이터를 전송하고 데이터를 받습니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

  • Irp->ASSOCIATedIrp.SystemBuffer 삽입된 스마트 카드 전송할 데이터 뒤에 SCARD_IO_REQUEST 구조체에 대한 포인터입니다.

입력 버퍼 길이

  • Parameters.DeviceIoControl.InputBufferLength 구조체의 크기와 후행 데이터 바이트 길이(있는 경우)를 포함합니다. dwProtocol 멤버는 이전에 선택한 프로토콜로 설정해야 하며 cbPciLength 멤버는 SCARD_IO_REQUEST 구조체 자체의 크기(일반적으로 8바이트)로 설정해야 합니다. 구조체는 향후 프로토콜에 사용됩니다. 카드 전송되는 데이터는 이 구조를 즉시 따라야 합니다.

출력 버퍼

바이트 버퍼는 전송 결과를 포함합니다. 버퍼는 즉시 SCARD_IO_REQUEST 구조체를 가리킨 다음 받은 데이터를 가리킵니다.

  • Irp->ASSOCIATedIrp.SystemBuffer 전송 결과를 수신합니다. 이 버퍼는 SCARD_IO_REQUEST 구조로 시작해야 합니다. 카드 받은 모든 데이터는 구조체 바로 다음에 저장되어야 합니다.

출력 버퍼 길이

  • Parameters.DeviceIoControl.OutputBufferLength 출력 버퍼의 길이를 포함합니다.

상태 블록

Irp->IoStatus.Status 는 다음 값 중 하나로 설정됩니다.

의미
STATUS_SUCCESS 전송이 성공했습니다.
STATUS_NO_MEDIA 판독기에서 스마트 카드 검색되지 않습니다.
STATUS_IO_TIMEOUT 작업 시간이 초과되었습니다.
STATUS_INVALID_DEVICE_STATE 헤더 파일의 프로토콜이 이전에 선택한 스마트 카드 프로토콜과 일치하지 않습니다.
STATUS_BUFFER_TOO_SMALL 출력 버퍼가 반환 데이터에 비해 너무 작습니다.
STATUS_DEVICE_POWERED_OFF 근접 라디오 컨트롤이 꺼져 있습니다.

설명

IOCTL_SMARTCARD_TRANSMIT 클라이언트에서 감지된 스마트 카드 ISO7816-4 규격 APDU로 데이터를 전송합니다. 이러한 APTU는 PC/SC 사양과 관련하여 해석됩니다(섹션 4.3.7에는 다양한 NFC 비접촉식 태그 형식 지원에 대한 자세한 요구 사항이 있습니다). NFP 기능은 스마트 카드 동일한 드라이버를 공유하므로 검색 직후에 카드 연결해야 하며 '전송'에 대한 명시적 연결이 필요하지 않습니다.

입력 버퍼와 출력 버퍼가 동일한 메모리 영역을 가리키기 때문에 드라이버는 입력 데이터를 덮어쓰지 않아야 합니다. 스마트 카드 드라이버 라이브러리를 사용하여 입력 데이터를 덮어쓰지 않도록 합니다.

요구 사항

요구 사항
헤더 winsmcrd.h

추가 정보

NFC(근거리 통신) 디자인 가이드

스마트 카드 디자인 가이드