<Return[G]><Top>

GetWriteWatch

Declare Function Api_GetWriteWatch& Lib "kernel32" Alias "GetWriteWatch" (ByVal dwFlags&, lpBaseAddress As Any, ByRef dwRegionSize&, lpAddresses As Any, ByRef lpdwCount&, ByRef lpdwGranularity&)

Declare Function GetWriteWatch Lib "kernel32" Alias "GetWriteWatch" (ByVal dwFlags As Long, lpBaseAddress As Any, ByRef dwRegionSize As Long, lpAddresses As Any, ByRef lpdwCount As Long, ByRef lpdwGranularity As Long) As Long

仮想メモリの領域に書き込まれたページのアドレスを取得する。

パラメータ
dwFlags
    書き込みトラッキング状態をリセットするかどうかを指定する。書き込みトラッキング状態をリセットするには、

    WRITE_WATCH_FLAG_RESET に設定する。0 を指定すると、書き込みトラッキング状態はリセットされない。
lpBaseAddress
    書き込みトラッキング情報を取得したい、メモリ領域のベースアドレスを指定する。このアドレスは、MEM_WRITE_WATCH フラグを指定し

    た VirtualAlloc 関数で確保したメモリ領域に含まれていなければならない。
dwRegionSize
    書き込みトラッキング情報の取得に使いたいメモリ領域のサイズを、バイト単位で指定する。
addresses
    メモリ領域内の複数のページアドレスからなる配列を受け取るバッファへのポインタを指定する。このアドレスは、領域を割り当てた後、また

    は書き込みトラッキング情報をリセットした後に、書き込みが行われたページを示す。
count
    DWORD 変数へのポインタを指定する。入力の際に、この変数は addresses 配列のサイズを配列要素数で示す。出力の際に、この変数

    はこの配列内に返されたページアドレスの数を受け取る。
granularity
    バイト単位のページサイズを受け取る変数へのポインタを指定する。

戻り値
    関数が成功すると、0 が返る。
    関数が失敗すると、0 以外の値が返る。

解説
    VirtualAlloc 関数を呼び出してメモリの確保またはコミットを行うときに、MEM_WRITE_WATCH フラグを指定することもできる。このフラグ

    を指定すると、既に書き込みが行われたコミット済みのメモリ領域内のページをシステムが追跡(トラッキング)するようになる。その後、

    GetWriteWatch 関数を呼び出して、領域が確保された後、または書き込みトラッキング状態がリセットされた後に書き込みが行われたペー

    ジのアドレスを取得できる。
    書き込みトラッキング状態をリセットするには、dwFlags パラメータ内で WRITE_WATCH_FLAG_RESET フラグをセットする。代わりに、

    ResetWriteWatch 関数を呼び出して書き込みトラッキング状態をリセットすることもできる。ただし ResetWriteWatch 関数を使う場合は、

    GetWriteWatch 関数と ResetWriteWatch 関数の呼び出しの間に、どのスレッドもその領域への書き込みを行っていないことを保証する必

    要がある。そうでなければ、書き込みが行われたページを検出できない可能性がある。
    GetWriteWatch 関数は、プロファイラ、デバッグツール、ガベージコレクションに役立つ。