Partager via


Routines DispatchDeviceControl et DispatchInternalDeviceControl

Les routines de répartition d’un pilote (voir DRIVER_DISPATCH) gèrent les IRPs avec des codes de fonction d’E/S de IRP_MJ_DEVICE_CONTROL et d'IRP_MJ_INTERNAL_DEVICE_CONTROL, respectivement.

Pour chaque type commun d’appareil périphérique, le système définit un ensemble de codes de contrôle d’E/S pour les requêtes IRP_MJ_DEVICE_CONTROL . Les nouveaux pilotes pour chaque type d’appareil doivent prendre en charge ces demandes. Dans la plupart des cas, ces codes de contrôle d’E/S publics pour chaque type d’appareil ne sont pas exportés vers des applications en mode utilisateur.

Certains de ces codes de contrôle d’E/S définis par le système sont utilisés par des pilotes de niveau supérieur qui créent des irps pour le pilote de périphérique sous-jacent en appelant IoBuildDeviceIoControlRequest. D’autres composants Win32 permettent de communiquer avec un pilote de périphérique sous-jacent en appelant la fonction Win32 DeviceIoControl (décrite dans la documentation du Kit de développement logiciel (SDK) Microsoft Windows, qui appelle à son tour un service système. Le gestionnaire d’E/S configure un IRP et stocke le code de fonction principal IRP_MJ_DEVICE_CONTROL et le code de contrôle d’E/S donné dans la structure IO_STACK_LOCATION sur Parameters.DeviceIoControl.IoControlCode. Ensuite, le gestionnaire d’E/S appelle la routine DispatchDeviceControl du pilote de niveau le plus élevé dans la chaîne.

Pour certains pilotes fournis par le système conçus pour interagir avec et prendre en charge de nouveaux pilotes, le système d’exploitation définit également un ensemble de codes de contrôle d’E/S pour les requêtes IRP_MJ_INTERNAL_DEVICE_CONTROL . Dans la plupart des cas, ces codes de contrôle d’E/S publics permettent aux pilotes de niveau supérieur d’interagir avec un pilote de périphérique sous-jacent.

Par exemple, les pilotes parallèles fournis par le système prennent en charge un ensemble de codes de contrôle d’E/S internes que les pilotes fournis par le fournisseur envoient dans IRP_MJ_INTERNAL_DEVICE_CONTROL demandes. Pour plus d’informations, consultez le Guide de conception du pilote de périphérique parallèle.

Presque toutes les opérations demandées par le biais de codes de contrôle d’E/S définis par le système utilisent des E/S mises en mémoire tampon, car ce type de requête nécessite rarement le transfert de grandes quantités de données. Autrement dit, même les pilotes qui configurent leurs objets de dispositif pour l’E/S directe reçoivent des IRP pour les demandes de contrôle d’appareil avec des données à transférer dans ou hors de la mémoire tampon sur Irp-AssociatedIrp.SystemBuffer> (à l’exception de certains types de pilotes de périphérique de niveau supérieur avec des pilotes multimédias Win32 étroitement couplés).

En outre, un pilote peut définir un ensemble de codes de contrôle d’E/S privés que d’autres pilotes peuvent utiliser pour communiquer avec lui. Les nouveaux codes de contrôle d’E/S publics peuvent être ajoutés au système uniquement avec la coopération de Microsoft Corporation, car les codes de contrôle d’E/S publics sont intégrés au système d’exploitation lui-même.

Pour plus d’informations sur l’ensemble de codes de contrôle d’E/S publics que différents types de pilotes doivent prendre en charge et sur la définition des codes de contrôle d’E/S privés, consultez les sections de référence spécifiques à l’appareil du Kit de pilotes Windows (WDK).