These are the essential steps in WinSendMsg processing:
WinSendMsg to the same thread is known as an Intra-thread send.
WinSendMsg to another thread is known as an Inter-thread send.
This behaviour implies that a window procedure may recurse many times, even if waiting for a response to a WinSendMsg.
This allows the receiver to unlock the system queue if it had been locked by the current thread and the current thread is the active thread.
This processing is illustrated in the following diagram: