From MSDN:
The CancelWaitableTimer function does not change the signaled state of the timer. It stops the timer before it can be set to the signaled state and cancels outstanding APCs. Therefore, threads performing a wait operation on the timer remain waiting until they time out or the timer is reactivated and its state is set to signaled. If the timer is already in the signaled state, it remains in that state.
(Emphasis mine)
So: How do I set a manual-reset waitable timer to the non-signalled state, if I can't call CancelWaitableTimer? ResetEvent doesn't work on waitable timers (it fails with ERROR_INVALID_HANDLE).
I don't want to use SetWaitableTimer, because (at this point) I don't know what duration to set it to. I suppose I could set the delay to a large number, but that feels like a bit of a hack to me.