> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XMemSetWin32HeapTrackingHooks

> XMemSetWin32HeapTrackingHooks

# XMemSetWin32HeapTrackingHooks

設定 Win32 堆積之記憶體配置、重新配置和解除配置的追蹤回呼函式。

<a id="syntaxSection" />

## 語法

```cpp theme={null}
VOID XMemSetWin32HeapTrackingHooks(  
         PHEAP_TRACK_ALLOC_ROUTINE AllocRoutine,  
         PHEAP_TRACK_REALLOC_ROUTINE ReAllocRoutine,  
         PHEAP_TRACK_FREE_ROUTINE FreeRoutine  
)  
```

<a id="parametersSection" />

### 參數

*AllocRoutine*   \_In\_\
類型：[PHEAP\_TRACK\_ALLOC\_ROUTINE](/zh-TW/reference/system/xmem/functions/pheap_track_alloc_routine)

記憶體配置之追蹤回呼函式的指標。

*ReAllocRoutine*   \_In\_\
類型：[PHEAP\_TRACK\_REALLOC\_ROUTINE](/zh-TW/reference/system/xmem/functions/pheap_track_realloc_routine)

記憶體重新配置之追蹤回呼函式的指標。

*FreeRoutine*   \_In\_\
類型：[PHEAP\_TRACK\_FREE\_ROUTINE](/zh-TW/reference/system/xmem/functions/pheap_track_free_routine)

記憶體解除配置之追蹤回呼函式的指標。

<a id="retvalSection" />

### 傳回值

類型：VOID

無。

<a id="remarksSection" />

## 備註

此函式可讓您追蹤 Win32 堆積記憶體的配置、重新配置和解除配置，方法是指定回呼函式，在呼叫這些堆積記憶體作業時由 GDK 記憶體管理員叫用。如需追蹤記憶體作業的詳細資訊，請參閱[診斷與記憶體追蹤](/zh-TW/build/console-features/memory/system-memory-diagnostics)。

<Note>CRT 會在初始化期間以及與 CRT 連結之 DLL/EXE 的進入點進行數次堆積配置。由於此初始化是執行這些模組內任何程式碼的先決條件，因此通常無法在*所有*堆積配置發生之前呼叫 XMemSetWin32HeapTrackingHooks。回呼程式碼應留意此行為並適當處理。</Note>

呼叫此函式之前，您必須先實作下列對應的追蹤回呼函式：

* 若要在叫用 `HeapAlloc` 時追蹤配置，請實作 [PHEAP\_TRACK\_ALLOC\_ROUTINE 回呼](/zh-TW/reference/system/xmem/functions/pheap_track_alloc_routine)函式。
* 若要在叫用 `HeapReAlloc` 時追蹤重新配置，請實作 [PHEAP\_TRACK\_REALLOC\_ROUTINE 回呼](/zh-TW/reference/system/xmem/functions/pheap_track_realloc_routine)函式。
* 若要在叫用 `HeapFree` 時追蹤解除配置，請實作 [PHEAP\_TRACK\_FREE\_ROUTINE 回呼](/zh-TW/reference/system/xmem/functions/pheap_track_free_routine)函式。

您只需要實作追蹤需求所需的追蹤回呼函式。若要停止追蹤堆積記憶體作業，請呼叫此函式，並為您要停止追蹤的對應堆積記憶體作業指定 `NULL`。

下列範例會定義追蹤回呼函式，然後使用 `XMemSetWin32HeapTrackingHooks` 函式來設定和清除這些追蹤回呼函式的攔截。

```cpp theme={null}
void OnHeapAlloc(HANDLE hHeap, DWORD flags, SIZE_T size, PVOID addr)
{
    DebugPrint("[Heap 0x%p] Alloc %I64d bytes at addr: %p\n",
               hHeap, size, addr);
}

void OnHeapRealloc(HANDLE hHeap, DWORD flags, SIZE_T size, PVOID oldAddr, PVOID newAddr)
{
    DebugPrint("[Heap 0x%p] ReAlloc addr: 0x%p to %I64d bytes (new addr: 0x%p)\n",
               hHeap, oldAddr, size, newAddr);
}

void OnHeapFree(HANDLE hHeap, DWORD flags, PVOID addr)
{
    DebugPrint("[Heap 0x%p] Free addr: 0x%p\n",
               hHeap, addr);
}

// Set Hooks
XMemSetWin32HeapTrackingHooks(OnHeapAlloc, OnHeapReAlloc, OnHeapFree);

// Clear Hooks
XMemSetWin32HeapTrackingHooks(NULL, NULL, NULL);
```

<a id="requirementsSection" />

## 需求

**標頭：** xmem.h

**程式庫：** xmem.lib

**支援的平台：** XBOX One 系列主機和 XBOX Series 主機

<a id="seealsoSection" />

## 另請參閱

[記憶體](/zh-TW/build/console-features/memory/system-memory-overview)\
[XMem](/zh-TW/reference/system/xmem/xmem_members)


## Related topics

- [XMemSetWin32HeapTrackingHooks](/reference/system/xmem/functions/xmemsetwin32heaptrackinghooks.md)
- [PHEAP_TRACK_ALLOC_ROUTINE callback](/reference/system/xmem/functions/pheap_track_alloc_routine.md)
- [PHEAP_TRACK_REALLOC_ROUTINE callback](/reference/system/xmem/functions/pheap_track_realloc_routine.md)
- [PHEAP_TRACK_FREE_ROUTINE callback](/reference/system/xmem/functions/pheap_track_free_routine.md)
