IOCTL_NFCSE_HCE_REMOTE_RECV IOCTL(nfcsedev.h)

사용할 수 있는 다음 데이터 버퍼를 반환하거나 버퍼링된 데이터가 더 이상 없는 경우 APDU 버퍼를 읽을 수 있을 때까지 요청이 보류 상태로 유지됩니다. 그러면 데이터 버퍼가 호출자에게 반환됩니다. 호출자는 수신된 가장 큰 APDU + 4바이트 오버헤드를 보유할 수 있을 만큼 큰 출력 버퍼를 할당해야 합니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

없음

입력 버퍼 길이

없음

출력 버퍼

SECURE_ELEMENT_HCE_DATA_PACKET 구조체의 크기와 해당 페이로드를 나타내는 DWORD이며, SECURE_ELEMENT_HCE_DATA_PACKET 구조체 자체가 바로 뒤따릅니다.

상태 블록

Irp->요청이 성공하면 IoStatus.StatusSTATUS_SUCCESS 설정됩니다. 가능한 오류 코드는 다음과 같습니다.

반환 코드 Description
STATUS_BUFFER_OVERFLOW 제공된 버퍼가 너무 작아 알림을 받을 수 없습니다. 첫 번째 DWORD에는 예상 버퍼 크기가 포함됩니다.
STATUS_INVALID_PARAMETER 입력 버퍼가 0이 아닌 경우
STATUS_INVALID_DEVICE_STATE IOCTL이 상대 이름 'SEManage'가 아닌 다른 핸들로 전송되는 경우

설명

다음은 드라이버가 준수해야 하는 요구 사항입니다.

  • 이 IOCTL은 HCE 활성화 이벤트가 트리거된 후 기존 연결에서 전송됩니다.
  • 드라이버는 보류 중인 IOCTL에서 CancelIo를 지원해야 합니다.
  • 드라이버는 현재 연결에 대해 수신된 APDU의 "수신됨" 큐를 유지해야 합니다.
  • 드라이버에서 이 IOCTL이 수신되는 경우:
    • "수신됨" 큐가 비어 있으면 드라이버는 나중에 완료하기 위해 IOCTL을 보류해야 합니다.
    • "수신됨" 큐가 비어 있지 않으면 드라이버는 하나의 APDU 큐를 해제하고 APDU 버퍼를 IOCTL의 출력 버퍼에 복사한 다음 즉시 STATUS_SUCCESS 사용하여 IOCTL을 완료해야 합니다.
  • 드라이버가 STATUS_SUCCESS 사용하여 이 IOCTL을 완료하는 경우 출력 버퍼의 첫 번째 DWORD [4바이트]에는 SECURE_ELEMENT_HCE_DATA_PACKET 구조체의 크기와 해당 페이로드가 포함되어야 합니다.
  • 수신된 APDU 데이터가 너무 커서 이 IOCTL의 출력 버퍼에 복사할 수 없는 경우 드라이버는 필요한 버퍼 크기를 출력 버퍼의 처음 4바이트에 복사하고 IOCTL의 정보 필드를 sizeof(DWORD)로 설정하고 STATUS_BUFFER_OVERFLOW 사용하여 IOCTL을 완료해야 합니다. APDU 데이터는 "수신됨" 큐에 남아 있어야 합니다.

요구 사항

요구 사항
헤더 nfcsedev.h