Funzione VirtualProtectFromApp (memoryapi.h)

Modifica la protezione in un'area di pagine di cui è stato eseguito il commit nello spazio degli indirizzi virtuali del processo chiamante.

Sintassi

BOOL VirtualProtectFromApp(
  [in]  PVOID  Address,
  [in]  SIZE_T Size,
  [in]  ULONG  NewProtection,
  [out] PULONG OldProtection
);

Parametri

[in] Address

Puntatore a un indirizzo che descrive la pagina iniziale 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, VirtualAllocFromApp o VirtualAllocEx usando MEM_RESERVE. Le pagine non possono estendersi su aree riservate adiacenti allocate da chiamate separate a VirtualAlloc, VirtualAllocFromApp o VirtualAllocEx tramite MEM_RESERVE.

[in] Size

Dimensione dell'area i cui attributi di protezione di accesso devono essere modificati, in byte. L'area delle pagine interessate include tutte le pagine contenenti uno o più byte nell'intervallo compreso tra il parametro Address e (Address+Size). Ciò significa che un intervallo di 2 byte che si allontana da un limite di pagina fa sì che gli attributi di protezione di entrambe le pagine vengano modificati.

[in] NewProtection

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

Per le visualizzazioni mappate, questo valore deve essere compatibile con la protezione di accesso specificata al momento del mapping della visualizzazione(vedere MapViewOfFile, MapViewOfFileEx e MapViewOfFileExNuma).

Le costanti seguenti generano un errore:

  • PAGE_EXECUTE_READWRITE
  • PAGE_EXECUTE_WRITECOPY
Le costanti seguenti sono consentite solo per le app con la funzionalità codeGeneration :
  • PAGE_EXECUTE
  • PAGE_EXECUTE_READ

[out] OldProtection

Puntatore a una variabile che riceve il valore di protezione dell'accesso precedente della prima pagina nell'area di pagine specificata. 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

Puoi chiamare VirtualProtectFromApp dalle app di Windows Store con funzionalità JIT (Just-In-Time) per usare la funzionalità JIT. L'app deve includere la funzionalità codeGeneration nel file manifesto dell'app per usare le funzionalità JIT.

È possibile impostare il valore di protezione di accesso solo nelle pagine di cui è stato eseguito il commit. Se lo stato di una 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 mono colpo. Per altre informazioni, vedere Creating Guard Pages (Creazione di guard page).

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

VirtualProtectFromApp consente di contrassegnare le pagine come eseguibili, ma non consente di impostare le autorizzazioni di scrittura ed esecuzione contemporaneamente.

Quando si protegge un'area eseguibile, il programma chiamante è responsabile della coerenza della cache tramite una chiamata appropriata a FlushInstructionCache dopo che il codice è stato impostato. In caso contrario, i tentativi di eseguire codice dall'area appena eseguibile possono produrre risultati imprevedibili.

Requisiti

Requisito Valore
Client minimo supportato Windows 10 [app desktop | App UWP]
Server minimo supportato Windows Server 2016 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione memoryapi.h (include Windows.h)
Libreria WindowsApp.lib
DLL Kernel32.dll

Vedere anche

Funzioni di gestione della memoria

Funzioni di memoria virtuale

VirtualAllocFromApp

VirtualProtect

VirtualProtectEx