8 RtlInitializeConditionVariable(OUT PRTL_CONDITION_VARIABLE ConditionVariable
);
12 RtlWakeConditionVariable(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable
);
16 RtlWakeAllConditionVariable(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable
);
20 RtlSleepConditionVariableCS(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable
,
21 IN OUT PRTL_CRITICAL_SECTION CriticalSection
,
22 IN PLARGE_INTEGER TimeOut OPTIONAL
);
26 RtlSleepConditionVariableSRW(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable
,
27 IN OUT PRTL_SRWLOCK SRWLock
,
28 IN PLARGE_INTEGER TimeOut OPTIONAL
,
33 RtlInitializeSRWLock(OUT PRTL_SRWLOCK SRWLock
);
37 RtlAcquireSRWLockShared(IN OUT PRTL_SRWLOCK SRWLock
);
41 RtlReleaseSRWLockShared(IN OUT PRTL_SRWLOCK SRWLock
);
45 RtlAcquireSRWLockExclusive(IN OUT PRTL_SRWLOCK SRWLock
);
49 RtlReleaseSRWLockExclusive(IN OUT PRTL_SRWLOCK SRWLock
);
54 AcquireSRWLockExclusive(PSRWLOCK Lock
)
56 RtlAcquireSRWLockExclusive((PRTL_SRWLOCK
)Lock
);
61 AcquireSRWLockShared(PSRWLOCK Lock
)
63 RtlAcquireSRWLockShared((PRTL_SRWLOCK
)Lock
);
68 InitializeConditionVariable(PCONDITION_VARIABLE ConditionVariable
)
70 RtlInitializeConditionVariable((PRTL_CONDITION_VARIABLE
)ConditionVariable
);
75 InitializeSRWLock(PSRWLOCK Lock
)
77 RtlInitializeSRWLock((PRTL_SRWLOCK
)Lock
);
82 ReleaseSRWLockExclusive(PSRWLOCK Lock
)
84 RtlReleaseSRWLockExclusive((PRTL_SRWLOCK
)Lock
);
89 ReleaseSRWLockShared(PSRWLOCK Lock
)
91 RtlReleaseSRWLockShared((PRTL_SRWLOCK
)Lock
);
96 GetNtTimeout(PLARGE_INTEGER Time
, DWORD Timeout
)
98 if (Timeout
== INFINITE
) return NULL
;
99 Time
->QuadPart
= (ULONGLONG
)Timeout
* -10000;
105 SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable
, PCRITICAL_SECTION CriticalSection
, DWORD Timeout
)
110 Status
= RtlSleepConditionVariableCS(ConditionVariable
, (PRTL_CRITICAL_SECTION
)CriticalSection
, GetNtTimeout(&Time
, Timeout
));
111 if (!NT_SUCCESS(Status
) || Status
== STATUS_TIMEOUT
)
113 SetLastError(RtlNtStatusToDosError(Status
));
121 SleepConditionVariableSRW(PCONDITION_VARIABLE ConditionVariable
, PSRWLOCK Lock
, DWORD Timeout
, ULONG Flags
)
126 Status
= RtlSleepConditionVariableSRW(ConditionVariable
, Lock
, GetNtTimeout(&Time
, Timeout
), Flags
);
127 if (!NT_SUCCESS(Status
))
129 SetLastError(RtlNtStatusToDosError(Status
));
137 WakeAllConditionVariable(PCONDITION_VARIABLE ConditionVariable
)
139 RtlWakeAllConditionVariable((PRTL_CONDITION_VARIABLE
)ConditionVariable
);
144 WakeConditionVariable(PCONDITION_VARIABLE ConditionVariable
)
146 RtlWakeConditionVariable((PRTL_CONDITION_VARIABLE
)ConditionVariable
);
153 BOOL WINAPI
InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection
,
154 IN DWORD dwSpinCount
,
159 /* FIXME: Flags ignored */
161 /* Initialize the critical section */
162 Status
= RtlInitializeCriticalSectionAndSpinCount(
163 (PRTL_CRITICAL_SECTION
)lpCriticalSection
,
165 if (!NT_SUCCESS(Status
))
167 /* Set failure code */
168 SetLastError(RtlNtStatusToDosError(Status
));