@ stdcall EnterCriticalSection() kernel32.EnterCriticalSection
@ stdcall InitializeCriticalSection() kernel32.InitializeCriticalSection
@ stdcall InitializeCriticalSectionAndSpinCount() kernel32.InitializeCriticalSectionAndSpinCount
-@ stub InitializeCriticalSectionEx
+@ stdcall InitializeCriticalSectionEx() kernel32_vista.InitializeCriticalSectionEx
@ stdcall InitializeSRWLock() kernel32_vista.InitializeSRWLock
@ stdcall LeaveCriticalSection() kernel32.LeaveCriticalSection
@ stdcall OpenEventA() kernel32.OpenEventA
@ stdcall InitializeConditionVariable() kernel32_vista.InitializeConditionVariable
@ stdcall InitializeCriticalSection() kernel32.InitializeCriticalSection
@ stdcall InitializeCriticalSectionAndSpinCount() kernel32.InitializeCriticalSectionAndSpinCount
-@ stub InitializeCriticalSectionEx
+@ stdcall InitializeCriticalSectionEx() kernel32_vista.InitializeCriticalSectionEx
@ stdcall InitializeSRWLock() kernel32_vista.InitializeSRWLock
@ stub InitializeSynchronizationBarrier
@ stdcall LeaveCriticalSection() kernel32.LeaveCriticalSection
@ stdcall InitializeConditionVariable() kernel32_vista.InitializeConditionVariable
@ stdcall InitializeCriticalSection() kernel32.InitializeCriticalSection
@ stdcall InitializeCriticalSectionAndSpinCount() kernel32.InitializeCriticalSectionAndSpinCount
-@ stub InitializeCriticalSectionEx
+@ stdcall InitializeCriticalSectionEx() kernel32_vista.InitializeCriticalSectionEx
@ stdcall InitializeSRWLock() kernel32_vista.InitializeSRWLock
@ stub InitializeSynchronizationBarrier
@ stub InitOnceBeginInitialize
#include <ndk/kefuncs.h>
#include <ndk/psfuncs.h>
+#include <ndk/rtlfuncs.h>
@ stdcall SleepConditionVariableSRW(ptr ptr long long)
@ stdcall WakeAllConditionVariable(ptr)
@ stdcall WakeConditionVariable(ptr)
+
+@ stdcall InitializeCriticalSectionEx(ptr long long)
{
RtlWakeConditionVariable((PRTL_CONDITION_VARIABLE)ConditionVariable);
}
+
+
+/*
+* @implemented
+*/
+BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection,
+ IN DWORD dwSpinCount,
+ IN DWORD flags)
+{
+ NTSTATUS Status;
+
+ /* FIXME: Flags ignored */
+
+ /* Initialize the critical section */
+ Status = RtlInitializeCriticalSectionAndSpinCount(
+ (PRTL_CRITICAL_SECTION)lpCriticalSection,
+ dwSpinCount);
+ if (!NT_SUCCESS(Status))
+ {
+ /* Set failure code */
+ SetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
+
+ /* Success */
+ return TRUE;
+}
+