Skip to content

Latest commit

 

History

History
17 lines (13 loc) · 1.11 KB

on-destroying-wmncdestroy.md

File metadata and controls

17 lines (13 loc) · 1.11 KB

On Destroying: WM_NCDESTROY

When the control is destroyed we free the memory we allocated and call a cleanup routine for any other business (if required). Note our _SB_Cleanup function in our WM_NCDESTROY message (shown below,) is called first whilst the memory for our variables/properties still exists - This is important in case we have to free any other resources, handles or objects that we have stored previously in our internal or external properties.

...
.ELSEIF eax == WM_NCDESTROY
    Invoke _SB_Cleanup, hWin ; cleanup any other stuff as required
    Invoke __FreeMemProperties, hWin, INTERNAL_PROPERTIES
    Invoke __FreeMemProperties, hWin, EXTERNAL_PROPERTIES
    mov eax, 0
    ret
...

Our internal helper function __FreeMemProperties used GetWindowLong to retrieve the appropriate pointer for the internal and external memory blocks used to store our variables and then frees that memory with calls to GlobalFree.