The message queue needs both an inproc sync, to wake inproc waits on a message and trigger a server request, and a server sync, for when the wait is only on the queue and should be optimized into a single server request.
It could be better to avoid a dedicated request to retrieve the queue inproc sync fd, for instance by sending an fd on thread init, but we can use this to duality to gradually introduce inproc syncs requests instead and avoid dead code (even though the code ultimately returns STATUS_NOT_IMPLEMENTED for now). We can change the way queue inproc sync fds are retrieved later on.
-- v3: ntdll: Check inproc sync handle access rights on wait. server: Add a request to retrieve the inproc sync fds. server: Create inproc sync events for message queues. ntdll: Retrieve and cache an ntsync device on process init. ntdll: Add stub functions for in-process synchronization. ntdll: Add some traces to synchronization methods.