VirtualQueryEx 関数 (memoryapi.h)
指定したプロセスの仮想アドレス空間内のページの範囲に関する情報を取得します。
構文
SIZE_T VirtualQueryEx(
[in] HANDLE hProcess,
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
パラメーター
[in] hProcess
メモリ情報が照会されるプロセスのハンドル。 ハンドルは、 PROCESS_QUERY_INFORMATION アクセス権を使用して開かれている必要があります。これにより、ハンドルを使用してプロセス オブジェクトから情報を読み取ります。 詳細については、「 セキュリティとアクセス権の処理」を参照してください。
[in, optional] lpAddress
クエリを実行するページの領域のベース アドレスへのポインター。 この値は、次のページ境界に切り捨てられます。 ホスト コンピューター上のページのサイズを確認するには、 GetSystemInfo 関数を使用します。
lpAddress で、プロセスからアクセスできる最大メモリ アドレスより上のアドレスが指定されている場合、関数はERROR_INVALID_PARAMETERで失敗します。
[out] lpBuffer
指定したページ範囲に関する情報が返される MEMORY_BASIC_INFORMATION 構造体へのポインター。
[in] dwLength
lpBuffer パラメーターが指すバッファーのサイズ (バイト単位)。
戻り値
戻り値は、情報バッファーで返される実際のバイト数です。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 考えられるエラー値には 、ERROR_INVALID_PARAMETERが含まれます。
解説
VirtualQueryEx は、次の属性を共有する、指定したアドレスから始まる連続するページの領域に関する情報を提供します。
- すべてのページの状態は同じです (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)。
書き込み時の共有コピー ページが変更された場合、そのページは、そのページを変更したプロセスに対してプライベートになります。 ただし、 VirtualQueryEx 関数は、MEM_PRIVATEではなく 、MEM_MAPPED (データ ビューの場合) や MEM_IMAGE (実行可能イメージ ビューの場合) などのページ を引き続き報告します。 特定のページに対して書き込み時のコピーが発生したかどうかを検出するには、ページにアクセスするか、VirtualLock 関数を使用してページをロックしてページがメモリ内にあることを確認してから、QueryWorkingSet または QueryWorkingSetEx 関数を使用して、ページの拡張ワーキング セット情報の Shared ビットをチェックします。 共有ビットが明確な場合、ページはプライベートになります。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | memoryapi.h (Windows.h、Memoryapi.h を含む) |
Library | onecore.lib |
[DLL] | Kernel32.dll |