Freigeben über


MmProtectDriverSection-Funktion (wdm.h)

Die MmProtectDriverSection schreibgeschützt schützt einen Abschnitt eines geladenen Treibers mithilfe der vom virtuellen sicheren Modus (Virtual Secure Mode, VSM) bereitgestellten Dienste.

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 zurzeit 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 noch 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 Kennzeichnungsbitmaske (oder eine Nicht-Null-Größe) angegeben.
STATUS_INVALID_PAGE_PROTECTION
Der durch eine darin enthaltene Adresse angegebene Treiberabschnitt 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 ist verworfen oder enthält Lücken, die von keinem physischen Speicher 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.

Bemerkungen

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

Beachten Sie, dass nach dem Schutz des Abschnitts keine Möglichkeit zum Entfernen des Schutzes besteht. Dies ist beabsichtigt: Die einzige Ausnahme dieser Regel ist, wenn der Aufrufer das MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD Flag angibt. Wenn der Zieltreiber entladen wird, wird in diesem Fall der geschützte Abschnitt freigegeben und freigegeben.

Treiber, die mit 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 verworfenen Abschnitt oder einen Abschnitt zu schützen, der das 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 Fehlerprüfung abgestürzt (Typ 0x1100).

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows Insider 19548.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL