Funzione VirtualQuery (memoryapi.h)
Recupera informazioni su un intervallo di pagine nello spazio indirizzi virtuale del processo chiamante.
Per recuperare informazioni su un intervallo di pagine nello spazio indirizzi di un altro processo, usare la funzione VirtualQueryEx .
Sintassi
SIZE_T VirtualQuery(
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
Parametri
[in, optional] lpAddress
Puntatore all'indirizzo di base dell'area di pagine su cui eseguire una query. Questo valore viene arrotondato per difetto al limite di pagina successivo. Per determinare le dimensioni di una pagina nel computer host, usare la funzione GetSystemInfo .
Se lpAddress specifica un indirizzo sopra l'indirizzo di memoria più alto accessibile al processo, la funzione ha esito negativo con ERROR_INVALID_PARAMETER.
[out] lpBuffer
Puntatore a una struttura MEMORY_BASIC_INFORMATION in cui vengono restituite informazioni sull'intervallo di pagine specificato.
[in] dwLength
Dimensioni del buffer a cui punta il parametro lpBuffer , in byte.
Valore restituito
Il valore restituito è il numero effettivo di byte restituiti nel buffer delle informazioni.
Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError. I possibili valori di errore includono ERROR_INVALID_PARAMETER.
Commenti
VirtualQuery fornisce informazioni su un'area di pagine consecutive che iniziano in corrispondenza di un indirizzo specificato che condividono gli attributi seguenti:
- Lo stato di tutte le pagine è lo stesso (MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED o MEM_IMAGE).
- Se la pagina iniziale non è gratuita, tutte le pagine nell'area fanno parte della stessa allocazione iniziale di pagine create da una singola chiamata a VirtualAlloc, MapViewOfFile o una delle seguenti versioni estese di queste funzioni: VirtualAllocEx, VirtualAllocExNuma, MapViewOfFileEx, MapViewOfFileExNuma.
- L'accesso concesso a tutte le pagine è lo stesso (PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD o PAGE_NOCACHE).
La funzione determina gli attributi della prima pagina nell'area e quindi analizza le pagine successive fino a quando non analizza l'intero intervallo di pagine o finché non rileva una pagina con un set di attributi non corrispondente. La funzione restituisce gli attributi e le dimensioni dell'area delle pagine con attributi corrispondenti, in byte. Ad esempio, se è presente un'area di 40 megabyte (MB) di memoria libera e VirtualQuery viene chiamata in una pagina di 10 MB nell'area, la funzione otterrà uno stato di MEM_FREE e una dimensione di 30 MB.
Se viene modificata una pagina di copia condivisa in scrittura, diventa privata del processo che ha modificato la pagina. Tuttavia, la funzione VirtualQuery continuerà a segnalare pagine come MEM_MAPPED (per le visualizzazioni dati) o MEM_IMAGE (per le visualizzazioni immagine eseguibili) anziché MEM_PRIVATE. Per rilevare se la copia in scrittura si è verificata per una pagina specifica, accedere alla pagina o bloccarla usando la funzione VirtualLock per assicurarsi che la pagina sia residente in memoria, quindi usare la funzione QueryWorkingSetEx per controllare il bit condiviso nelle informazioni sul working set esteso per la pagina. Se il bit condiviso è chiaro, la pagina è privata.
Questa funzione segnala un'area di pagine nella memoria del processo chiamante e la funzione VirtualQueryEx segnala un'area di pagine nella memoria di un processo specificato.
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 (include Windows.h, Memoryapi.h) |
Libreria | onecore.lib |
DLL | Kernel32.dll |