mirror of
https://github.com/reactos/reactos.git
synced 2025-07-23 19:14:03 +00:00
[KERNEL32] implement CreateSemaphoreExW/A and adjust macroses for it
This commit is contained in:
parent
40ab30d6a0
commit
18a9993d69
4 changed files with 63 additions and 14 deletions
|
@ -39,7 +39,7 @@ CreateJobObjectW(IN LPSECURITY_ATTRIBUTES lpJobAttributes,
|
|||
IN LPCWSTR lpName)
|
||||
{
|
||||
/* Create the NT object */
|
||||
CreateNtObjectFromWin32Api(JobObject, JobObject, JOB_OBJECT, lpJobAttributes, lpName);
|
||||
CreateNtObjectFromWin32Api(JobObject, JobObject, JOB_OBJECT_ALL_ACCESS, lpJobAttributes, lpName);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -332,7 +332,7 @@ CreateWaitableTimerW(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL,
|
|||
IN BOOL bManualReset,
|
||||
IN LPCWSTR lpTimerName OPTIONAL)
|
||||
{
|
||||
CreateNtObjectFromWin32Api(WaitableTimer, Timer, TIMER,
|
||||
CreateNtObjectFromWin32Api(WaitableTimer, Timer, TIMER_ALL_ACCESS,
|
||||
lpTimerAttributes,
|
||||
lpTimerName,
|
||||
bManualReset ? NotificationTimer : SynchronizationTimer);
|
||||
|
@ -446,13 +446,67 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
|||
IN LONG lMaximumCount,
|
||||
IN LPCWSTR lpName OPTIONAL)
|
||||
{
|
||||
CreateNtObjectFromWin32Api(Semaphore, Semaphore, SEMAPHORE,
|
||||
CreateNtObjectFromWin32Api(Semaphore, Semaphore, SEMAPHORE_ALL_ACCESS,
|
||||
lpSemaphoreAttributes,
|
||||
lpName,
|
||||
lInitialCount,
|
||||
lMaximumCount);
|
||||
}
|
||||
|
||||
HANDLE
|
||||
WINAPI
|
||||
DECLSPEC_HOTPATCH
|
||||
CreateSemaphoreExW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||
IN LONG lInitialCount,
|
||||
IN LONG lMaximumCount,
|
||||
IN LPCWSTR lpName OPTIONAL,
|
||||
IN DWORD dwFlags OPTIONAL,
|
||||
IN DWORD dwDesiredAccess OPTIONAL)
|
||||
{
|
||||
CreateNtObjectFromWin32Api(Semaphore, Semaphore, dwDesiredAccess,
|
||||
lpSemaphoreAttributes,
|
||||
lpName,
|
||||
lInitialCount,
|
||||
lMaximumCount);
|
||||
}
|
||||
|
||||
HANDLE
|
||||
WINAPI
|
||||
DECLSPEC_HOTPATCH
|
||||
CreateSemaphoreExA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||
IN LONG lInitialCount,
|
||||
IN LONG lMaximumCount,
|
||||
IN LPCSTR lpName OPTIONAL,
|
||||
IN DWORD dwFlags OPTIONAL,
|
||||
IN DWORD dwDesiredAccess OPTIONAL)
|
||||
{
|
||||
ConvertAnsiToUnicodePrologue
|
||||
|
||||
if (!lpName)
|
||||
{
|
||||
return CreateSemaphoreExW(lpSemaphoreAttributes,
|
||||
lInitialCount,
|
||||
lMaximumCount,
|
||||
NULL,
|
||||
dwFlags,
|
||||
dwDesiredAccess);
|
||||
}
|
||||
|
||||
ConvertAnsiToUnicodeBody(lpName)
|
||||
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
return CreateSemaphoreExW(lpSemaphoreAttributes,
|
||||
lInitialCount,
|
||||
lMaximumCount,
|
||||
UnicodeCache->Buffer,
|
||||
dwFlags,
|
||||
dwDesiredAccess);
|
||||
}
|
||||
|
||||
ConvertAnsiToUnicodeEpilogue
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
@ -523,7 +577,7 @@ CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
|||
IN BOOL bInitialOwner,
|
||||
IN LPCWSTR lpName OPTIONAL)
|
||||
{
|
||||
CreateNtObjectFromWin32Api(Mutex, Mutant, MUTEX,
|
||||
CreateNtObjectFromWin32Api(Mutex, Mutant, MUTEX_ALL_ACCESS,
|
||||
lpMutexAttributes,
|
||||
lpName,
|
||||
bInitialOwner);
|
||||
|
@ -599,7 +653,7 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
|||
IN BOOL bInitialState,
|
||||
IN LPCWSTR lpName OPTIONAL)
|
||||
{
|
||||
CreateNtObjectFromWin32Api(Event, Event, EVENT,
|
||||
CreateNtObjectFromWin32Api(Event, Event, EVENT_ALL_ACCESS,
|
||||
lpEventAttributes,
|
||||
lpName,
|
||||
bManualReset ? NotificationEvent : SynchronizationEvent,
|
||||
|
|
|
@ -132,14 +132,9 @@
|
|||
// This macro uses the CreateNtObjectFromWin32Api macros from above to create an
|
||||
// NT object based on the Win32 API settings.
|
||||
//
|
||||
// Note that it is hardcoded to always use XXX_ALL_ACCESS permissions, which is
|
||||
// the behavior up until Vista. When/if the target moves to Vista, the macro can
|
||||
// be improved to support caller-specified access masks, as the underlying macro
|
||||
// above does support this.
|
||||
//
|
||||
#define CreateNtObjectFromWin32Api(obj, ntobj, capsobj, sec, name, ...) \
|
||||
#define CreateNtObjectFromWin32Api(obj, ntobj, access, sec, name, ...) \
|
||||
CreateNtObjectFromWin32ApiPrologue \
|
||||
CreateNtObjectFromWin32ApiBody(ntobj, sec, name, capsobj##_ALL_ACCESS, ##__VA_ARGS__); \
|
||||
CreateNtObjectFromWin32ApiBody(ntobj, sec, name, access, ##__VA_ARGS__); \
|
||||
CreateNtObjectFromWin32ApiEpilogue
|
||||
|
||||
//
|
||||
|
|
|
@ -158,8 +158,8 @@
|
|||
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr)
|
||||
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr)
|
||||
@ stdcall CreateSemaphoreA(ptr long long str)
|
||||
@ stdcall -stub -version=0x600+ CreateSemaphoreExA(ptr long long str long long)
|
||||
@ stdcall -stub -version=0x600+ CreateSemaphoreExW(ptr long long wstr long long)
|
||||
@ stdcall -version=0x600+ CreateSemaphoreExA(ptr long long str long long)
|
||||
@ stdcall -version=0x600+ CreateSemaphoreExW(ptr long long wstr long long)
|
||||
@ stdcall CreateSemaphoreW(ptr long long wstr)
|
||||
@ stdcall -i386 CreateSocketHandle()
|
||||
@ stdcall -version=0x600+ CreateSymbolicLinkA(str str long)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue