Funzione VirtualProtectEx (memoryapi.h)

Modifica la protezione in un'area di pagine di commit nello spazio indirizzi virtuale di un processo specificato.

Sintassi

BOOL VirtualProtectEx(
  [in]  HANDLE hProcess,
  [in]  LPVOID lpAddress,
  [in]  SIZE_T dwSize,
  [in]  DWORD  flNewProtect,
  [out] PDWORD lpflOldProtect
);

Parametri

[in] hProcess

Handle per il processo la cui protezione della memoria deve essere modificata. L'handle deve avere il diritto di accesso PROCESS_VM_OPERATION . Per altre informazioni, vedere Elaborare diritti di sicurezza e accesso.

[in] lpAddress

Puntatore all'indirizzo di base dell'area delle pagine i cui attributi di protezione di accesso devono essere modificati.

Tutte le pagine nell'area specificata devono trovarsi nella stessa area riservata allocata quando si chiama la funzione VirtualAlloc o VirtualAllocEx usando MEM_RESERVE. Le pagine non possono estendersi tra aree riservate adiacenti allocate da chiamate separate a VirtualAlloc o VirtualAllocEx usando MEM_RESERVE.

[in] dwSize

Dimensioni dell'area i cui attributi di protezione di accesso vengono modificati, in byte. L'area delle pagine interessate include tutte le pagine contenenti uno o più byte nell'intervallo dal parametro lpAddress a (lpAddress+dwSize). Ciò significa che un intervallo di 2 byte che stradding un limite di pagina causa la modifica degli attributi di protezione di entrambe le pagine.

[in] flNewProtect

Opzione di protezione della memoria. Questo parametro può essere una delle costanti di protezione della memoria.

Per le viste mappate, questo valore deve essere compatibile con la protezione di accesso specificata quando la visualizzazione è stata mappata (vedere MapViewOfFile, MapViewOfFileEx e MapViewOfFileExNuma).

[out] lpflOldProtect

Puntatore a una variabile che riceve la protezione di accesso precedente della prima pagina nell'area specificata delle pagine. Se questo parametro è NULL o non punta a una variabile valida, la funzione ha esito negativo.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Il valore di protezione di accesso può essere impostato solo nelle pagine di commit. Se lo stato di qualsiasi pagina nell'area specificata non viene eseguito il commit, la funzione ha esito negativo e restituisce senza modificare la protezione di accesso di qualsiasi pagina nell'area specificata.

Il modificatore di protezione PAGE_GUARD stabilisce le pagine di protezione. Le pagine guard fungono da allarmi di accesso a un colpo. Per altre informazioni, vedere Creating Guard Pages (Creazione di guard page).

È consigliabile evitare di usare VirtualProtectEx per modificare le protezioni delle pagine nei blocchi di memoria allocati da GlobalAlloc, HeapAlloc o LocalAlloc, perché più blocchi di memoria possono esistere in una singola pagina. Il gestore heap presuppone che tutte le pagine dell'heap concedono almeno l'accesso in lettura e scrittura.

Quando si protegge un'area eseguibile, il programma chiamante ha la responsabilità di garantire la coherency della cache tramite una chiamata appropriata a FlushInstructionCache dopo aver impostato il codice. In caso contrario, i tentativi di esecuzione del codice dall'area appena eseguibile possono produrre risultati imprevedibili.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione memoryapi.h (includono Windows.h, Memoryapi.h)
Libreria onecore.lib
DLL Kernel32.dll

Vedere anche

Funzioni di gestione della memoria

Costanti di protezione della memoria

Funzioni di memoria virtuale

Virtualalloc

VirtualProtect

VirtualQueryEx