именно внутри RtlpWaitForCriticalSection из ntdll.dll делается вызов NtWaitForSingleObject, который уже отправляется прямо в ядро. Однако я делал профилирование - и тайм-критикал поток, который постоянно опрашивал мутекс в ожидании ресурса, который редко-редко ему отдается, терял лишнее время на постоянный заход через лишние проверки условий в ту же NtWaitForSingleObject. Поставив непосредственный вызов NtWait (хотя это и недокументировано), я добился заметного повышения производительности. В случае, если ресурс хронически свободный - спорить не буду, не было цели разбирать это направление.