bug 1769 : from w3seek : Implement some new functions

svn path=/trunk/; revision=23719
This commit is contained in:
Magnus Olsen 2006-08-26 14:28:34 +00:00
parent b4e91152db
commit 0e96db4bf5
8 changed files with 364 additions and 100 deletions

View file

@ -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

View file

@ -8,7 +8,12 @@
<define name="_WIN32_WINNT">0x0502</define>
<define name="__NO_CTYPE_INLINES" />
<define name="WINVER">0x502</define>
<!--
!!! DO NOT ENABLE PCH! SOME FILES ARE NOT PCH-SAFE AS THEY DEFINE !!!
!!! _WIN32_WINNT DIFFERENTLY BEFORE INCLUDING k32.h !!!
<pch>k32.h</pch>
-->
<directory name="debug">
<file>debugger.c</file>
<file>output.c</file>

View file

@ -8,6 +8,10 @@
/* INCLUDES *****************************************************************/
/* File contains Vista Semantics */
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#include <k32.h>
#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

View file

@ -8,6 +8,10 @@
/* INCLUDES *****************************************************************/
/* File contains Vista Semantics */
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#include <k32.h>
#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);
}
/*

View file

@ -8,6 +8,10 @@
/* INCLUDES *****************************************************************/
/* File contains Vista Semantics */
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#include <k32.h>
#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);
}
/*

View file

@ -8,6 +8,10 @@
/* INCLUDES *****************************************************************/
/* File contains Vista Semantics */
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#include <k32.h>
#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);
}
/*

View file

@ -8,6 +8,10 @@
/* INCLUDES *****************************************************************/
/* File contains Vista Semantics */
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#include <k32.h>
#define NDEBUG

View file

@ -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);