Fonction MmProtectDriverSection (wdm.h)
Le MmProtectDriverSection en lecture seule protège une section d’un pilote chargé à l’aide des services fournis par le mode sécurisé virtuel (VSM).
Syntaxe
NTSTATUS MmProtectDriverSection(
[in] PVOID AddressWithinSection,
[in] SIZE_T Size,
[in] ULONG Flags
);
Paramètres
[in] AddressWithinSection
Pointeur vers une section de données valide appartenant à une image de pilote. La section données ne doit pas être déjà exécutable, sinon l’API échoue avec STATUS_INVALID_PAGE_PROTECTION.
[in] Size
Ce paramètre est actuellement réservé à une utilisation future et doit être défini sur 0.
[in] Flags
Spécifiez les indicateurs qui contrôlent l’opération : MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD : permet de spécifier que le pilote peut toujours être déchargé après la protection de la section.
Valeur retournée
MmProtectDriverSection retourne une valeur NTSTATUS qui indique le résultat de l’opération :
Valeur retournée | Description |
---|---|
|
L’opération s’est terminée avec succès et la section du pilote a été protégée avec succès |
|
Le mode VSM (Virtual Secure Mode) est actuellement désactivé, de sorte que la fonction ne peut pas protéger la section du pilote. |
|
Un masque de bits d’indicateur non valide (ou une taille non nulle) a été spécifié. |
|
La section du pilote spécifiée par une adresse contenue dans celle-ci est mappée via une protection non valide (les sections exécutables ne sont pas prises en charge) |
|
La section spécifiée appartient à un pilote qui n’est pas pris en charge par cette API (voir Remarques). |
|
La section spécifiée est ignorée ou contient des lacunes, qui ne sont soutenues par aucune mémoire physique. Cela se produit généralement lorsqu’un alignement de section est supérieur à la taille d’une page. |
|
La section spécifiée a déjà été protégée. |
Remarques
La routine protège la mémoire physique qui sauvegarde la section du pilote à l’aide de la table SLAT (traduction d’adresses de deuxième niveau) gérée par le VSM. La mémoire protégée est en lecture seule pour l’ensemble du système d’exploitation.
Notez qu’une fois la section protégée, il n’existe aucun moyen de supprimer la protection. Cela est dû à la conception : la seule exception de cette règle est lorsque l’appelant spécifie l’indicateur MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD. Dans ce cas, lorsque le pilote cible est déchargé, la section protégée est libérée et libérée.
Les pilotes mappés avec des pages volumineuses et des pilotes de session ne sont pas pris en charge par l’API MmProtectDriverSection . En outre, les appelants de cette API ne peuvent pas demander à protéger une section ignorée ou une section qui contient l’IAT (Import Address Table).
Notez que si l’appelant spécifie une adresse qui n’appartient à aucune image de pilote chargée, le système se bloque avec le MEMORY_MANAGEMENT boguecheck (type 0x1100).
Les appelants de l’API MmProtectDriverSection doivent s’exécuter à IRQL <= APC_LEVEL.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows Insider 19548. |
Plateforme cible | Universal |
En-tête | wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |