Hi Eric
Most of these issues should get fixed by the attached patch. It replaces the hive locks and hive list lock (executive resources) by a global registry lock. The result is that only a single thread can modify the registry.
what is the general criterion (if one exists) one should use when choosing a synchronization object to use in kernel mode code?
I ask you this question, because a possible race condition was reported by Gé in the LPC code. As a preliminary step in fixing that, I introduced a FAST_MUTEX to queue threads that use the LPC facility. Now I see that you use an ERESOURCE to fix the same problem in the CM.
Emanuele