Compartilhar via


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 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 que foi 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 de 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:

Código de retorno Descrição
STATUS_BUFFER_OVERFLOW O buffer fornecido era muito pequeno para receber a notificação, o primeiro DWORD conterá o tamanho do buffer esperado.
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 de com o 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 após o evento HCE Activated ser disparado.
  • O driver deve dar suporte a CancelIo nesse 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 "Recebido" estiver vazia, o driver DEVERÁ aguardar o IOCTL para conclusão posterior.
    • Se a fila "Recebido" não estiver vazia, o driver DEVERÁ desativar a fila de 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 para o buffer de saída desse IOCTL, o driver DEVERÁ copiar o tamanho do buffer necessário para os quatro primeiros 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

Requisito Valor
Cabeçalho nfcsedev.h