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_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)。

関数は、領域内の最初のページの属性を決定し、ページの範囲全体をスキャンするか、一致しない属性のセットを持つページが検出されるまで、後続のページをスキャンします。 関数は、属性と、一致する属性を持つページの領域のサイズをバイト単位で返します。 たとえば、空きメモリの領域が 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

関連項目

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFile

メモリ管理関数

仮想メモリ関数

VirtualQueryEx

VBS エンクレーブで使用できる Vertdll API