MmLockPagableDataSection, fonction (wdm.h)
La routine MmLockPagableDataSection verrouille une section entière des données du 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 de retour
MmLockPagableDataSection retourne une valeur opaque qui identifie la section. Cette valeur doit être transmise par la suite à MmLockPagableSectionByHandle ou à MmUnlockPagableImageSection.
Remarques
Les pilotes peuvent utiliser cette routine, MmLockPagableSectionByHandleet MmUnlockPagableImageSection pour rendre leurs données privées généralement verrouillées en mémoire.
Les données peuvent être verrouillées si :
Les données sont généralement accessibles à <= 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 peu fréquentes et prévisibles.
Par exemple, les pilotes pour les appareils de mélangeur utilisent des sections de données paginables. Étant donné que le pilote utilise suffisamment de données pour créer une section de données paginables et que le pilote 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 le rendre disponible en page lorsque cela n’est pas nécessaire.
Un seul appel à MmLockPagableDataSection provoque le verrouillage de la section entière, contenant les données référencées, dans l’espace système.
Il s’agit d’une opération coûteuse pour 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 verrou suivantes en appelant MmLockPagableSectionByHandle, en passant le handle retourné par MmLockPagableDataSection. Le verrouillage par un 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 conserve un nombre de références sur la section. Une section de données paginables est disponible uniquement pour être paginée 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’elle verrouille une section pour s’assurer qu’une telle section sera disponible pour ê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é pour MmLockPagableSectionByHandle, le nombre est défini sur un, et si la section a été paginée, elle sera 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 PAGE doit être capitalisé.
Notez qu’il existe également un #pragma data_seg(« INIT ») utilisé pour rendre les données ignorées après l’initialisation du système. À l’exception de l’utilisation de INIT plutôt que de 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 un.
Pour plus d’informations sur la pagination des données, consultez Rendre les pilotes paginables.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows 2000. |
plateforme cible | Universel |
d’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) |