Fonction MmLockPagableDataSection (wdm.h)
La routine MmLockPagableDataSection verrouille une section entière des données de pilote dans l’espace système.
Syntaxe
PVOID MmLockPagableDataSection(
[in] PVOID AddressWithinSection
);
Paramètres
[in] AddressWithinSection
Spécifie l’adresse symbolique d’un élément de données dans la section paginable.
Valeur retournée
MmLockPagableDataSection retourne une valeur opaque qui identifie la section. Cette valeur doit être passée par la suite à MmLockPagableSectionByHandle ou à MmUnlockPagableImageSection.
Remarques
Les pilotes peuvent utiliser cette routine, MmLockPagableSectionByHandle et MmUnlockPagableImageSection pour rendre leurs données privées généralement paginables verrouillées en mémoire.
Les données peuvent être verrouillées si :
Les données sont généralement accessibles à <l’adresse = APC_LEVEL, mais il peut être nécessaire d’y accéder à des niveaux IRQL plus élevés pendant de courtes périodes.
Le pilote utilise les données de manière peu fréquente et prévisible.
Par exemple, les pilotes pour les appareils mixer utilisent des sections de données paginables. Étant donné que le pilote utilise suffisamment de données pour rendre utile la création d’une section de données paginables et qu’il sait quand les données sont nécessaires, ce pilote utilise MmLockPagableDataSection, MmLockPagableSectionByHandle et MmUnlockPagableImageSection pour placer une section de données dans l’espace système si nécessaire et la rendre disponible pour être paginée lorsque ce n’est pas nécessaire.
Un seul appel à MmLockPagableDataSection entraîne le verrouillage de la section entière, contenant les données référencées, dans l’espace système.
Il est coûteux de verrouiller une section. Si une section de données paginables est verrouillée à plusieurs endroits par un pilote, utilisez MmLockPagableDataSection pour la première requête. Effectuez les demandes de verrouillage suivantes en appelant MmLockPagableSectionByHandle, en passant le handle retourné par MmLockPagableDataSection. Le verrouillage par handle améliore considérablement les performances du pilote. Une section verrouillée est déverrouillée en appelant MmUnlockPagableImageSection.
Le gestionnaire de mémoire gère un nombre de références sur la section . Une section de données paginables n’est disponible pour être paginée que lorsque le nombre de références est égal à zéro. Chaque demande de verrouillage incrémente le nombre ; chaque demande de déverrouillage décrémente le nombre. Un pilote doit déverrouiller une section autant de fois qu’il verrouille une section pour s’assurer qu’une telle section peut être paginée lorsque la section n’est pas nécessaire. Un handle est toujours valide, quel que soit le nombre. Si le nombre sur un handle est égal à zéro et qu’un appel est effectué à MmLockPagableSectionByHandle, le nombre est défini sur un, et si la section a été paginée, elle est paginée.
Les données d’une section de données paginables sont marquées par une directive du compilateur. Pour créer une section de données paginables, utilisez #pragma data_seg (« PAGE ») au début du module de données et #pragma data_seg () à la fin du module. Le mot clé PAGE respecte la casse, c’est-à-dire que PAGE doit être en majuscules.
Notez qu’il existe également un #pragma data_seg(« INIT ») qui est utilisé pour rendre les données ignorées après l’initialisation du système. À l’exception de l’utilisation d’INIT plutôt que page, la syntaxe est la même. Toutefois, le résultat n’est pas ; l’utilisation de la directive PAGE rend la section de données paginable. Lorsque la directive INIT est utilisée, les données de la section sont ignorées dès que le pilote revient de sa routine d’entrée de pilote ou de sa routine de réinitialisation si le pilote en a une.
Pour plus d’informations sur la pagination des données, consultez Rendre les pilotes paginables.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 2000. |
Plateforme cible | Universal |
En-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=APC_LEVEL |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm) |