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