Поделиться через


IOCTL_NFCSE_HCE_REMOTE_RECV IOCTL (nfcsedev.h)

Либо возвращает следующий доступный буфер данных, либо если буферизация данных больше отсутствует, запрос будет оставаться в ожидании, пока буфер APDU не будет доступен для чтения. Затем буфер данных должен быть возвращен вызывающей объекту. Обратите внимание, что вызывающий объект должен выделить выходной буфер, достаточно большой для хранения наибольшего полученного APDU + 4 байта.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

None

Длина входного буфера

None

Выходной буфер

Значение DWORD, указывающее размер структуры SECURE_ELEMENT_HCE_DATA_PACKET плюс ее полезные данные, за которым сразу же следует сама структура SECURE_ELEMENT_HCE_DATA_PACKET.

Блок состояния

Irp->IoStatus.Status имеет значение STATUS_SUCCESS , если запрос выполнен успешно. Возможные коды ошибок:

Код возврата Описание
STATUS_BUFFER_OVERFLOW Предоставленный буфер был слишком мал для получения уведомления. Первый параметр DWORD будет содержать ожидаемый размер буфера.
STATUS_INVALID_PARAMETER Если входной буфер не равен нулю.
STATUS_INVALID_DEVICE_STATE Если IOCTL отправляется на дескриптор, отличный от относительного имени SEManage.

Комментарии

Ниже приведены требования, которым должен соответствовать драйвер.

  • Этот IOCTL отправляется при существующем подключении после активации события HCE Activated.
  • Драйвер должен поддерживать CancelIo в этом IOCTL с подвесной ручкой.
  • Драйвер должен поддерживать очередь "Получено" полученного APDU для текущего подключения.
  • При получении этого IOCTL в драйвере:
    • Если очередь "Получено" пуста, драйвер должен настроить IOCTL для последующего завершения.
    • Если очередь "Получено" не пуста, драйвер ДОЛЖЕН удалить из очереди один APDU, скопировать буфер APDU в выходной буфер IOCTL и немедленно завершить IOCTL с STATUS_SUCCESS.
  • Если драйвер завершает этот IOCTL с STATUS_SUCCESS, первый DWORD [4 байта] выходного буфера должен содержать размер структуры SECURE_ELEMENT_HCE_DATA_PACKET плюс ее полезные данные.
  • Если полученные данные APDU слишком велики для копирования в выходной буфер этого IOCTL, драйвер ДОЛЖЕН скопировать требуемый размер буфера в первые 4 байта выходного буфера, задать для поля сведений IOCTL значение sizeof(DWORD) и завершить IOCTL с STATUS_BUFFER_OVERFLOW. Данные APDU необходимо оставить в очереди "Получено".

Требования

Требование Значение
Заголовок nfcsedev.h