Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les codes de contrôle d’E/S (IOCTL) sont utilisés pour la communication entre les applications en mode utilisateur et les pilotes, ou pour la communication en interne entre les pilotes d’une pile. Les codes de contrôle d’E/S sont envoyés à l’aide d’IRPs.
Les applications en mode utilisateur envoient des IOCTLs aux pilotes en appelant DeviceIoControl, qui est décrit dans la documentation du Kit de développement logiciel (SDK) Microsoft Windows. Les appels à DeviceIoControl amènent le gestionnaire d’E/S à créer une requête IRP_MJ_DEVICE_CONTROL et à l’envoyer au pilote le plus haut.
En outre, les pilotes de niveau supérieur peuvent envoyer des IOCTL à des pilotes de niveau inférieur en créant et en envoyant des requêtes IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL . Les pilotes traitent ces requêtes dans les routines DispatchDeviceControl et DispatchInternalDeviceControl . (Les applications en mode utilisateur ne peuvent pas envoyer de requêtes IRP_MJ_INTERNAL_DEVICE_CONTROL .)
Certains IOCTL sont publics et certains sont privés. Les IOCTL publics sont généralement définis par le système et documentés par Microsoft, dans le Kit de pilotes Windows (WDK) ou le Kit de développement logiciel (SDK) Windows. Ils peuvent être envoyés avec les appels d’un composant en mode utilisateur à DeviceIoControl, ou ils peuvent être envoyés d’un pilote en mode noyau à un autre, à l’aide de IRP_MJ_DEVICE_CONTROL ou de requêtes IRP_MJ_INTERNAL_DEVICE_CONTROL .
Les IOCTL privés, d’autre part, sont destinés à être utilisés exclusivement par les composants logiciels d’un fournisseur pour communiquer entre eux. Les IOCTL privés sont généralement définis dans un fichier d’en-tête fourni par le fournisseur et ne sont pas documentés publiquement. Comme les IOCTL publics, ils peuvent être envoyés avec les appels d’un composant en mode utilisateur à DeviceIoControl, ou ils peuvent être envoyés d’un pilote en mode noyau à un autre, à l’aide de IRP_MJ_DEVICE_CONTROL ou de requêtes IRP_MJ_INTERNAL_DEVICE_CONTROL .
Il n’existe aucune différence entre le codage des IOCTL publics et privés. Toutefois, il existe des différences dans les codes internes qui peuvent être utilisés dans les IOCTL définis par le fournisseur, par rapport à ceux utilisés pour les IOCTL définis par le système. Si les IOCTL publics disponibles ne répondent pas à vos besoins, vous pouvez définir de nouveaux IOCTL privés que vos composants logiciels peuvent utiliser pour communiquer entre eux. Pour plus d’informations, consultez Définition des codes de contrôle d’E/S.