Routine de déchargement du pilote PnP
Un pilote PnP doit avoir une routine de déchargement qui supprime toutes les ressources spécifiques au pilote, telles que la mémoire, les threads et les événements, qui sont créées par la routine DriverEntry . S’il n’y a pas de ressources spécifiques au pilote à supprimer, le pilote doit toujours avoir une routine de déchargement , mais il peut simplement retourner.
La routine de déchargement d’un pilote peut être appelée à tout moment une fois que tous les périphériques du pilote ont été supprimés. Le gestionnaire PnP appelle la routine de déchargement d’un pilote dans le contexte d’un thread système à IRQL = PASSIVE_LEVEL.
Les pilotes PnP libèrent des ressources et des objets d’appareil spécifiques à l’appareil en réponse à la suppression des IIP de périphérique PnP. Le gestionnaire PnP envoie ces IIP au nom de chaque appareil PnP qu’il énumère, ainsi que de tous les appareils hérités énumérés à la racine qu’un pilote signale à l’aide d’IoReportDetectedDevice.
Par conséquent, les routines de déchargement des pilotes PnP sont généralement simples, souvent constituées uniquement d’une instruction de retour . Toutefois, si le pilote a alloué des ressources à l’échelle du pilote dans sa routine DriverEntry , il doit libérer ces ressources dans sa routine de déchargement , sauf s’il l’a déjà fait. En général, le processus de déchargement d’un pilote PnP est une opération synchrone.
Le gestionnaire d’E/S libère l’objet pilote et toute extension d’objet de pilote allouée par le pilote à l’aide d’IoAllocateDriverObjectExtension.