Partager via


Gestion des sections mémoire

Un pilote peut créer un objet de section en appelant ZwCreateSection, qui retourne un handle à l’objet section. Utilisez le paramètre FileHandle pour spécifier le fichier de stockage, ou NULL si la section n’est pas sauvegardée par fichier. Des descripteurs supplémentaires pour l’objet section peuvent être ouverts à l’aide de ZwOpenSection.

Pour rendre les données qui appartiennent à un objet de section accessibles dans l’espace d’adressage du processus actuel, une vue de la section doit être mappée. Les pilotes peuvent mapper une vue d’une section dans l’espace d’adressage du processus actuel à l’aide de la routine ZwMapViewOfSection . Le paramètre SectionOffset spécifie le décalage d’octets où commence la vue dans la section, et viewSize spécifie le nombre d’octets à mapper.

Le paramètre Protect spécifie les opérations autorisées sur la vue. Spécifiez PAGE_READONLY pour un affichage en lecture seule, PAGE_READWRITE pour un affichage en lecture/écriture et PAGE_WRITECOPY pour un affichage de copie en écriture.

Aucune mémoire physique n’est allouée à une vue tant que la plage de mémoire virtuelle n’est pas accessible. Le premier accès de la plage de mémoire provoque une erreur de page ; le système alloue ensuite une page pour contenir cet emplacement de mémoire. Si la section est sauvegardée par un fichier, le système lit le contenu du fichier qui correspond à cette page et le copie en mémoire. (Notez que les objets de section et les vues inutilisés utilisent un pool paginé et non paginé à des fins de comptabilité.)

Une fois qu’un pilote n’utilise plus d’affichage, il le démasse en effectuant un appel à ZwUnmapViewOfSection. Une fois que le pilote n’utilise plus l’objet section, il ferme le handle de section avec ZwClose. Notez qu’une fois la vue mappée et qu’aucune autre vue ne sera mappée, il est possible d’appeler immédiatement ZwClose sur le handle de section ; la vue (et l’objet de section) continuent d’exister jusqu’à ce que la vue soit démachée. Il s’agit de la pratique recommandée, car elle réduit le risque que le pilote ne ferme pas la poignée.