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_COMMITMEM_RESERVEMEM_FREEMEM_PRIVATEMEM_MAPPEDまたはMEM_IMAGE)。
  • 初期ページが無料でない場合、リージョン内のすべてのページは、VirtualAlloc、MapViewOfFile、またはこれらの関数のいずれかの拡張バージョン (VirtualAllocExVirtualAllocExNumaMapViewOfFileExMapViewOfFileEx、MapViewOfFileExNuma) の 1 回の呼び出しによって作成されたページの同じ初期割り当ての一部です。
  • すべてのページに付与されるアクセスは同じです (PAGE_READONLYPAGE_READWRITEPAGE_NOACCESSPAGE_WRITECOPYPAGE_EXECUTEPAGE_EXECUTE_READPAGE_EXECUTE_READWRITEPAGE_EXECUTE_WRITECOPY、PAGE_GUARD、またはPAGE_NOCACHE)。
VirtualQueryEx 関数は、リージョン内の最初のページの属性を決定し、ページの範囲全体をスキャンするか、一致しない属性のセットを持つページが検出されるまで、後続のページをスキャンします。 関数は、属性と、一致する属性を持つページの領域のサイズをバイト単位で返します。 たとえば、空きメモリの領域が 40 MB で、領域に 10 MB のページで VirtualQueryEx が呼び出された場合、関数は MEM_FREE の状態と 30 MB のサイズを取得します。

書き込み時の共有コピー ページが変更された場合、そのページは、そのページを変更したプロセスに対してプライベートになります。 ただし、 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

関連項目

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFileEx

メモリ管理関数

仮想メモリ関数

VirtualAllocEx

VirtualProtectEx