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
);
53 RtlNtStatusToDosError(IN NTSTATUS Status
);
57 AcquireSRWLockExclusive(PSRWLOCK Lock
)
59 RtlAcquireSRWLockExclusive((PRTL_SRWLOCK
)Lock
);
64 AcquireSRWLockShared(PSRWLOCK Lock
)
66 RtlAcquireSRWLockShared((PRTL_SRWLOCK
)Lock
);
71 InitializeConditionVariable(PCONDITION_VARIABLE ConditionVariable
)
73 RtlInitializeConditionVariable((PRTL_CONDITION_VARIABLE
)ConditionVariable
);
78 InitializeSRWLock(PSRWLOCK Lock
)
80 RtlInitializeSRWLock((PRTL_SRWLOCK
)Lock
);
85 ReleaseSRWLockExclusive(PSRWLOCK Lock
)
87 RtlReleaseSRWLockExclusive((PRTL_SRWLOCK
)Lock
);
92 ReleaseSRWLockShared(PSRWLOCK Lock
)
94 RtlReleaseSRWLockShared((PRTL_SRWLOCK
)Lock
);
99 GetNtTimeout(PLARGE_INTEGER Time
, DWORD Timeout
)
101 if (Timeout
== INFINITE
) return NULL
;
102 Time
->QuadPart
= (ULONGLONG
)Timeout
* -10000;
108 SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable
, PCRITICAL_SECTION CriticalSection
, DWORD Timeout
)
113 Status
= RtlSleepConditionVariableCS(ConditionVariable
, (PRTL_CRITICAL_SECTION
)CriticalSection
, GetNtTimeout(&Time
, Timeout
));
114 if (!NT_SUCCESS(Status
))
116 SetLastError(RtlNtStatusToDosError(Status
));
124 SleepConditionVariableSRW(PCONDITION_VARIABLE ConditionVariable
, PSRWLOCK Lock
, DWORD Timeout
, ULONG Flags
)
129 Status
= RtlSleepConditionVariableSRW(ConditionVariable
, Lock
, GetNtTimeout(&Time
, Timeout
), Flags
);
130 if (!NT_SUCCESS(Status
))
132 SetLastError(RtlNtStatusToDosError(Status
));
140 WakeAllConditionVariable(PCONDITION_VARIABLE ConditionVariable
)
142 RtlWakeAllConditionVariable((PRTL_CONDITION_VARIABLE
)ConditionVariable
);
147 WakeConditionVariable(PCONDITION_VARIABLE ConditionVariable
)
149 RtlWakeConditionVariable((PRTL_CONDITION_VARIABLE
)ConditionVariable
);