Partager via


MmProtectDriverSection, fonction (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 : utilisé pour spécifier que le pilote peut toujours être déchargé une fois la section protégée.

Valeur de retour

MmProtectDriverSection retourne une valeur NTSTATUS qui indique le résultat de l’opération :

Valeur de retour Description
STATUS_SUCCESS
L’opération a été correctement terminée et la section du pilote a été correctement protégée
STATUS_INVALID_DEVICE_STATE
Le mode sécurisé virtuel (VSM) est actuellement désactivé afin que la fonction ne puisse pas protéger la section du pilote.
STATUS_INVALID_PARAMETER
Un masque de bits d’indicateurs non valide (ou une taille différente de zéro) 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 pas sauvegardées par une mémoire physique. Cela se produit généralement lorsqu’un alignement de section est supérieur à une taille de 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 de sauvegarde de la section du pilote à l’aide de la table SLAT (traduction d’adresses de deuxième niveau) gérée par vsM. La mémoire protégée est rendue en lecture seule pour l’ensemble du système d’exploitation. 

Notez que, une fois la section protégée, il n’existe aucun moyen de supprimer la protection. Cela est par 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 de protéger une section ignorée ou une section qui contient l’IAT (Table d’adresses d’importation).

Notez que si l’appelant spécifie une adresse qui n’appartient à aucune image de pilote chargée, le système est bloqué avec la vérification de bogue MEMORY_MANAGEMENT (type 0x1100).

Les appelants de l’API MmProtectDriverSection doivent s’exécuter à l'<IRQL = APC_LEVEL.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows Insider 19548.
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