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
STATUS_SUCCESS
L’opération s’est terminée avec succès et la section du pilote a été protégée avec succès
STATUS_INVALID_DEVICE_STATE
Le mode VSM (Virtual Secure Mode) est actuellement désactivé, de sorte que la fonction ne peut pas protéger la section du pilote.
STATUS_INVALID_PARAMETER
Un masque de bits d’indicateur non valide (ou une taille non nulle) a été spécifié.
STATUS_INVALID_PAGE_PROTECTION
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)
STATUS_NOT_SUPPORTED
La section spécifiée appartient à un pilote qui n’est pas pris en charge par cette API (voir Remarques).
STATUS_ACCESS_VIOLATION
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.
STATUS_ALREADY_COMMITTED
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