<Return[PQ]><Top>

QueryWorkingSet

Declare Function Api_QueryServiceStatusEx& Lib "advapi32" Alias "QueryServiceStatusEx" (ByVal hService&, ByVal InfoLevel As Struct_MembersOf_SC_STATUS_TYPE, ByVal lpBuffer$, ByVal cbBufSize&, ByRef pcbBytesNeeded&)

Declare Function QueryServiceStatusEx Lib "advapi32" Alias "QueryServiceStatusEx" (ByVal hService As Long, ByVal InfoLevel As Struct_MembersOf_SC_STATUS_TYPE, ByVal lpBuffer As String, ByVal cbBufSize As Long, ByRef pcbBytesNeeded As Long) As Long

指定されたプロセスのワーキングセットに、現在追加されているページに関する情報を取得する。

パラメータ
hProcess
    プロセスのハンドルを指定する。
pv
    情報を受け取るバッファへのポインタを指定する。
cb
    バッファのサイズをバイト単位で指定する。

戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、 関数を使う。

解説
    リターンバッファは、任意の数の DWORD 値を保持する。最初の DWORD は、バッファ内でその後ろに続く有効な DWORD 値の数を保

    持する。残りの各 DWORD は、プロセスのワーキングセット内の 1 ページを表し、1 つのアドレスとさまざまなフラグの値によって構成されて

    いる。
    これらの DWORD 値をデコードするには、上位 20 ビットと下位 12 ビットを分離する必要がある。上位 20 ビット(0xFFFFF000 とのビットご

    との AND を実行して求める)は、指定されたプロセスにロードされたメモリページのアドレスを保持している。下位 12 ビットはフラグの値で、

    次のように解釈できる。

    値                 

意味                                                                                                                  

    0x001

このページは読み取り専用である( ビット 0x004 がセットされていない場合)。

    0x002

このページは実行可能( コード)である。

    0x004

このページは読み書き可能である( ビット 0x001 がセットされていない場合)。

    0x005

このページは書き込み時コピーである( ビット 0x001 と 0x004 の両方がセットされた状態)。

    0x100

このページは複数のプロセス間で共有可能である。

    たとえば、次の DWORD 値について考えてみると。
    0x00000003
    0x00400103
    0x00480101
    0x00500004
    ビット単位に分解すると、これらの DWORD 値は次のように解釈できる。

    0x00000003

この後に 3 つの DWORD 値が続く。

    0x00400103

0x00400000 アドレスのページは、読み取り専用、実行可能、共有アクセス可能である。

    0x00480101

0x00480000 アドレスのページは、読み取り専用、共有アクセス可能である。

    0x00500004

0x00500000 アドレスのページは、読み書きアクセス可能である。

    Windows NT/Windows 2000 Alpha:上位 19 ビットと下位 13 ビットを分離します。x86 コンピュータのページサイズは 4KB であるが、

    Alpha コンピュータのページサイズが 8KB であるためである。