I haven't yet had a chance to play with these yet, but Vista includes new APIs for determining why a thread is blocked. That is, you can learn that thread 'A' is blocked on object 'X' which is owned by thread 'B'. Thread 'B' in turn in blocked on object 'Y', which is owned by thread 'C', and so on.

This subject is particularly of interest to me, given my prior article on Critical Sections with Russ Osterlund: http://msdn.microsoft.com/msdnmag/issues/03/12/CriticalSections/default.aspx

Anyhow, The Wait Chain Traversal APIs are documentated here: http://windowssdk.msdn.microsoft.com/en-us/library/ms681622.aspx

And a sample here: http://windowssdk.msdn.microsoft.com/en-us/library/ms681418.aspx