Partager via


IOCTL_NFCSE_HCE_REMOTE_RECV IOCTL (nfcsedev.h)

Retourne la mémoire tampon de données suivante disponible ou, s’il n’y a plus de données mises en mémoire tampon, la demande reste en attente jusqu’à ce qu’une mémoire tampon APDU soit disponible pour lecture. La mémoire tampon de données doit ensuite être retournée à l’appelant. Notez que l’appelant doit allouer une mémoire tampon de sortie suffisamment grande pour contenir la plus grande APDU reçue + 4 octets de charge.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

None

Longueur de la mémoire tampon d’entrée

None

Mémoire tampon de sortie

DWORD indiquant la taille de la structure SECURE_ELEMENT_HCE_DATA_PACKET plus sa charge utile, immédiatement suivie de la structure SECURE_ELEMENT_HCE_DATA_PACKET elle-même.

Bloc d’état

Irp->IoStatus.Status est défini sur STATUS_SUCCESS si la demande réussit. Les codes d’erreur possibles sont les suivants :

Code de retour Description
STATUS_BUFFER_OVERFLOW La mémoire tampon fournie était trop petite pour recevoir la notification. Le premier DWORD contiendra la taille de mémoire tampon attendue.
STATUS_INVALID_PARAMETER Si la mémoire tampon d’entrée est différente de zéro.
STATUS_INVALID_DEVICE_STATE Si le IOCTL est envoyé sur un handle autre que celui portant le nom relatif « SEManage ».

Remarques

Voici les exigences auxquelles le pilote doit se conformer.

  • Ce IOCTL est envoyé sur une connexion existante après le déclenchement de l’événement activé par HCE.
  • Le pilote doit prendre en charge CancelIo sur ce IOCTL suspendu.
  • Le pilote doit conserver une file d’attente « Reçu » de l’API reçue pour la connexion actuelle.
  • Lorsque ce IOCTL est reçu dans le pilote :
    • Si la file d’attente « Reçu » est vide, le pilote DOIT mettre fin à IOCTL pour une exécution ultérieure.
    • Si la file d’attente « Reçu » n’est pas vide, le pilote DOIT dé-mettre en file d’attente une API, copiez la mémoire tampon APDU dans la mémoire tampon de sortie du IOCTL et terminez le IOCTL avec STATUS_SUCCESS immédiatement.
  • Si le pilote termine cette IOCTL avec STATUS_SUCCESS, le premier DWORD [4 octets] de la mémoire tampon de sortie DOIT contenir la taille de la structure SECURE_ELEMENT_HCE_DATA_PACKET plus sa charge utile.
  • Si les données APDU reçues sont trop volumineuses pour être copiées dans la mémoire tampon de sortie de ce IOCTL, le pilote DOIT copier la taille de mémoire tampon requise dans les 4 premiers octets de la mémoire tampon de sortie, définir le champ d’informations d’IOCTL sur sizeof (DWORD) et compléter le IOCTL avec STATUS_BUFFER_OVERFLOW. Les données APDU doivent être laissées dans la file d’attente « Received ».

Configuration requise

Condition requise Valeur
En-tête nfcsedev.h