#pragma option push -b -a8 -pc -A- -w-pun /*P_O_Push*/ // begin_1_0 // begin_2_0 /******************************************************************************** * * * synchapi.h -- ApiSet Contract for api-ms-win-core-synch-l1 * * * * Copyright (c) Microsoft Corporation. All rights reserved. * * * ********************************************************************************/ #ifdef _MSC_VER #pragma once #endif // _MSC_VER #ifndef _SYNCHAPI_H_ #define _SYNCHAPI_H_ #include #include #include #include /* APISET_NAME: api-ms-win-core-synch-l1 */ #if !defined(RC_INVOKED) #ifndef _APISET_SYNCH_VER #ifdef _APISET_TARGET_VERSION #if _APISET_TARGET_VERSION >= _APISET_TARGET_VERSION_WINTHRESHOLD #define _APISET_SYNCH_VER 0x0201 #elif _APISET_TARGET_VERSION >= _APISET_TARGET_VERSION_WIN8 #define _APISET_SYNCH_VER 0x0200 #elif _APISET_TARGET_VERSION == _APISET_TARGET_VERSION_WIN7 #define _APISET_SYNCH_VER 0x0100 #endif #endif #endif #endif // !defined(RC_INVOKED) #ifdef __cplusplus extern "C" { #endif // end_1_0 // end_2_0 // begin_1_0 // begin_2_0 #pragma region Application or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) // // Define the slim R/W lock. // #define SRWLOCK_INIT RTL_SRWLOCK_INIT typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion // end_1_0 // end_2_0 // begin_1_0 #pragma region Application or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) #if (_WIN32_WINNT >= 0x0600) WINBASEAPI VOID WINAPI InitializeSRWLock( _Out_ PSRWLOCK SRWLock ); WINBASEAPI _Releases_exclusive_lock_(*SRWLock) VOID WINAPI ReleaseSRWLockExclusive( _Inout_ PSRWLOCK SRWLock ); WINBASEAPI _Releases_shared_lock_(*SRWLock) VOID WINAPI ReleaseSRWLockShared( _Inout_ PSRWLOCK SRWLock ); WINBASEAPI _Acquires_exclusive_lock_(*SRWLock) VOID WINAPI AcquireSRWLockExclusive( _Inout_ PSRWLOCK SRWLock ); WINBASEAPI _Acquires_shared_lock_(*SRWLock) VOID WINAPI AcquireSRWLockShared( _Inout_ PSRWLOCK SRWLock ); WINBASEAPI _When_(return!=0, _Acquires_exclusive_lock_(*SRWLock)) BOOLEAN WINAPI TryAcquireSRWLockExclusive( _Inout_ PSRWLOCK SRWLock ); WINBASEAPI _When_(return!=0, _Acquires_shared_lock_(*SRWLock)) BOOLEAN WINAPI TryAcquireSRWLockShared( _Inout_ PSRWLOCK SRWLock ); #endif // (_WIN32_WINNT >= 0x0600) #if (_WIN32_WINNT < 0x0600) _Maybe_raises_SEH_exception_ WINBASEAPI VOID WINAPI InitializeCriticalSection( _Out_ LPCRITICAL_SECTION lpCriticalSection ); #else WINBASEAPI VOID WINAPI InitializeCriticalSection( _Out_ LPCRITICAL_SECTION lpCriticalSection ); #endif // (_WIN32_WINNT < 0x0600) WINBASEAPI VOID WINAPI EnterCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection ); WINBASEAPI VOID WINAPI LeaveCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection ); WINBASEAPI _Must_inspect_result_ BOOL WINAPI InitializeCriticalSectionAndSpinCount( _Out_ LPCRITICAL_SECTION lpCriticalSection, _In_ DWORD dwSpinCount ); #if (_WIN32_WINNT >= 0x0600) WINBASEAPI BOOL WINAPI InitializeCriticalSectionEx( _Out_ LPCRITICAL_SECTION lpCriticalSection, _In_ DWORD dwSpinCount, _In_ DWORD Flags ); #endif // (_WIN32_WINNT >= 0x0600) WINBASEAPI DWORD WINAPI SetCriticalSectionSpinCount( _Inout_ LPCRITICAL_SECTION lpCriticalSection, _In_ DWORD dwSpinCount ); #if (_WIN32_WINNT >= 0x0400) WINBASEAPI BOOL WINAPI TryEnterCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection ); #endif /* _WIN32_WINNT >= 0x0400 */ WINBASEAPI VOID WINAPI DeleteCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection ); // end_1_0 // begin_2_0 // // Define one-time initialization primitive // typedef RTL_RUN_ONCE INIT_ONCE; typedef PRTL_RUN_ONCE PINIT_ONCE; typedef PRTL_RUN_ONCE LPINIT_ONCE; #define INIT_ONCE_STATIC_INIT RTL_RUN_ONCE_INIT // // Run once flags // #define INIT_ONCE_CHECK_ONLY RTL_RUN_ONCE_CHECK_ONLY #define INIT_ONCE_ASYNC RTL_RUN_ONCE_ASYNC #define INIT_ONCE_INIT_FAILED RTL_RUN_ONCE_INIT_FAILED // // The context stored in the run once structure must leave the following number // of low order bits unused. // #define INIT_ONCE_CTX_RESERVED_BITS RTL_RUN_ONCE_CTX_RESERVED_BITS typedef BOOL (WINAPI *PINIT_ONCE_FN) ( _Inout_ PINIT_ONCE InitOnce, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ PVOID *Context ); #if !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0200) #if (_WIN32_WINNT >= 0x0600) WINBASEAPI VOID WINAPI InitOnceInitialize( _Out_ PINIT_ONCE InitOnce ); WINBASEAPI BOOL WINAPI InitOnceExecuteOnce( _Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID * Context ); WINBASEAPI BOOL WINAPI InitOnceBeginInitialize( _Inout_ LPINIT_ONCE lpInitOnce, _In_ DWORD dwFlags, _Out_ PBOOL fPending, _Outptr_opt_result_maybenull_ LPVOID * lpContext ); WINBASEAPI BOOL WINAPI InitOnceComplete( _Inout_ LPINIT_ONCE lpInitOnce, _In_ DWORD dwFlags, _In_opt_ LPVOID lpContext ); #endif // (_WIN32_WINNT >= 0x0600) #endif // #if !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0200) // // Define condition variable // typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; // // Static initializer for the condition variable // #define CONDITION_VARIABLE_INIT RTL_CONDITION_VARIABLE_INIT // // Flags for condition variables // #define CONDITION_VARIABLE_LOCKMODE_SHARED RTL_CONDITION_VARIABLE_LOCKMODE_SHARED #if !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0200) #if (_WIN32_WINNT >= 0x0600) WINBASEAPI VOID WINAPI InitializeConditionVariable( _Out_ PCONDITION_VARIABLE ConditionVariable ); WINBASEAPI VOID WINAPI WakeConditionVariable( _Inout_ PCONDITION_VARIABLE ConditionVariable ); WINBASEAPI VOID WINAPI WakeAllConditionVariable( _Inout_ PCONDITION_VARIABLE ConditionVariable ); WINBASEAPI BOOL WINAPI SleepConditionVariableCS( _Inout_ PCONDITION_VARIABLE ConditionVariable, _Inout_ PCRITICAL_SECTION CriticalSection, _In_ DWORD dwMilliseconds ); WINBASEAPI BOOL WINAPI SleepConditionVariableSRW( _Inout_ PCONDITION_VARIABLE ConditionVariable, _Inout_ PSRWLOCK SRWLock, _In_ DWORD dwMilliseconds, _In_ ULONG Flags ); #endif // (_WIN32_WINNT >= 0x0600) #endif // !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0200) // end_2_0 // begin_1_0 WINBASEAPI BOOL WINAPI SetEvent( _In_ HANDLE hEvent ); WINBASEAPI BOOL WINAPI ResetEvent( _In_ HANDLE hEvent ); WINBASEAPI BOOL WINAPI ReleaseSemaphore( _In_ HANDLE hSemaphore, _In_ LONG lReleaseCount, _Out_opt_ LPLONG lpPreviousCount ); WINBASEAPI BOOL WINAPI ReleaseMutex( _In_ HANDLE hMutex ); WINBASEAPI DWORD WINAPI WaitForSingleObject( _In_ HANDLE hHandle, _In_ DWORD dwMilliseconds ); WINBASEAPI DWORD WINAPI SleepEx( _In_ DWORD dwMilliseconds, _In_ BOOL bAlertable ); WINBASEAPI DWORD WINAPI WaitForSingleObjectEx( _In_ HANDLE hHandle, _In_ DWORD dwMilliseconds, _In_ BOOL bAlertable ); WINBASEAPI DWORD WINAPI WaitForMultipleObjectsEx( _In_ DWORD nCount, _In_reads_(nCount) CONST HANDLE * lpHandles, _In_ BOOL bWaitAll, _In_ DWORD dwMilliseconds, _In_ BOOL bAlertable ); // // Synchronization APIs // #define MUTEX_MODIFY_STATE MUTANT_QUERY_STATE #define MUTEX_ALL_ACCESS MUTANT_ALL_ACCESS WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateMutexA( _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, _In_ BOOL bInitialOwner, _In_opt_ LPCSTR lpName ); WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateMutexW( _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, _In_ BOOL bInitialOwner, _In_opt_ LPCWSTR lpName ); #ifdef UNICODE #define CreateMutex CreateMutexW #else #define CreateMutex CreateMutexA #endif // !UNICODE WINBASEAPI _Ret_maybenull_ HANDLE WINAPI OpenMutexW( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCWSTR lpName ); #ifdef UNICODE #define OpenMutex OpenMutexW #endif #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateEventA( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, _In_ BOOL bManualReset, _In_ BOOL bInitialState, _In_opt_ LPCSTR lpName ); WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateEventW( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, _In_ BOOL bManualReset, _In_ BOOL bInitialState, _In_opt_ LPCWSTR lpName ); #ifdef UNICODE #define CreateEvent CreateEventW #else #define CreateEvent CreateEventA #endif // !UNICODE #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #pragma region Application or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) WINBASEAPI _Ret_maybenull_ HANDLE WINAPI OpenEventA( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCSTR lpName ); WINBASEAPI _Ret_maybenull_ HANDLE WINAPI OpenEventW( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCWSTR lpName ); #ifdef UNICODE #define OpenEvent OpenEventW #else #define OpenEvent OpenEventA #endif // !UNICODE WINBASEAPI _Ret_maybenull_ HANDLE WINAPI OpenSemaphoreW( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCWSTR lpName ); #ifdef UNICODE #define OpenSemaphore OpenSemaphoreW #endif #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) typedef VOID (APIENTRY *PTIMERAPCROUTINE)( _In_opt_ LPVOID lpArgToCompletionRoutine, _In_ DWORD dwTimerLowValue, _In_ DWORD dwTimerHighValue ); WINBASEAPI _Ret_maybenull_ HANDLE WINAPI OpenWaitableTimerW( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCWSTR lpTimerName ); #ifdef UNICODE #define OpenWaitableTimer OpenWaitableTimerW #endif #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7) BOOL WINAPI SetWaitableTimerEx( _In_ HANDLE hTimer, _In_ const LARGE_INTEGER * lpDueTime, _In_ LONG lPeriod, _In_opt_ PTIMERAPCROUTINE pfnCompletionRoutine, _In_opt_ LPVOID lpArgToCompletionRoutine, _In_opt_ PREASON_CONTEXT WakeContext, _In_ ULONG TolerableDelay ); #endif // (_WIN32_WINNT >= _WIN32_WINNT_WIN7) WINBASEAPI BOOL WINAPI SetWaitableTimer( _In_ HANDLE hTimer, _In_ const LARGE_INTEGER * lpDueTime, _In_ LONG lPeriod, _In_opt_ PTIMERAPCROUTINE pfnCompletionRoutine, _In_opt_ LPVOID lpArgToCompletionRoutine, _In_ BOOL fResume ); WINBASEAPI BOOL WINAPI CancelWaitableTimer( _In_ HANDLE hTimer ); #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #if (_WIN32_WINNT >= 0x0600) #pragma region Application or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) #define CREATE_MUTEX_INITIAL_OWNER 0x00000001 WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateMutexExA( _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, _In_opt_ LPCSTR lpName, _In_ DWORD dwFlags, _In_ DWORD dwDesiredAccess ); WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateMutexExW( _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, _In_opt_ LPCWSTR lpName, _In_ DWORD dwFlags, _In_ DWORD dwDesiredAccess ); #ifdef UNICODE #define CreateMutexEx CreateMutexExW #else #define CreateMutexEx CreateMutexExA #endif // !UNICODE #define CREATE_EVENT_MANUAL_RESET 0x00000001 #define CREATE_EVENT_INITIAL_SET 0x00000002 WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateEventExA( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, _In_opt_ LPCSTR lpName, _In_ DWORD dwFlags, _In_ DWORD dwDesiredAccess ); WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateEventExW( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, _In_opt_ LPCWSTR lpName, _In_ DWORD dwFlags, _In_ DWORD dwDesiredAccess ); #ifdef UNICODE #define CreateEventEx CreateEventExW #else #define CreateEventEx CreateEventExA #endif // !UNICODE WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateSemaphoreExW( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCWSTR lpName, _Reserved_ DWORD dwFlags, _In_ DWORD dwDesiredAccess ); #ifdef UNICODE #define CreateSemaphoreEx CreateSemaphoreExW #endif #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) #define CREATE_WAITABLE_TIMER_MANUAL_RESET 0x00000001 WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateWaitableTimerExW( _In_opt_ LPSECURITY_ATTRIBUTES lpTimerAttributes, _In_opt_ LPCWSTR lpTimerName, _In_ DWORD dwFlags, _In_ DWORD dwDesiredAccess ); #ifdef UNICODE #define CreateWaitableTimerEx CreateWaitableTimerExW #endif #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) #pragma endregion #endif // (_WIN32_WINNT >= 0x0600) #endif // (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) // end_1_0 // begin_2_0 #if !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0200) #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) typedef RTL_BARRIER SYNCHRONIZATION_BARRIER; typedef PRTL_BARRIER PSYNCHRONIZATION_BARRIER; typedef PRTL_BARRIER LPSYNCHRONIZATION_BARRIER; #define SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY 0x01 #define SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY 0x02 #define SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 0x04 BOOL WINAPI EnterSynchronizationBarrier( _Inout_ LPSYNCHRONIZATION_BARRIER lpBarrier, _In_ DWORD dwFlags ); BOOL WINAPI InitializeSynchronizationBarrier( _Out_ LPSYNCHRONIZATION_BARRIER lpBarrier, _In_ LONG lTotalThreads, _In_ LONG lSpinCount ); BOOL WINAPI DeleteSynchronizationBarrier( _Inout_ LPSYNCHRONIZATION_BARRIER lpBarrier ); #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #pragma region Application or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) WINBASEAPI VOID WINAPI Sleep( _In_ DWORD dwMilliseconds ); BOOL WINAPI WaitOnAddress( _In_reads_bytes_(AddressSize) volatile VOID * Address, _In_reads_bytes_(AddressSize) PVOID CompareAddress, _In_ SIZE_T AddressSize, _In_opt_ DWORD dwMilliseconds ); VOID WINAPI WakeByAddressSingle( _In_ PVOID Address ); VOID WINAPI WakeByAddressAll( _In_ PVOID Address ); #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) #ifndef MIDL_PASS WINBASEAPI DWORD WINAPI SignalObjectAndWait( _In_ HANDLE hObjectToSignal, _In_ HANDLE hObjectToWaitOn, _In_ DWORD dwMilliseconds, _In_ BOOL bAlertable ); #endif #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #endif // !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0200) // end_2_0 #if !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0201) #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) WINBASEAPI DWORD WINAPI WaitForMultipleObjects( _In_ DWORD nCount, _In_reads_(nCount) CONST HANDLE * lpHandles, _In_ BOOL bWaitAll, _In_ DWORD dwMilliseconds ); #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) WINBASEAPI HANDLE WINAPI CreateSemaphoreW( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCWSTR lpName ); #ifdef UNICODE #define CreateSemaphore CreateSemaphoreW #endif #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #pragma region Desktop or OneCore Family #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) WINBASEAPI _Ret_maybenull_ HANDLE WINAPI CreateWaitableTimerW( _In_opt_ LPSECURITY_ATTRIBUTES lpTimerAttributes, _In_ BOOL bManualReset, _In_opt_ LPCWSTR lpTimerName ); #ifdef UNICODE #define CreateWaitableTimer CreateWaitableTimerW #endif #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */ #pragma endregion #endif // !defined(_CONTRACT_GEN) || (_APISET_SYNCH_VER >= 0x0201) // begin_1_0 // begin_2_0 #ifdef __cplusplus } #endif #endif // _SYNCHAPI_H_ // end_1_0 // end_2_0 #pragma option pop /*P_O_Pop*/