Funzione VirtualQueryEx (memoryapi.h)
Recupera informazioni su un intervallo di pagine all'interno dello spazio indirizzi virtuale di un processo specificato.
Sintassi
SIZE_T VirtualQueryEx(
[in] HANDLE hProcess,
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
Parametri
[in] hProcess
Handle per il processo di cui viene eseguita una query sulle informazioni sulla memoria. L'handle deve essere stato aperto con il diritto di accesso PROCESS_QUERY_INFORMATION , che consente di utilizzare l'handle per leggere le informazioni dall'oggetto processo. Per altre informazioni, vedere Sicurezza dei processi e diritti di accesso.
[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
VirtualQueryEx 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).
Se viene modificata una pagina di copia condivisa in scrittura, diventa privata del processo che ha modificato la pagina. Tuttavia, la funzione VirtualQueryEx 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 QueryWorkingSet o QueryWorkingSetEx per controllare il bit condiviso nelle informazioni sul working set esteso per la pagina. Se il bit condiviso è chiaro, la pagina è privata.
Requisiti
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 |