How many more bitfields are you planning to use here? We could just make these uint8_t or uint16_t (or bool) instead, and that would be nicer to the compiler and the CPU.
Only one more for the closed bit. Sure this could be changed to some other type as long as we keep it small, if you think it really matters. Would unsigned char be better?
Why are we storing this in ntdll?
This is to avoid having to special case the message queue in get_inproc_sync_fd request: the only object that request can be called with are normal objects, and retrieving their inproc sync can be done with `get_sync` object op directly.
It will also later make it unnecessary to cache it, saving some space and specific treatment there too, and avoiding any risk of eviction.