Condividi tramite


Funzione MmProtectDriverSection (wdm.h)

Il MmProtectDriverSection protegge una sezione di un driver caricato usando i servizi forniti dalla modalità di protezione virtuale (VSM).

Sintassi

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

Parametri

[in] AddressWithinSection

Puntatore a una sezione di dati valida appartenente a un'immagine del driver. La sezione dati non deve essere già eseguibile. In caso contrario, l'API avrà esito negativo con STATUS_INVALID_PAGE_PROTECTION.

[in] Size

Questo parametro è attualmente riservato per l'utilizzo futuro e deve essere impostato su 0.

[in] Flags

Specificare i flag che controllano l'operazione: MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD - Usato per specificare che il driver può ancora essere scaricato dopo la protezione della sezione.

Valore restituito

MmProtectDriverSection restituisce un valore NTSTATUS che indica il risultato dell'operazione:

Valore restituito Descrizione
STATUS_SUCCESS
L'operazione è stata completata correttamente e la sezione driver è stata protetta correttamente
STATUS_INVALID_DEVICE_STATE
La modalità di protezione virtuale (VSM) è attualmente disabilitata in modo che la funzione non possa proteggere la sezione driver.
STATUS_INVALID_PARAMETER
È stata specificata una maschera di bit di flag non valida (o una dimensione diversa da zero).
STATUS_INVALID_PAGE_PROTECTION
La sezione del driver specificata da un indirizzo contenuto in viene mappata tramite una protezione non valida (le sezioni eseguibili non sono supportate)
STATUS_NOT_SUPPORTED
La sezione specificata appartiene a un driver non supportato da questa API (vedere la sezione Note).
STATUS_ACCESS_VIOLATION
La sezione specificata è eliminabile o contiene spazi vuoti, che non sono supportati da alcuna memoria fisica. Ciò si verifica in genere quando l'allineamento di una sezione è maggiore di una dimensione della pagina.
STATUS_ALREADY_COMMITTED
La sezione specificata è già stata protetta.

Osservazioni

La routine protegge la memoria fisica che supporta la sezione del driver usando la tabella SLAT (conversione degli indirizzi di secondo livello) gestita dal vsm. La memoria protetta verrà resa di sola lettura per l'intero sistema operativo. 

Si noti che, dopo che la sezione è stata protetta, non è possibile rimuovere la protezione. Si tratta di una situazione predefinita: l'unica eccezione di questa regola è quando il chiamante specifica il flag MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD. In tal caso, quando il driver di destinazione viene scaricato, la sezione protetta viene rilasciata e liberata.

I driver mappati con pagine di grandi dimensioni e driver di sessione non sono supportati dall'API MmProtectDriverSection. Inoltre, i chiamanti di questa API non possono richiedere di proteggere una sezione scartabile o una sezione che contiene l'IAT (Importa tabella indirizzi).

Si noti che se il chiamante specifica un indirizzo che non appartiene a un'immagine del driver caricata, il sistema verrà arrestato in modo anomalo con il controllo di bug MEMORY_MANAGEMENT (tipo 0x1100).

I chiamanti dell'API MmProtectDriverSection devono essere eseguiti in IRQL <= APC_LEVEL.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile a partire da Windows Insider 19548.
piattaforma di destinazione Universale
intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL <= APC_LEVEL