Partager via


EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL fonction de rappel (wdfio.h)

[S’applique à KMDF et UMDF]

La fonction de rappel d’événement EvtIoInternalDeviceControl d’un pilote traite une demande d’E/S qui contient un code de contrôle d’E/S de périphérique interne (IOCTL).

Syntaxe

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtWdfIoQueueIoInternalDeviceControl;

void EvtWdfIoQueueIoInternalDeviceControl(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Paramètres

[in] Queue

Handle de l’objet de file d’attente d’infrastructure associé à la demande d’E/S.

[in] Request

Handle pour un objet de requête d’infrastructure.

[in] OutputBufferLength

Longueur, en octets, de la mémoire tampon de sortie de la requête, si une mémoire tampon de sortie est disponible.

[in] InputBufferLength

Longueur, en octets, de la mémoire tampon d’entrée de la requête, si une mémoire tampon d’entrée est disponible.

[in] IoControlCode

IOCTL défini par le pilote ou défini par le système qui est associé à la requête.

Valeur de retour

None

Remarques

Un pilote inscrit une fonction de rappel EvtIoInternalDeviceControl lorsqu’il appelle la méthode WdfIoQueueCreate . Pour plus d’informations sur l’appel de WdfIoQueueCreate, consultez Création de files d’attente d’E/S.

Si un pilote a inscrit une fonction de rappel EvtIoInternalDeviceControl pour la file d’attente d’E/S d’un appareil, la fonction de rappel reçoit chaque demande de contrôle d’E/S interne (IRP_MJ_INTERNAL_DEVICE_CONTROL) de la file d’attente. Pour plus d’informations, consultez Gestionnaires de demandes.

La fonction de rappel EvtIoInternalDeviceControl doit traiter chaque demande d’E/S reçue d’une manière ou d’une autre. Pour plus d’informations, consultez Traitement des demandes d’E/S.

Les pilotes reçoivent des demandes de contrôle d’E/S internes lorsqu’un autre pilote crée une requête en appelant WdfIoTargetSendInternalIoctlSynchronously ou WdfIoTargetFormatRequestForInternalIoctl.

Le type d’opération à effectuer dépend de la valeur du paramètre IoControlCode . Vous devez déterminer l’ensemble de valeurs IoControlCode que les applications et d’autres pilotes peuvent envoyer à votre pilote. Pour plus d’informations sur les IOCTL, consultez Utilisation des codes de contrôle d’E/S.

La plupart des opérations de contrôle d’E/S internes nécessitent une mémoire tampon d’entrée, une mémoire tampon de sortie, ou les deux. Pour plus d’informations sur la façon dont le pilote peut accéder aux mémoires tampons d’une requête, consultez Accès aux mémoires tampons de données dans les pilotes Framework-Based.

Les techniques que votre pilote peut utiliser pour accéder aux mémoires tampons d’entrée et de sortie de la requête (le cas échéant) dépendent du champ TransferType de l’IOCTL. La valeur du champ TransferType d’IOCTL peut être METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT ou METHOD_NEITHER. Pour plus d’informations sur le champ TransferType , consultez Définition de codes de contrôle d’E/S.

La fonction de rappel EvtIoInternalDeviceControl peut être appelée dans IRQL <= DISPATCH_LEVEL, sauf si le membre ExecutionLevel de la structure de WDF_OBJECT_ATTRIBUTES du périphérique ou du pilote est défini sur WdfExecutionLevelPassive. (Si votre pilote se trouve en haut de sa pile de pilotes, la fonction de rappel est appelée dans IRQL = PASSIVE_LEVEL.)

Si l’IRQL est PASSIVE_LEVEL, l’infrastructure appelle la fonction de rappel dans une région critique.

Pour plus d’informations sur les niveaux IRQL pour les gestionnaires de requêtes, consultez Utilisation de la synchronisation automatique.

La fonction de rappel EvtIoInternalDeviceControl d’un pilote ne doit pas appeler les méthodes d’objet file d’attente suivantes :

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfio.h (inclure Wdf.h)
IRQL <= DISPATCH_LEVEL (voir la section Notes)

Voir aussi

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronously