Partager via


IRP_MJ_DEVICE_CONTROL

Chaque pilote dont les objets d’appareil appartiennent à un type d’appareil particulier (voir Spécification de types d’appareils) est requis pour prendre en charge cette demande dans une routine DispatchDeviceControl , si un ensemble de codes de contrôle d’E/S définis par le système (IOCTL) existe pour le type. Pour plus d’informations sur les IOCTL, consultez Présentation des codes de contrôle d’E/S.

Les pilotes de niveau supérieur transmettent généralement ces requêtes à un pilote de périphérique sous-jacent. Chaque pilote de périphérique d’une pile de pilotes est supposé prendre en charge cette demande, ainsi qu’un ensemble de listes IOCTL publiques ou privées spécifiques au type d’appareil. Pour plus d’informations sur les IOCTL pour des types d’appareils spécifiques, consultez la documentation spécifique au type d’appareil dans le Kit de pilotes Microsoft Windows (WDK).

Date d’envoi

Chaque fois après la réussite d’une demande de création.

Paramètres d’entrée

Le code de contrôle E/S se trouve dans Parameters.DeviceIoControl.IoControlCode dans l’emplacement de la pile d’E/S du pilote de l’IRP.

Les autres paramètres d’entrée dépendent de la valeur du code de contrôle d’E/S. Pour plus d’informations, consultez Description de la mémoire tampon pour les codes de contrôle d’E/S.

Paramètres de sortie

Les paramètres de sortie dépendent de la valeur du code de contrôle d’E/S. Pour plus d’informations, consultez Description de la mémoire tampon pour les codes de contrôle d’E/S.

Opération

Un pilote reçoit ce code de contrôle d’E/S, car le thread en mode utilisateur a appelé la fonction Microsoft Win32 DeviceIoControl , ou un pilote en mode noyau de niveau supérieur a configuré la demande. Il est possible qu’un pilote en mode utilisateur ait appelé DeviceIoControl, en transmettant un code de contrôle d’E/S défini par le pilote (également appelé privé), pour demander une prise en charge spécifique au périphérique ou au pilote à un pilote étroitement couplé, en mode noyau.

À la réception d’une demande de contrôle d’E/S d’appareil, un pilote de niveau supérieur transmet généralement l’IRP au pilote inférieur suivant. Toutefois, il existe quelques exceptions à cette pratique. Par exemple, un pilote de classe qui dispose d’informations de configuration stockées obtenues à partir du pilote de port sous-jacent peut effectuer certaines demandes IOCTL_XXX sans passer l’IRP au pilote de port correspondant.

À la réception d’une demande de contrôle d’E/S d’appareil, un pilote de périphérique examine le code de contrôle d’E/S pour déterminer comment répondre à la demande. Pour la plupart des codes de contrôle d’E/S publics, les pilotes de périphérique transfèrent une petite quantité de données vers ou depuis la mémoire tampon sur Irp-AssociatedIrp.SystemBuffer>.

Pour obtenir des informations générales sur les codes de contrôle d’E/S pour les demandes IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL , consultez Utilisation de codes de contrôle d’E/S. Voir aussi Demandes d’E/S d’appareil Type-Specific.

Spécifications

En-tête

Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h)

Voir aussi

DispatchDeviceControl