MmProtectDriverSection-Funktion (wdm.h)

Der schreibgeschützte MmProtectDriverSection schützt einen Abschnitt eines geladenen Treibers mithilfe der Dienste, die vom virtual Secure Mode (VSM) bereitgestellt werden.

Syntax

NTSTATUS MmProtectDriverSection(
  [in] PVOID  AddressWithinSection,
  [in] SIZE_T Size,
  [in] ULONG  Flags
);

Parameter

[in] AddressWithinSection

Ein Zeiger auf einen gültigen Datenabschnitt, der zu einem Treiberimage gehört. Der Datenabschnitt sollte nicht bereits ausführbar sein. Andernfalls schlägt die API mit STATUS_INVALID_PAGE_PROTECTION fehl.

[in] Size

Dieser Parameter ist derzeit für die zukünftige Verwendung reserviert und sollte auf 0 festgelegt werden.

[in] Flags

Geben Sie die Flags an, die den Vorgang steuern: MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD – Wird verwendet, um anzugeben, dass der Treiber nach dem Schutz des Abschnitts weiterhin entladen werden kann.

Rückgabewert

MmProtectDriverSection gibt einen NTSTATUS-Wert zurück, der das Ergebnis des Vorgangs angibt:

Rückgabewert BESCHREIBUNG
STATUS_SUCCESS
Der Vorgang wurde erfolgreich abgeschlossen, und der Treiberabschnitt wurde erfolgreich geschützt.
STATUS_INVALID_DEVICE_STATE
Der virtuelle sichere Modus (Virtual Secure Mode, VSM) ist derzeit deaktiviert, sodass die Funktion den Treiberabschnitt nicht schützen kann.
STATUS_INVALID_PARAMETER
Es wurde eine ungültige Flag-Bitmaske (oder eine Nicht-Null-Größe) angegeben.
STATUS_INVALID_PAGE_PROTECTION
Der Abschnitt des Treibers, der durch eine darin enthaltene Adresse angegeben wird, wird durch einen ungültigen Schutz zugeordnet (ausführbare Abschnitte werden nicht unterstützt).
STATUS_NOT_SUPPORTED
Der angegebene Abschnitt gehört zu einem Treiber, der von dieser API nicht unterstützt wird (siehe Hinweise).
STATUS_ACCESS_VIOLATION
Der angegebene Abschnitt kann verworfen werden oder enthält Lücken, die nicht durch physischen Arbeitsspeicher unterstützt werden. Dies geschieht in der Regel, wenn eine Abschnittsausrichtung größer als eine Seitengröße ist.
STATUS_ALREADY_COMMITTED
Der angegebene Abschnitt wurde bereits geschützt.

Hinweise

Die Routine schützt den physischen Arbeitsspeicher, der den Abschnitt des Treibers unterstützt, mithilfe der SLAT-Tabelle (Adressübersetzung der zweiten Ebene), die vom VSM verwaltet wird. Der geschützte Arbeitsspeicher wird für das gesamte Betriebssystem schreibgeschützt. 

Beachten Sie, dass es nach dem Schutz des Abschnitts keine Möglichkeit gibt, den Schutz zu entfernen. Dies ist beabsichtigt: Die einzige Ausnahme dieser Regel ist, wenn der Aufrufer das flag MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD angibt. In diesem Fall wird der geschützte Abschnitt freigegeben und freigegeben, wenn der Zieltreiber entladen wird.

Treiber, die großen Seiten und Sitzungstreibern zugeordnet sind, werden von der MmProtectDriverSection-API nicht unterstützt. Darüber hinaus können Aufrufer dieser API nicht anfordern, einen verwerfbaren Abschnitt oder einen Abschnitt zu schützen, der die IAT (Import Address Table) enthält.

Wenn der Aufrufer eine Adresse angibt, die nicht zu einem geladenen Treiberimage gehört, wird das System mit der MEMORY_MANAGEMENT-Fehlerüberprüfung abgestürzt (Typ 0x1100).

Aufrufer der MmProtectDriverSection-API sollten unter IRQL <= APC_LEVEL ausgeführt werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows Insider 19548.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL