IOCTL_NFCSE_HCE_REMOTE_RECV IOCTL (nfcsedev.h)

Retorna o próximo buffer de dados disponível ou, se não houver mais dados armazenados em buffer, a solicitação permanecerá pendente até que um buffer de APDU esteja disponível para leitura. Em seguida, o buffer de dados deve ser retornado ao chamador. Observe que o chamador deve alocar um buffer de saída grande o suficiente para manter a maior APDU recebida + 4 bytes de sobrecarga.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada

Nenhum

Comprimento do buffer de entrada

Nenhum

Buffer de saída

Um DWORD que indica o tamanho da estrutura SECURE_ELEMENT_HCE_DATA_PACKET mais sua carga, imediatamente seguido pela própria estrutura SECURE_ELEMENT_HCE_DATA_PACKET .

Bloco status

Irp-> IoStatus.Status será definido como STATUS_SUCCESS se a solicitação for bem-sucedida. Os códigos de erro possíveis são:

Retornar Código Descrição
STATUS_BUFFER_OVERFLOW O buffer fornecido era muito pequeno para receber a notificação, o primeiro DWORD conterá o tamanho esperado do buffer.
STATUS_INVALID_PARAMETER Se o buffer de entrada não for zero.
STATUS_INVALID_DEVICE_STATE Se o IOCTL for enviado em um identificador diferente do nome relativo 'SEManage'.

Comentários

A seguir estão os requisitos aos quais o driver deve aderir.

  • Esse IOCTL é enviado em uma conexão existente depois que o evento HCE Activated é disparado.
  • O driver deve dar suporte ao CancelIo neste IOCTL pendente.
  • O driver deve manter uma fila "Recebida" da APDU recebida para a conexão atual.
  • Quando este IOCTL é recebido no driver:
    • Se a fila "Recebida" estiver vazia, o driver deverá aguardar o IOCTL para conclusão posterior.
    • Se a fila "Recebida" não estiver vazia, o driver DEVERÁ desativar uma APDU, copiar o buffer de APDU para o buffer de saída do IOCTL e concluir o IOCTL com STATUS_SUCCESS imediatamente.
  • Se o driver concluir esse IOCTL com STATUS_SUCCESS, o primeiro DWORD [4 bytes] do buffer de saída DEVERÁ conter o tamanho da estrutura SECURE_ELEMENT_HCE_DATA_PACKET mais sua carga.
  • Se os dados de APDU recebidos forem muito grandes para serem copiados no buffer de saída deste IOCTL, o driver DEVERÁ copiar o tamanho do buffer necessário nos primeiros 4 bytes do buffer de saída, definir o campo de informações do IOCTL como sizeof(DWORD) e concluir o IOCTL com STATUS_BUFFER_OVERFLOW. Os dados da APDU devem ser deixados na fila "Recebido".

Requisitos

   
Cabeçalho nfcsedev.h