Condividi tramite


Funzione MmProtectDriverSection (wdm.h)

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

Sintassi

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

Parametri

[in] AddressWithinSection

Puntatore a una sezione dati valida appartenente a un'immagine del driver. La sezione dati non deve essere già eseguibile, altrimenti 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ò comunque 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à sicura virtuale (VSM) è attualmente disabilitata in modo che la funzione non possa proteggere la sezione driver.
STATUS_INVALID_PARAMETER
È stata specificata una maschera di bit non valida (o una dimensione non zero).
STATUS_INVALID_PAGE_PROTECTION
La sezione del driver specificata da un indirizzo contenuto in esso viene mappata tramite una protezione non valida (le sezioni eseguibili non sono supportate)
STATUS_NOT_SUPPORTED
La sezione specificata appartiene a un driver che non è supportato da questa API (vedere Osservazioni).
STATUS_ACCESS_VIOLATION
La sezione specificata è eliminabile o contiene lacune, che non sono supportate da alcuna memoria fisica. Questo avviene in genere quando un allineamento di sezione è maggiore di una dimensione della pagina.
STATUS_ALREADY_COMMITTED
La sezione specificata è già stata protetta.

Commenti

La routine protegge la memoria fisica di backup della sezione del driver usando la tabella SLAT (traduzione degli indirizzi di secondo livello) gestita da VSM. La memoria protetta verrà resa di sola lettura per l'intero sistema operativo. 

Si noti che, dopo la protezione della sezione, non è possibile rimuovere la protezione. In base alla progettazione, l'unica eccezione di questa regola è quando il chiamante specifica il flag di MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD. In questo 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 eliminabile 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.

Requisiti

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