んー、だから

static CRITICAL_SECTION *p = NULL;
if (!p) {
 CRITICAL_SECTION *q = new ...;
 Interlocked...(&p, NULL, q); //引数の順番忘れた
 if (p != q) {
  delete q;
 }
}
EnterCriticalSection(p);
...
Leave...();

なら、Cでも使えるよ。