GetWriteWatch 函数 (memoryapi.h)

检索写入虚拟内存区域中的页面的地址。

基于 Itanium 的系统上的 64 位 Windows: 由于页面大小不同,32 位应用程序不支持 GetWriteWatch

语法

UINT GetWriteWatch(
  [in]      DWORD     dwFlags,
  [in]      PVOID     lpBaseAddress,
  [in]      SIZE_T    dwRegionSize,
  [out]     PVOID     *lpAddresses,
  [in, out] ULONG_PTR *lpdwCount,
  [out]     LPDWORD   lpdwGranularity
);

parameters

[in] dwFlags

指示函数是否重置写入跟踪状态。

若要重置写入跟踪状态,请将此参数设置为 WRITE_WATCH_FLAG_RESET。 如果此参数为 0 (零) , 则 GetWriteWatch 不会重置写入跟踪状态。 有关详细信息,请参阅本主题的“备注”部分。

[in] lpBaseAddress

要检索其写入跟踪信息的内存区域的基址。

此地址必须位于 VirtualAlloc 函数使用 MEM_WRITE_WATCH 分配的内存区域中。

[in] dwRegionSize

要检索其写入跟踪信息的内存区域的大小(以字节为单位)。

[out] lpAddresses

指向缓冲区的指针,该缓冲区接收内存区域中的页地址数组。

地址指示自分配区域或已重置写入跟踪状态以来已写入的页面。

[in, out] lpdwCount

输入时,此变量指示数组元素中的 lpAddresses 数组的大小。

在输出时,变量接收数组中返回的页地址数。

[out] lpdwGranularity

指向接收页面大小的变量(以字节为单位)的指针。

返回值

如果函数成功,则返回值为 0 (零) 。

如果函数失败,则返回值为非零值。

注解

调用 VirtualAlloc 函数以保留或提交内存时,可以指定 MEM_WRITE_WATCH。 此值会导致系统跟踪在提交的内存区域中写入到的页面。 可以调用 GetWriteWatch 函数来检索自已分配区域或重置写入跟踪状态以来已写入的页面的地址。

若要重置写入跟踪状态,请在 dwFlags 参数中设置WRITE_WATCH_FLAG_RESET值。 或者,可以调用 ResetWriteWatch 函数来重置写入跟踪状态。 但是,如果使用 ResetWriteWatch,必须确保 在 GetWriteWatchResetWriteWatch 调用之间的间隔内没有线程写入区域。 否则,可能会有未检测到的已写入页面。

GetWriteWatch 函数可用于探查器、调试工具或垃圾回收器。

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 memoryapi.h (包括 Windows.h、Memoryapi.h)
Library onecore.lib
DLL Kernel32.dll

另请参阅

内存管理函数

ResetWriteWatch

VirtualAlloc