EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL fonction de rappel (wdfio.h)
[S’applique à KMDF et UMDF]
La fonction de rappel d’événement EvtIoDeviceControl d’un pilote traite une demande de contrôle d’E/S de périphérique spécifiée.
Syntaxe
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;
void EvtWdfIoQueueIoDeviceControl(
[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
Code de contrôle d’E/S défini par le pilote ou défini par le système (IOCTL) associé à la requête.
Valeur de retour
None
Remarques
Un pilote inscrit une fonction de rappel EvtIoDeviceControl lorsqu’il appelle 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 EvtIoDeviceControl 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 (IRP_MJ_DEVICE_CONTROL) de la file d’attente. Pour plus d’informations, consultez Gestionnaires de demandes.
La fonction de rappel EvtIoDeviceControl doit traiter chaque demande d’E/S reçue d’une certaine manière. Pour plus d’informations, consultez Traitement des demandes d’E/S.
Les pilotes reçoivent des demandes de contrôle d’E/S lorsqu’une application utilisateur appelle DeviceIoControl (décrit dans Microsoft Windows SDK documentation) ou lorsqu’un autre pilote crée une requête en appelant WdfIoTargetSendIoctlSynchronously ou WdfIoTargetFormatRequestForIoctl.
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 d’appareil 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 EvtIoDeviceControl 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 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 EvtIoDeviceControl d’un pilote ne doit pas appeler les méthodes d’objet file d’attente suivantes :
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) |