I think what youre doing in that snippet is legal, but why not reuse the same DataPack and close the handle if iWitches == 0? (and remove TIMER_DATA_HNDL_CLOSE)
Forgot about that, so your code makes sense. AFAIK, TIMER_DATA_HNDL_CLOSE just performs a CloseHandle() on the passed data after the timer is stopped/ends. You CloneHandle() the pack handle before timer end, which prevents the underlying pack data from being destroyed. When that iWitches > 0 check fails, the TIMER_DATA_HNDL_CLOSE will close and no more handles will point to the pack data, so then the pack data itself is destroyed.