An application has a thread 1 sending WM_DESTROY to windows in thread 2. When handling the message in thread 2, RevokeDragDrop() is called to release a COM object in thread 1. Then deadlock happens when using PostMessageW() because the DM_EXECUTERPC message will not be handled as thread 1 is still waiting for thread 2 to finish handling WM_DESTROY.