Utilizzo delle pagine

Per determinare le dimensioni di una pagina nel computer corrente, utilizzare la funzione GetSystemInfo .

Le funzioni VirtualQuery e VirtualQueryEx restituiscono informazioni su un'area di pagine consecutive a partire da un indirizzo specificato nello spazio indirizzi di un processo. VirtualQuery restituisce informazioni sulla memoria nel processo chiamante. VirtualQueryEx restituisce informazioni sulla memoria in un processo specificato e viene usato per supportare i debugger che necessitano di informazioni su un processo di cui viene eseguito il debug. L'area delle pagine è delimitata dall'indirizzo specificato arrotondato per difetto al limite di pagina più vicino. Si estende attraverso tutte le pagine successive con gli attributi seguenti in comune:

  • Lo stato di tutte le pagine è lo stesso: commit, riservato o gratuito.
  • Se la pagina iniziale non è gratuita, tutte le pagine nell'area fanno parte della stessa allocazione iniziale di pagine riservate da una chiamata a VirtualAlloc.
  • La protezione dell'accesso di tutte le pagine è la stessa (ovvero , PAGE_READONLY, PAGE_READWRITE o PAGE_NOACCESS).

La funzione VirtualLock consente a un processo di bloccare una o più pagine di memoria di cui è stato eseguito il commit in memoria fisica (RAM), impedendo al sistema di scambiare le pagine nel file di paging. Può essere usato per garantire che i dati critici siano accessibili senza accesso al disco. Il blocco delle pagine in memoria è pericoloso perché limita la capacità del sistema di gestire la memoria. Un uso eccessivo di VirtualLock può ridurre le prestazioni del sistema causando lo scambio del codice eseguibile nel file di paging. La funzione VirtualUnlock sblocca la memoria bloccata da VirtualLock.

La funzione VirtualProtect consente a un processo di modificare la protezione di accesso di qualsiasi pagina di cui è stato eseguito il commit nello spazio degli indirizzi di un processo. Ad esempio, un processo può allocare pagine di lettura/scrittura per archiviare i dati sensibili e quindi può modificare l'accesso in sola lettura o nessun accesso per proteggersi dalla sovrascrittura accidentale. VirtualProtect viene in genere usato con le pagine allocate da VirtualAlloc, ma funziona anche con le pagine di cui è stato eseguito il commit da qualsiasi altra funzione di allocazione. VirtualProtect modifica tuttavia la protezione di intere pagine e i puntatori restituiti dalle altre funzioni non sono necessariamente allineati ai limiti della pagina. La funzione VirtualProtectEx è simile a VirtualProtect, ad eccezione della modifica della protezione della memoria in un processo specificato. La modifica della protezione è utile per i debugger nell'accesso alla memoria di un processo di cui viene eseguito il debug.