GetWriteWatch 関数 (memoryapi.h)
仮想メモリの領域に書き込まれるページのアドレスを取得します。
Itanium ベースのシステム上の 64 ビット Windows: ページ サイズの違いにより、 GetWriteWatch は 32 ビット アプリケーションではサポートされていません。
構文
UINT GetWriteWatch(
[in] DWORD dwFlags,
[in] PVOID lpBaseAddress,
[in] SIZE_T dwRegionSize,
[out] PVOID *lpAddresses,
[in, out] ULONG_PTR *lpdwCount,
[out] LPDWORD lpdwGranularity
);
パラメーター
[in] dwFlags
関数が書き込み追跡状態をリセットするかどうかを示します。
書き込み追跡状態をリセットするには、このパラメーターを WRITE_WATCH_FLAG_RESET に設定します。 このパラメーターが 0 (ゼロ) の場合、 GetWriteWatch は書き込み追跡状態をリセットしません。 詳細については、このトピックの「解説」セクションを参照してください。
[in] lpBaseAddress
書き込み追跡情報を取得するメモリ領域のベース アドレス。
このアドレスは、MEM_WRITE_WATCHを使用して VirtualAlloc 関数によって割り当てられるメモリ領域に存在する必要があります。
[in] dwRegionSize
書き込み追跡情報を取得するメモリ領域のサイズ (バイト単位)。
[out] lpAddresses
メモリ領域内のページ アドレスの配列を受け取るバッファーへのポインター。
アドレスは、リージョンが割り当てられたか、書き込み追跡状態がリセットされた後に書き込まれたページを示します。
[in, out] lpdwCount
入力時に、この変数は配列要素内の lpAddresses 配列のサイズを示します。
出力時に、変数は配列で返されるページ アドレスの数を受け取ります。
[out] lpdwGranularity
ページ サイズを受け取る変数へのポインター (バイト単位)。
戻り値
関数が成功した場合、戻り値は 0 (ゼロ) になります。
関数が失敗した場合、戻り値は 0 以外の値になります。
解説
VirtualAlloc 関数を呼び出してメモリを予約またはコミットする場合は、MEM_WRITE_WATCHを指定できます。 この値により、コミットされたメモリ領域に書き込まれたページがシステムによって追跡されます。 GetWriteWatch 関数を呼び出して、リージョンが割り当てられたか、書き込み追跡状態がリセットされた後に書き込まれたページのアドレスを取得できます。
書き込み追跡状態をリセットするには、dwFlags パラメーターにWRITE_WATCH_FLAG_RESET値を設定します。 または、 ResetWriteWatch 関数を呼び出して、書き込み追跡状態をリセットすることもできます。 ただし、 ResetWriteWatch を使用する場合は、 GetWriteWatch 呼び出しと ResetWriteWatch 呼び出しの間に、リージョンにスレッドが書き込まれないことを確認する必要があります。 それ以外の場合は、検出されない書き込みページが存在する可能性があります。
GetWriteWatch 関数は、プロファイラー、デバッグ ツール、またはガベージ コレクターに役立ちます。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | memoryapi.h (Windows.h、Memoryapi.h を含む) |
Library | onecore.lib |
[DLL] | Kernel32.dll |