<Return[UV]><Top>

VirtualQueryEx

Declare Function Api_VirtualQueryEx& Lib "kernel32" Alias "VirtualQueryEx" (ByVal hProcess&, lpAddress As Any, lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength&)

Declare Function VirtualQueryEx Lib "kernel32" Alias "VirtualQueryEx" (ByVal hProcess As Long, lpAddress As Any, lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As Long) As Long

指定されたプロセスの仮想アドレス空間にある範囲のページに関する情報を取得する。

パラメータ
hProcess
    メモリ情報を問い合わせたいプロセスのハンドルを指定する。このハンドルは、PROCESS_QUERY_INFORMATION フラグをセットして開

    いたものでなければならない。このハンドルを使うとプロセスオブジェクトから情報が読み取れる。
lpAddress
    問い合わせたいページ領域のベースアドレスへのポインタを指定する。この値は、次のページ境界に切り下げられる。ホストコンピュータのペ

    ージサイズを調べるには、 関数を使う。
lpBuffer
    指定された範囲のページに関する情報を受け取る、 構造体へのポインタを指定する。
dwLength
    lpBuffer パラメータが指すバッファのサイズを、バイト単位で指定する。

戻り値
    情報バッファ内に返された実際のバイト数が返る。

解説
    VirtualQueryEx 関数は、指定されたアドレスから始まる連続ページのうち、次の属性が共通したページに関する情報を取得する。
    •ページの状態を取得する。状態はすべてのページで共通している。つまり、MEM_COMMIT、MEM_RESERVE、MEM_FREE、

      MEM_PRIVATE、MEM_MAPPED、MEM_IMAGE のうちの 1 つのフラグをセットして割り当てた、すべてのページが対象になる(最初

      の 3 つのフラグは MEMORY_BASIC_INFORMATION 構造体の State メンバ、後の 3 つのフラグは Type メンバ)。
    •最初のページが空き状態ではない場合、VirtualAllocEx 関数を 1 回呼び出すことによって予約された、最初の割り当ての一部である領

      域内のすべてのページが対象になる。
    •ページのアクセス権の状態を取得する。アクセス権の状態は、すべてのページで共通している。つまり、PAGE_READONLY、

      PAGE_READWRITE、PAGE_NOACCESS、PAGE_WRITECOPY、PAGE_EXECUTE、PAGE_EXECUTE_READ、

      PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY、PAGE_GUARD、PAGE_NOCACHE のうちの 1 つのアクセ

      ス権フラグをセットして割り当てられた、すべてのページが対象になる(MEMORY_BASIC_INFORMATION 構造体の AllocationProtect

      メンバ)。
    VirtualQueryEx 関数は領域内の最初のページの属性を調べる。そして、領域内のすべてのページを検索し終わるか、属性セットが一致

    しないページが見つかるまで、それ以降のページを検索し続ける。この関数は、最初のページ属性と、共通の属性を持つページ領域のバ

    イト単位のサイズを返す。たとえば、サイズが 40MB の空きメモリ領域が存在する場合、その領域の先頭から 10MB 進んだ場所にあるペ

    ージに対して VirtualQueryEx 関数を呼び出すと、MEM_FREE の状態と 30MB のサイズが取得できる。