Share via


Code paginable et ignoré dans un pilote de protocole

Les développeurs de pilotes doivent désigner le code comme paginable dans la mesure du possible, ce qui libère de l’espace système pour le code qui doit résider en mémoire. Vous pouvez marquer des fonctions comme paginables avec la macro NDIS_PAGEABLE_FUNCTION . L’IRQL, les fonctionnalités de gestion des ressources et d’autres caractéristiques d’une fonction peuvent empêcher la fonction d’être paginable.

Chaque fonction ProtocolXxx s’exécute sur un IRQL dans la plage de PASSIVE_LEVEL à DISPATCH_LEVEL. Les fonctions qui s’exécutent exclusivement sur IRQL = PASSIVE_LEVEL doivent être marquées comme paginables.

Une fonction de pilote qui s’exécute sur IRQL = PASSIVE_LEVEL peut être rendue paginable tant qu’elle n’appelle ni n’est appelée par une fonction qui s’exécute sur IRQL >= DISPATCH_LEVEL, par exemple une fonction qui acquiert un verrou de rotation. L’acquisition d’un verrou de rotation entraîne la levée de l’IRQL du thread d’acquisition pour DISPATCH_LEVEL. Une fonction de pilote, telle que ProtocolBindAdapterEx, qui s’exécute à IRQL = PASSIVE_LEVEL ne doit pas appeler les fonctions NdisXxx qui s’exécutent sur IRQL >= DISPATCH_LEVEL si cette fonction de pilote est marquée comme code paginable. Pour plus d’informations sur l’IRQL pour chaque fonction NdisXxx , consultez Fonctions de bibliothèque NDIS.

La fonction DriverEntry des pilotes de protocole NDIS, ainsi que le code appelé uniquement à partir de DriverEntry, doivent être spécifiés en tant que code d’initialisation uniquement, à l’aide de la macro NDIS_INIT_FUNCTION . Le code identifié avec cette macro est supposé s’exécuter une seule fois au moment de l’initialisation du système et, par conséquent, n’est mappé qu’au cours de cette période. Une fois qu’une fonction marquée comme initialisation uniquement est retournée, elle est ignorée.