IOCTL_NFCSE_GET_NEXT_EVENT IOCTL(nfcsedev.h)

IOCTL_NFCSE_GET_NEXT_EVENT 제어 코드는 버퍼에서 사용할 수 있는 다음 이벤트를 반환하거나, 더 이상 버퍼링된 이벤트가 없는 경우 보안 요소 이벤트를 사용할 수 있을 때까지 보류 중인 상태로 유지됩니다. 그런 다음 이벤트 세부 정보를 호출자에게 반환해야 합니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

없음

입력 버퍼 길이

없음

출력 버퍼

SECURE_ELEMENT_EVENT_INFO 구조체의 크기와 해당 페이로드를 나타내는 DWORD로, 바로 뒤에 SECURE_ELEMENT_EVENT_INFO 구조체가 있습니다.

상태 블록

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

반환 코드 Description
STATUS_INVALID_DEVICE_STATE 이 코드는 SEEvents 이외의 파일 이름이 있는 디바이스 핸들에서 이 IOCTL이 호출되거나 아직 완료되지 않은 보류 중인 다른 요청이 이미 있을 때 반환됩니다.
STATUS_INVALID_PARAMETER 이 코드는 출력 버퍼가 0이 아니거나 보안 요소의 GUID가 열거된 ID와 일치하지 않을 때 반환됩니다.

설명

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

  • 이 IOCTL은 SEEvents 상대 파일 이름이 있는 핸들에서 호출해야 합니다. 그렇지 않으면 드라이버가 STATUS_INVALID_DEVICE_STATE 반환합니다.
  • 이 드라이버는 보류 중인 IOCTL에 대해 CancelIO를 지원해야 합니다.
  • 이 드라이버는 구독 유형과 일치하는 수신된 보안 요소 이벤트의 수신된 큐를 유지해야 합니다.
  • 드라이버에서 이 IOCTL을 수신할 때 다음 조건을 충족해야 합니다.
    • 수신된 큐가 비어 있는 경우 드라이버는 나중에 완료하기 위해 IOCTL을 보류해야 합니다.
    • 수신된 큐가 비어 있지 않으면 드라이버는 하나의 이벤트 큐를 해제하고, 메시지 버퍼를 IOCTL의 출력 버퍼에 복사하고, 즉시 STATUS_SUCCESS 사용하여 IOCTL을 완료해야 합니다.
  • 드라이버가 STATUS_SUCCESS 사용하여 이 IOCTL을 완료하는 경우 출력 버퍼의 첫 번째 DWORD [4바이트]에는 SECURE_ELEMENT_EVENT_INFO 구조체의 크기와 해당 페이로드가 포함되어야 합니다.
  • 수신된 보안 요소 이벤트 정보가 너무 커서 이 IOCTL의 버퍼에 복사할 수 없는 경우 드라이버는 필요한 버퍼 크기를 출력 버퍼의 처음 4바이트로 복사하고 IOCTL의 정보 필드를 sizeof(DWORD)로 설정하고 STATUS_BUFFER_OVERFLOW 사용하여 IOCTL을 완료해야 합니다. 그러면 이벤트가 수신된 큐에 남아 있어야 합니다.

요구 사항

요구 사항
헤더 nfcsedev.h