IOCTL_NFCSE_HCE_REMOTE_RECV IOCTL (nfcsedev.h)

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

Основной код

IRP_MJ_DEVICE_CONTROL

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

Никакой

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

Никакой

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

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.
  • Драйвер должен поддерживать 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