diff --git a/reactos/dll/win32/kernel32/kernel32.def b/reactos/dll/win32/kernel32/kernel32.def index 850f30ed9ab..46c486d225a 100644 --- a/reactos/dll/win32/kernel32/kernel32.def +++ b/reactos/dll/win32/kernel32/kernel32.def @@ -109,6 +109,8 @@ CreateDirectoryExW@12 CreateDirectoryW@8 CreateEventA@16 CreateEventW@16 +CreateEventExA@16 +CreateEventExW@16 CreateFiber@12 CreateFiberEx@20 CreateFileA@28 @@ -126,6 +128,8 @@ CreateMailslotW@16 CreateMemoryResourceNotification@4 CreateMutexA@12 CreateMutexW@12 +CreateMutexExA@16 +CreateMutexExW@16 CreateNamedPipeA@32 CreateNamedPipeW@32 CreateNlsSecurityDescriptor@12 @@ -137,6 +141,8 @@ CreateProcessW@40 CreateRemoteThread@28 CreateSemaphoreA@16 CreateSemaphoreW@16 +CreateSemaphoreExA@24 +CreateSemaphoreExW@24 CreateSocketHandle@0 CreateSymbolicLinkA@12 CreateSymbolicLinkW@12 @@ -148,6 +154,8 @@ CreateToolhelp32Snapshot@8 CreateVirtualBuffer@12 CreateWaitableTimerA@12 CreateWaitableTimerW@12 +CreateWaitableTimerExA@16 +CreateWaitableTimerExW@16 DeactivateActCtx@8 DebugActiveProcess@4 DebugActiveProcessStop@4 diff --git a/reactos/dll/win32/kernel32/kernel32.rbuild b/reactos/dll/win32/kernel32/kernel32.rbuild index 603704fc5ed..e357082216f 100644 --- a/reactos/dll/win32/kernel32/kernel32.rbuild +++ b/reactos/dll/win32/kernel32/kernel32.rbuild @@ -8,7 +8,12 @@ 0x0502 0x502 + debugger.c output.c diff --git a/reactos/dll/win32/kernel32/synch/event.c b/reactos/dll/win32/kernel32/synch/event.c index bf0ee42fde7..43c1ca978a7 100644 --- a/reactos/dll/win32/kernel32/synch/event.c +++ b/reactos/dll/win32/kernel32/synch/event.c @@ -8,6 +8,10 @@ /* INCLUDES *****************************************************************/ +/* File contains Vista Semantics */ +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 + #include #define NDEBUG @@ -17,10 +21,10 @@ HANDLE WINAPI -CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, - IN BOOL bManualReset, - IN BOOL bInitialState, - IN LPCSTR lpName OPTIONAL) +CreateEventExA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, + IN LPCSTR lpName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) { NTSTATUS Status; ANSI_STRING AnsiName; @@ -48,28 +52,40 @@ CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, } /* Call the Unicode API */ - return CreateEventW(lpEventAttributes, - bManualReset, - bInitialState, - UnicodeName); + return CreateEventExW(lpEventAttributes, + UnicodeName, + dwFlags, + dwDesiredAccess); + } HANDLE WINAPI -CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, - IN BOOL bManualReset, - IN BOOL bInitialState, - IN LPCWSTR lpName OPTIONAL) +CreateEventExW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, + IN LPCWSTR lpName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) { NTSTATUS Status; OBJECT_ATTRIBUTES LocalAttributes; POBJECT_ATTRIBUTES ObjectAttributes; HANDLE Handle; UNICODE_STRING ObjectName; + BOOLEAN InitialState; + EVENT_TYPE EventType; /* Now check if we got a name */ if (lpName) RtlInitUnicodeString(&ObjectName, lpName); + if (dwFlags & ~(CREATE_EVENT_INITIAL_SET | CREATE_EVENT_MANUAL_RESET)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + + InitialState = (dwFlags & CREATE_EVENT_INITIAL_SET) != 0; + EventType = (dwFlags & CREATE_EVENT_MANUAL_RESET) ? NotificationEvent : SynchronizationEvent; + /* Now convert the object attributes */ ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes, lpEventAttributes, @@ -77,11 +93,10 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, /* Create the event */ Status = NtCreateEvent(&Handle, - EVENT_ALL_ACCESS, + (ACCESS_MASK)dwDesiredAccess, ObjectAttributes, - bManualReset ? - NotificationEvent : SynchronizationEvent, - (BOOLEAN)bInitialState); + EventType, + InitialState); if (NT_SUCCESS(Status)) { /* Check if the object already existed */ @@ -105,6 +120,49 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, SetLastErrorByStatus(Status); return NULL; } + +} + +HANDLE +WINAPI +CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, + IN BOOL bManualReset, + IN BOOL bInitialState, + IN LPCSTR lpName OPTIONAL) +{ + DWORD dwFlags = 0; + + if (bManualReset) + dwFlags |= CREATE_EVENT_MANUAL_RESET; + + if (bInitialState) + dwFlags |= CREATE_EVENT_INITIAL_SET; + + return CreateEventExA(lpEventAttributes, + lpName, + dwFlags, + EVENT_ALL_ACCESS); +} + +HANDLE +WINAPI +CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, + IN BOOL bManualReset, + IN BOOL bInitialState, + IN LPCWSTR lpName OPTIONAL) +{ + DWORD dwFlags = 0; + + if (bManualReset) + dwFlags |= CREATE_EVENT_MANUAL_RESET; + + if (bInitialState) + dwFlags |= CREATE_EVENT_INITIAL_SET; + + return CreateEventExW(lpEventAttributes, + lpName, + dwFlags, + EVENT_ALL_ACCESS); } HANDLE diff --git a/reactos/dll/win32/kernel32/synch/mutex.c b/reactos/dll/win32/kernel32/synch/mutex.c index aea51aee4b9..a7bd3dbb44d 100644 --- a/reactos/dll/win32/kernel32/synch/mutex.c +++ b/reactos/dll/win32/kernel32/synch/mutex.c @@ -8,6 +8,10 @@ /* INCLUDES *****************************************************************/ +/* File contains Vista Semantics */ +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 + #include #define NDEBUG @@ -20,9 +24,10 @@ */ HANDLE WINAPI -CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, - IN BOOL bInitialOwner, - IN LPCSTR lpName OPTIONAL) +CreateMutexExA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, + IN LPCSTR lpName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) { NTSTATUS Status; ANSI_STRING AnsiName; @@ -50,9 +55,10 @@ CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, } /* Call the Unicode API */ - return CreateMutexW(lpMutexAttributes, - bInitialOwner, - UnicodeName); + return CreateMutexExW(lpMutexAttributes, + UnicodeName, + dwFlags, + dwDesiredAccess); } /* @@ -60,19 +66,29 @@ CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, */ HANDLE WINAPI -CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, - IN BOOL bInitialOwner, - IN LPCWSTR lpName OPTIONAL) +CreateMutexExW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, + IN LPCWSTR lpName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) { NTSTATUS Status; OBJECT_ATTRIBUTES LocalAttributes; POBJECT_ATTRIBUTES ObjectAttributes; HANDLE Handle; UNICODE_STRING ObjectName; + BOOLEAN InitialOwner; /* Now check if we got a name */ if (lpName) RtlInitUnicodeString(&ObjectName, lpName); + if (dwFlags & ~(CREATE_MUTEX_INITIAL_OWNER)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + + InitialOwner = (dwFlags & CREATE_MUTEX_INITIAL_OWNER) != 0; + /* Now convert the object attributes */ ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes, lpMutexAttributes, @@ -80,9 +96,9 @@ CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, /* Create the mutant */ Status = NtCreateMutant(&Handle, - MUTANT_ALL_ACCESS, + (ACCESS_MASK)dwDesiredAccess, ObjectAttributes, - (BOOLEAN)bInitialOwner); + InitialOwner); if (NT_SUCCESS(Status)) { /* Check if the object already existed */ @@ -106,6 +122,47 @@ CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, SetLastErrorByStatus(Status); return NULL; } + +} + +/* + * @implemented + */ +HANDLE +WINAPI +CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, + IN BOOL bInitialOwner, + IN LPCSTR lpName OPTIONAL) +{ + DWORD dwFlags = 0; + + if (bInitialOwner) + dwFlags |= CREATE_MUTEX_INITIAL_OWNER; + + return CreateMutexExA(lpMutexAttributes, + lpName, + dwFlags, + MUTANT_ALL_ACCESS); +} + +/* + * @implemented + */ +HANDLE +WINAPI +CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, + IN BOOL bInitialOwner, + IN LPCWSTR lpName OPTIONAL) +{ + DWORD dwFlags = 0; + + if (bInitialOwner) + dwFlags |= CREATE_MUTEX_INITIAL_OWNER; + + return CreateMutexExW(lpMutexAttributes, + lpName, + dwFlags, + MUTANT_ALL_ACCESS); } /* diff --git a/reactos/dll/win32/kernel32/synch/sem.c b/reactos/dll/win32/kernel32/synch/sem.c index a19bd0f6d16..57b942349da 100644 --- a/reactos/dll/win32/kernel32/synch/sem.c +++ b/reactos/dll/win32/kernel32/synch/sem.c @@ -8,6 +8,10 @@ /* INCLUDES *****************************************************************/ +/* File contains Vista Semantics */ +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 + #include #define NDEBUG @@ -20,10 +24,12 @@ */ HANDLE WINAPI -CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, - IN LONG lInitialCount, - IN LONG lMaximumCount, - IN LPCSTR lpName OPTIONAL) +CreateSemaphoreExA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, + IN LONG lInitialCount, + IN LONG lMaximumCount, + IN LPCSTR lpName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) { NTSTATUS Status; ANSI_STRING AnsiName; @@ -51,10 +57,12 @@ CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, } /* Call the Unicode API */ - return CreateSemaphoreW(lpSemaphoreAttributes, - lInitialCount, - lMaximumCount, - UnicodeName); + return CreateSemaphoreExW(lpSemaphoreAttributes, + lInitialCount, + lMaximumCount, + UnicodeName, + dwFlags, + dwDesiredAccess); } /* @@ -62,10 +70,12 @@ CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, */ HANDLE WINAPI -CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, - IN LONG lInitialCount, - IN LONG lMaximumCount, - IN LPCWSTR lpName OPTIONAL) +CreateSemaphoreExW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, + IN LONG lInitialCount, + IN LONG lMaximumCount, + IN LPCWSTR lpName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) { NTSTATUS Status; OBJECT_ATTRIBUTES LocalAttributes; @@ -76,6 +86,12 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, /* Now check if we got a name */ if (lpName) RtlInitUnicodeString(&ObjectName, lpName); + if (dwFlags != 0) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + /* Now convert the object attributes */ ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes, lpSemaphoreAttributes, @@ -83,7 +99,7 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, /* Create the semaphore */ Status = NtCreateSemaphore(&Handle, - SEMAPHORE_ALL_ACCESS, + (ACCESS_MASK)dwDesiredAccess, ObjectAttributes, lInitialCount, lMaximumCount); @@ -110,6 +126,44 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, SetLastErrorByStatus(Status); return NULL; } + +} + + +/* + * @implemented + */ +HANDLE +WINAPI +CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, + IN LONG lInitialCount, + IN LONG lMaximumCount, + IN LPCSTR lpName OPTIONAL) +{ + return CreateSemaphoreExA(lpSemaphoreAttributes, + lInitialCount, + lMaximumCount, + lpName, + 0, + SEMAPHORE_ALL_ACCESS); +} + +/* + * @implemented + */ +HANDLE +WINAPI +CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, + IN LONG lInitialCount, + IN LONG lMaximumCount, + IN LPCWSTR lpName OPTIONAL) +{ + return CreateSemaphoreExW(lpSemaphoreAttributes, + lInitialCount, + lMaximumCount, + lpName, + 0, + SEMAPHORE_ALL_ACCESS); } /* diff --git a/reactos/dll/win32/kernel32/synch/timer.c b/reactos/dll/win32/kernel32/synch/timer.c index d3a27457f5a..831f4fe1ffb 100644 --- a/reactos/dll/win32/kernel32/synch/timer.c +++ b/reactos/dll/win32/kernel32/synch/timer.c @@ -8,6 +8,10 @@ /* INCLUDES *****************************************************************/ +/* File contains Vista Semantics */ +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 + #include #define NDEBUG @@ -20,63 +24,10 @@ */ HANDLE WINAPI -CreateWaitableTimerW(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, - IN BOOL bManualReset, - IN LPCWSTR lpTimerName OPTIONAL) -{ - NTSTATUS Status; - OBJECT_ATTRIBUTES LocalAttributes; - POBJECT_ATTRIBUTES ObjectAttributes; - HANDLE Handle; - UNICODE_STRING ObjectName; - - /* Now check if we got a name */ - if (lpTimerName) RtlInitUnicodeString(&ObjectName, lpTimerName); - - /* Now convert the object attributes */ - ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes, - lpTimerAttributes, - lpTimerName ? &ObjectName : NULL); - - /* Create the timer */ - Status = NtCreateTimer(&Handle, - TIMER_ALL_ACCESS, - ObjectAttributes, - bManualReset ? - NotificationTimer : SynchronizationTimer); - if (NT_SUCCESS(Status)) - { - /* Check if the object already existed */ - if (Status == STATUS_OBJECT_NAME_EXISTS) - { - /* Set distinguished Win32 error code */ - SetLastError(ERROR_ALREADY_EXISTS); - } - else - { - /* Otherwise, set success */ - SetLastError(ERROR_SUCCESS); - } - - /* Return the handle */ - return Handle; - } - else - { - /* Convert the NT Status and fail */ - SetLastErrorByStatus(Status); - return NULL; - } -} - -/* - * @implemented - */ -HANDLE -WINAPI -CreateWaitableTimerA(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, - IN BOOL bManualReset, - IN LPCSTR lpTimerName OPTIONAL) +CreateWaitableTimerExA(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, + IN LPCSTR lpTimerName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) { NTSTATUS Status; ANSI_STRING AnsiName; @@ -104,9 +55,114 @@ CreateWaitableTimerA(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, } /* Call the Unicode API */ - return CreateWaitableTimerW(lpTimerAttributes, - bManualReset, - UnicodeName); + return CreateWaitableTimerExW(lpTimerAttributes, + UnicodeName, + dwFlags, + dwDesiredAccess); +} + +/* + * @implemented + */ +HANDLE +WINAPI +CreateWaitableTimerExW(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, + IN LPCWSTR lpTimerName OPTIONAL, + IN DWORD dwFlags, + IN DWORD dwDesiredAccess) +{ + NTSTATUS Status; + OBJECT_ATTRIBUTES LocalAttributes; + POBJECT_ATTRIBUTES ObjectAttributes; + HANDLE Handle; + UNICODE_STRING ObjectName; + TIMER_TYPE TimerType; + + /* Now check if we got a name */ + if (lpTimerName) RtlInitUnicodeString(&ObjectName, lpTimerName); + + if (dwFlags & ~(CREATE_WAITABLE_TIMER_MANUAL_RESET)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + + TimerType = (dwFlags & CREATE_WAITABLE_TIMER_MANUAL_RESET) ? NotificationTimer : SynchronizationTimer; + + /* Now convert the object attributes */ + ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes, + lpTimerAttributes, + lpTimerName ? &ObjectName : NULL); + + /* Create the timer */ + Status = NtCreateTimer(&Handle, + (ACCESS_MASK)dwDesiredAccess, + ObjectAttributes, + TimerType); + if (NT_SUCCESS(Status)) + { + /* Check if the object already existed */ + if (Status == STATUS_OBJECT_NAME_EXISTS) + { + /* Set distinguished Win32 error code */ + SetLastError(ERROR_ALREADY_EXISTS); + } + else + { + /* Otherwise, set success */ + SetLastError(ERROR_SUCCESS); + } + + /* Return the handle */ + return Handle; + } + else + { + /* Convert the NT Status and fail */ + SetLastErrorByStatus(Status); + return NULL; + } + +} + +/* + * @implemented + */ +HANDLE +WINAPI +CreateWaitableTimerW(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, + IN BOOL bManualReset, + IN LPCWSTR lpTimerName OPTIONAL) +{ + DWORD dwFlags = 0; + + if (bManualReset) + dwFlags |= CREATE_WAITABLE_TIMER_MANUAL_RESET; + + return CreateWaitableTimerExW(lpTimerAttributes, + lpTimerName, + dwFlags, + TIMER_ALL_ACCESS); +} + +/* + * @implemented + */ +HANDLE +WINAPI +CreateWaitableTimerA(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, + IN BOOL bManualReset, + IN LPCSTR lpTimerName OPTIONAL) +{ + DWORD dwFlags = 0; + + if (bManualReset) + dwFlags |= CREATE_WAITABLE_TIMER_MANUAL_RESET; + + return CreateWaitableTimerExA(lpTimerAttributes, + lpTimerName, + dwFlags, + TIMER_ALL_ACCESS); } /* diff --git a/reactos/dll/win32/kernel32/synch/wait.c b/reactos/dll/win32/kernel32/synch/wait.c index af61473bcc3..42939517425 100644 --- a/reactos/dll/win32/kernel32/synch/wait.c +++ b/reactos/dll/win32/kernel32/synch/wait.c @@ -8,6 +8,10 @@ /* INCLUDES *****************************************************************/ +/* File contains Vista Semantics */ +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 + #include #define NDEBUG diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index f9287d8f0c6..c01511508fa 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -535,6 +535,12 @@ extern "C" { #define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 0x2 #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x4 #endif +#if (_WIN32_WINNT >= 0x0600) +#define CREATE_EVENT_MANUAL_RESET 0x1 +#define CREATE_EVENT_INITIAL_SET 0x2 +#define CREATE_MUTEX_INITIAL_OWNER 0x1 +#define CREATE_WAITABLE_TIMER_MANUAL_RESET 0x1 +#endif #ifndef RC_INVOKED #ifndef _FILETIME_ @@ -1179,6 +1185,10 @@ BOOL WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES); BOOL WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES); HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR); HANDLE WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR); +#if (_WIN32_WINNT >= 0x0600) +HANDLE WINAPI CreateEventExA(LPSECURITY_ATTRIBUTES,LPCSTR,DWORD,DWORD); +HANDLE WINAPI CreateEventExW(LPSECURITY_ATTRIBUTES,LPCWSTR,DWORD,DWORD); +#endif LPVOID WINAPI CreateFiber(SIZE_T,LPFIBER_START_ROUTINE,LPVOID); #if (_WIN32_WINNT >= 0x0400) LPVOID WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID); @@ -1205,6 +1215,10 @@ HANDLE WINAPI CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE #endif HANDLE WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR); HANDLE WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR); +#if (_WIN32_WINNT >= 0x0600) +HANDLE WINAPI CreateMutexExA(LPSECURITY_ATTRIBUTES,LPCSTR,DWORD,DWORD); +HANDLE WINAPI CreateMutexExW(LPSECURITY_ATTRIBUTES,LPCWSTR,DWORD,DWORD); +#endif HANDLE WINAPI CreateNamedPipeA(LPCSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES); HANDLE WINAPI CreateNamedPipeW(LPCWSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES); BOOL WINAPI CreatePipe(PHANDLE,PHANDLE,LPSECURITY_ATTRIBUTES,DWORD); @@ -1216,6 +1230,10 @@ BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPS HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR); HANDLE WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR); +#if (_WIN32_WINNT >= 0x0600) +HANDLE WINAPI CreateSemaphoreExA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR,DWORD,DWORD); +HANDLE WINAPI CreateSemaphoreExW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR,DWORD,DWORD); +#endif DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD); #if (_WIN32_WINNT >= 0x0500) HANDLE WINAPI CreateTimerQueue(void); @@ -1224,6 +1242,10 @@ BOOL WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,PVOID,DWORD,PDWORD); HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR); HANDLE WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR); +#if (_WIN32_WINNT >= 0x0600) +HANDLE WINAPI CreateWaitableTimerExA(LPSECURITY_ATTRIBUTES,LPCSTR,DWORD,DWORD); +HANDLE WINAPI CreateWaitableTimerExW(LPSECURITY_ATTRIBUTES,LPCWSTR,DWORD,DWORD); +#endif #if (_WIN32_WINNT >= 0x0501) BOOL WINAPI CreateWellKnownSid(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*); BOOL WINAPI DeactivateActCtx(DWORD,ULONG_PTR);