Share via


Instructions pour l’écriture de routines AddDevice

Tenez compte des instructions de conception suivantes lors de l’écriture d’une routine AddDevice :

  • Si un pilote de filtre détermine que sa routine AddDevice a été appelée pour un appareil qu’il n’a pas besoin de traiter, le pilote de filtre doit retourner STATUS_SUCCESS pour permettre le chargement du reste de la pile d’appareils pour l’appareil. Le pilote de filtre ne crée pas d’objet d’appareil et ne l’attache pas à la pile d’appareils ; le pilote de filtre retourne simplement la réussite et permet d’ajouter le reste des pilotes à la pile.

  • Un pilote doit fournir un stockage, généralement dans l’extension d’appareil d’un objet d’appareil, pour tous les objets définis par le noyau et les verrous de rotation exécutifs qu’il utilise. Un pilote doit également fournir un stockage pour les pointeurs vers certains objets obtenus à partir du gestionnaire d’E/S ou d’autres composants système.

    Vous pouvez décider d’allouer de la mémoire système supplémentaire pour les besoins du pilote, par exemple pour les mémoires tampons d’E/S à long terme ou une liste de recherche. Si c’est le cas, une routine AddDevice peut appeler les routines suivantes :

    ExAllocatePoolWithTag pour la mémoire d’espace système paginée ou non paginée

    ExInitializePagedLookasideList ou ExInitializeNPagedLookasideList pour initialiser une liste de recherche paginée ou non paginée

  • Si le pilote a un thread dédié à l’appareil ou attend sur des objets de répartiteur définis par le noyau, la routine AddDevice peut initialiser des objets de répartiteur de noyau.

  • Si le pilote utilise des verrous de rotation exécutifs ou fournit le stockage pour un verrou de rotation d’interruption, la routine AddDevice peut initialiser ces verrous de rotation. Pour plus d’informations, consultez Verrous de rotation.

  • Renforcer la sécurité d’ouverture de fichier lors de l’appel d’IoCreateDevice.

    Spécifiez la caractéristique FILE_DEVICE_SECURE_OPEN sur l’appel à IoCreateDevice. Cette caractéristique est prise en charge sur Windows NT 4.0 SP5 et versions ultérieures. Il indique au gestionnaire d’E/S d’effectuer des vérifications de sécurité sur l’objet d’appareil pour toutes les demandes ouvertes. Les fournisseurs doivent spécifier cette caractéristique lors des appels à IoCreateDevice si la caractéristique FILE_DEVICE_SECURE_OPEN n’est pas définie dans l’INF du programme d’installation de classe de l’appareil ou dans l’inf inf de l’appareil et si les pilotes n’effectuent pas leurs propres vérifications de sécurité lors de l’ouverture. (Pour plus d’informations, consultez Contrôle de l’accès à l’espace de noms d’appareil.)

    Si un pilote définit la FILE_DEVICE_SECURE_OPEN caractéristique lorsqu’il appelle IoCreateDevice, le gestionnaire d’E/S applique le descripteur de sécurité de l’objet d’appareil à n’importe quelle ouverture relative ou à l’ouverture d’un nom de fichier de fin. Par exemple, si FILE_DEVICE_SECURE_OPEN est défini pour \Device\foo et si \Device\foo peut uniquement être ouvert par l’administrateur, \Device\foo\abc peut également être ouvert par l’administrateur. Toutefois, le gestionnaire d’E/S empêche un utilisateur normal d’ouvrir \Device\foo et \Device\foo\abc.

    Si un pilote pour un appareil définit cette caractéristique, le gestionnaire PnP le propage à tous les objets d’appareil pour l’appareil.

Important

Les DDIS ExAllocatePool abordés dans cette rubrique ont été dépréciés dans Windows 10 version 2004 et ont été remplacés par ExAllocatePool2 et ExAllocatePool3. Pour plus d’informations, consultez Mise à jour d’appels ExAllocatePool dépréciés vers ExAllocatePool2 et ExAllocatePool3.