Partager via


Création d’un objet Device

Un pilote monolithique doit créer un objet d’appareil pour chaque appareil physique, logique ou virtuel pour lequel il gère les demandes d’E/S. Un pilote qui ne crée pas d’objet d’appareil pour un appareil ne reçoit pas d’IRPs pour l’appareil.

Dans certains domaines technologiques, un minidriver associé à un pilote de classe ou à un pilote de port n’a pas besoin de créer ses propres objets d’appareil. Au lieu de cela, le pilote de classe ou de port crée l’objet de périphérique et reçoit tous les IRP pour l’appareil. Le pilote de classe ou de port utilise ensuite une méthode spécifique au pilote pour transmettre la demande d’E/S au minidriver. Consultez la documentation relative à votre domaine technologique particulier pour déterminer si Microsoft fournit un pilote de classe ou de port qui crée des objets d’appareil pour le compte de votre pilote.

Les pilotes appellent IoCreateDevice ou IoCreateDeviceSecure pour créer leurs objets d’appareil. Pour plus d’informations sur la routine à utiliser, consultez les sections suivantes.

Création d’objets d’appareil pour les pilotes de fonction et de filtre WDM

Création d’objets d’appareil pour les pilotes de bus WDM

Création d’objets d’appareil pour les pilotes non WDM

Lorsque le pilote crée un objet d’appareil, il fournit les informations suivantes à IoCreateDevice ou IoCreateDeviceSecure :

  • Taille de l’extension d’appareil de l’appareil. L’extension d’appareil est une zone de stockage allouée par le système que le pilote peut utiliser pour le stockage spécifique à l’appareil. Pour plus d’informations, consultez Extensions d’appareil.

  • Constante définie par le système, indiquant le DeviceType représenté par l’objet d’appareil. Pour plus d’informations, consultez Spécification de types d’appareils.

  • Une ou plusieurs constantes ORed définies par le système qui indiquent les caractéristiques de l’appareil. Pour plus d’informations, consultez Spécification des caractéristiques de l’appareil.

  • Valeur booléenne, nommée Exclusive, qui spécifie si un bit dans les indicateurs de l’objet d’appareil doit être défini avec DO_EXCLUSIVE, indiquant que le pilote dessert un appareil exclusif, tel qu’un périphérique vidéo, série, parallèle ou audio. Les pilotes WDM doivent définir Exclusive sur FALSE. Pour plus d’informations, consultez Spécification de l’accès exclusif aux objets d’appareil.

  • Pointeur vers l’objet pilote pour le pilote. Une fonction WDM ou un pilote de filtre reçoit un pointeur vers son objet pilote en tant que paramètre vers sa routine AddDevice . Tous les pilotes reçoivent un pointeur vers leur objet pilote dans leur routine DriverEntry . Le système utilise ce pointeur pour associer le pilote à son objet de périphérique.

  • Pointeur facultatif vers une chaîne Unicode terminée par null (DeviceName) nommant l’appareil. Les pilotes WDM, autres que les pilotes de bus, ne fournissent pas de nom d’appareil ; cette opération contourne les fonctionnalités de sécurité du gestionnaire PnP. Pour plus d’informations, consultez Objets d’appareil nommés.

Si l’appel à IoCreateDevice ou IoCreateDeviceSecure réussit, le gestionnaire d’E/S fournit un stockage pour l’objet d’appareil lui-même et pour toutes les autres structures de données associées à l’objet d’appareil, y compris l’extension de l’appareil, qu’il initialise avec des zéros.

Création d’objets d’appareil pour les pilotes de fonction et de filtre WDM

Les pilotes WDM, autres que les pilotes de bus, appellent IoCreateDevice pour créer leurs objets d’appareil. La plupart des pilotes WDM créent leurs objets d’appareil à partir de leurs routines AddDevice . Certains pilotes, tels que les pilotes de disque qui doivent répondre aux IOCTL de disposition de lecteur, appellent IoCreateDevice à partir d’une routine de répartition.

À moins que les sections spécifiques au type d’appareil de la documentation du Kit de pilotes Windows (WDK) ne l’indiquent, votre pilote doit créer ses objets d’appareil dans sa routine AddDevice . Pour plus d’informations, consultez Écriture d’une routine AddDevice.

Création d’objets d’appareil pour les pilotes de bus WDM

Un pilote de bus WDM crée une AOP lorsqu’il énumére un nouvel appareil en réponse à une demande de IRP_MN_QUERY_DEVICE_RELATIONS , si le type de relation est BusRelations.

Les règles suivantes déterminent si un pilote de bus appelle IoCreateDevice ou IoCreateDeviceSecure pour créer un objet d’appareil :

  • Si un appareil peut être utilisé en mode brut, il doit appeler IoCreateDeviceSecure.

  • Si l’appareil n’est pas compatible en mode brut, le pilote de bus peut utiliser IoCreateDevice ou IoCreateDeviceSecure. IoCreateDevice peut être utilisé lorsque la sécurité système par défaut pour les appareils sur le bus est adéquate ; IoCreateDeviceSecure peut être utilisé pour spécifier un descripteur de sécurité plus strict. Pour plus d’informations, consultez Contrôle de l’accès aux appareils.

Création d’objets d’appareil pour les pilotes non WDM

Un pilote non WDM utilise IoCreateDevice pour créer des objets d’appareil sans nom, et IoCreateDeviceSecure pour créer des objets d’appareil nommés. Notez que les objets d’appareil sans nom d’un pilote non WDM ne sont pas accessibles à partir du mode utilisateur. Le pilote doit généralement créer au moins un objet nommé.