Condividi tramite


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).
La funzione VirtualQueryEx 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 VirtualQueryEx 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 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

Vedere anche

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFileEx

Funzioni di gestione della memoria

Funzioni di memoria virtuale

VirtualAllocEx

VirtualProtectEx