Quand le code et les données doivent-ils être paginables ?
Vous pouvez rendre tout ou partie de votre pilote paginable. Le code du pilote de pagination peut réduire la taille de l’image de charge du pilote, libérant ainsi de l’espace système pour d’autres utilisations. Il est plus pratique pour les pilotes d’appareils utilisés de façon sporadique, tels que les modems et les CD-ROM, ou pour certaines parties de pilotes rarement appelées.
Le code de pilote qui effectue l’une des opérations suivantes doit être résident en mémoire. Autrement dit, ce code doit se trouver soit dans une section non paginée, soit dans une section paginée qui est verrouillée en mémoire lors de l’exécution du code.
S’exécute à la valeur IRQL = DISPATCH_LEVEL.
Acquiert des verrous de rotation.
Appelle les routines de prise en charge des objets du noyau, telles que KeReleaseMutex ou KeReleaseSemaphore, dans lesquelles le paramètre Wait est défini sur TRUE. Si le noyau est appelé avec wait défini sur TRUE, l’appel est retourné avec IRQL à DISPATCH_LEVEL.
Le code du pilote doit s’exécuter au niveau de l’IRQL < DISPATCH_LEVEL lorsque le code fait quelque chose qui peut provoquer une erreur de page. Le code peut provoquer une erreur de page s’il effectue l’une des opérations suivantes :
Accède au pool paginé qui n’est pas verrouillé en mémoire.
Appelle une routine paginable.
Accède aux mémoires tampons utilisateur déverrouillées dans le contexte du thread utilisateur.
En règle générale, vous devez rendre une section paginée si la quantité totale de tout le code paginable (ou de données) est d’au moins 4 kilo-octets (Ko). Dans la mesure du possible, vous devez isoler le code (ou les données) paginables dans une section distincte du code (ou des données) qui peuvent parfois être paginables, mais qui doivent parfois être verrouillés. Par exemple, la combinaison d’un code paginable purement paginable et d’un code verrouillé à la demande entraîne le verrouillage de plus d’espace système pour la section combinée que nécessaire. Toutefois, si un pilote a moins de 4 Ko de code (ou de données éventuellement paginables), vous pouvez combiner ce code (ou les données) avec du code à la demande verrouillé (ou des données) dans une section, ce qui permet d’économiser de l’espace système.