VirtualQuery 関数 (memoryapi.h)
呼び出し元プロセスの仮想アドレス空間内のページの範囲に関する情報を取得します。
別のプロセスのアドレス空間内のページ範囲に関する情報を取得するには、 VirtualQueryEx 関数を使用します。
構文
SIZE_T VirtualQuery(
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
パラメーター
[in, optional] lpAddress
クエリを実行するページの領域のベース アドレスへのポインター。 この値は、次のページ境界に切り捨てられます。 ホスト コンピューター上のページのサイズを確認するには、 GetSystemInfo 関数を使用します。
lpAddress で、プロセスからアクセスできる最大メモリ アドレスより上のアドレスが指定されている場合、関数はERROR_INVALID_PARAMETERで失敗します。
[out] lpBuffer
指定したページ範囲に関する情報が返される MEMORY_BASIC_INFORMATION 構造体へのポインター。
[in] dwLength
lpBuffer パラメーターが指すバッファーのサイズ (バイト単位)。
戻り値
戻り値は、情報バッファーで返される実際のバイト数です。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 考えられるエラー値には 、ERROR_INVALID_PARAMETERが含まれます。
注釈
VirtualQuery は、次の属性を共有する、指定したアドレスから始まる連続するページの領域に関する情報を提供します。
- すべてのページの状態は同じです (MEM_COMMIT、 MEM_RESERVE、 MEM_FREE、 MEM_PRIVATE、 MEM_MAPPED、 またはMEM_IMAGE)。
- 初期ページが無料でない場合、リージョン内のすべてのページは、VirtualAlloc、MapViewOfFile、またはこれらの関数のいずれかの拡張バージョン (VirtualAllocEx、VirtualAllocExNuma、MapViewOfFileEx、MapViewOfFileEx、MapViewOfFileExNuma) の 1 回の呼び出しによって作成されたページの同じ初期割り当ての一部です。
- すべてのページに付与されるアクセスは同じです (PAGE_READONLY、PAGE_READWRITE、PAGE_NOACCESS、PAGE_WRITECOPY、PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY、PAGE_GUARD、またはPAGE_NOCACHE)。
関数は、領域内の最初のページの属性を決定し、ページの範囲全体をスキャンするか、一致しない属性のセットを持つページが検出されるまで、後続のページをスキャンします。 関数は、属性と、一致する属性を持つページの領域のサイズをバイト単位で返します。 たとえば、空きメモリの領域が 40 MB で、領域に 10 MB のページで VirtualQuery が呼び出された場合、関数は MEM_FREE の状態と 30 MB のサイズを取得します。
書き込み時の共有コピー ページが変更された場合、そのページは、そのページを変更したプロセスに対してプライベートになります。 ただし、VirtualQuery 関数は、MEM_PRIVATEではなく、MEM_MAPPED (データ ビューの場合) やMEM_IMAGE (実行可能イメージ ビューの場合) などのページを引き続き報告します。 特定のページに対して書き込み時のコピーが発生したかどうかを検出するには、ページにアクセスするか、VirtualLock 関数を使用してページをロックしてページがメモリ内にあることを確認してから、QueryWorkingSetEx 関数を使用して、ページの拡張ワーキング セット情報の共有ビットをチェックします。 共有ビットが明確な場合、ページはプライベートになります。
この関数は、呼び出し元プロセスのメモリ内のページの領域を報告し、 VirtualQueryEx 関数は、指定されたプロセスのメモリ内のページの領域を報告します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | memoryapi.h (Windows.h、Memoryapi.h を含む) |
Library | onecore.lib |
[DLL] | Kernel32.dll |