>>261
new, deleteがCでも使えるというのは冗談でしょう。

if (!p) {
 CRITICAL_SECTION *q = new ...;

これは、この部分に2コ以上のスレッドが同時に突入した場合、
2度以上InitializeCriticalSection()を実行させたいという意味ですか?