mirror of
https://github.com/reactos/reactos.git
synced 2025-07-28 09:22:47 +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)
|
IN LPCWSTR lpName)
|
||||||
{
|
{
|
||||||
/* Create the NT object */
|
/* 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 BOOL bManualReset,
|
||||||
IN LPCWSTR lpTimerName OPTIONAL)
|
IN LPCWSTR lpTimerName OPTIONAL)
|
||||||
{
|
{
|
||||||
CreateNtObjectFromWin32Api(WaitableTimer, Timer, TIMER,
|
CreateNtObjectFromWin32Api(WaitableTimer, Timer, TIMER_ALL_ACCESS,
|
||||||
lpTimerAttributes,
|
lpTimerAttributes,
|
||||||
lpTimerName,
|
lpTimerName,
|
||||||
bManualReset ? NotificationTimer : SynchronizationTimer);
|
bManualReset ? NotificationTimer : SynchronizationTimer);
|
||||||
|
@ -446,13 +446,67 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
IN LONG lMaximumCount,
|
IN LONG lMaximumCount,
|
||||||
IN LPCWSTR lpName OPTIONAL)
|
IN LPCWSTR lpName OPTIONAL)
|
||||||
{
|
{
|
||||||
CreateNtObjectFromWin32Api(Semaphore, Semaphore, SEMAPHORE,
|
CreateNtObjectFromWin32Api(Semaphore, Semaphore, SEMAPHORE_ALL_ACCESS,
|
||||||
lpSemaphoreAttributes,
|
lpSemaphoreAttributes,
|
||||||
lpName,
|
lpName,
|
||||||
lInitialCount,
|
lInitialCount,
|
||||||
lMaximumCount);
|
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
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -523,7 +577,7 @@ CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
||||||
IN BOOL bInitialOwner,
|
IN BOOL bInitialOwner,
|
||||||
IN LPCWSTR lpName OPTIONAL)
|
IN LPCWSTR lpName OPTIONAL)
|
||||||
{
|
{
|
||||||
CreateNtObjectFromWin32Api(Mutex, Mutant, MUTEX,
|
CreateNtObjectFromWin32Api(Mutex, Mutant, MUTEX_ALL_ACCESS,
|
||||||
lpMutexAttributes,
|
lpMutexAttributes,
|
||||||
lpName,
|
lpName,
|
||||||
bInitialOwner);
|
bInitialOwner);
|
||||||
|
@ -599,7 +653,7 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
||||||
IN BOOL bInitialState,
|
IN BOOL bInitialState,
|
||||||
IN LPCWSTR lpName OPTIONAL)
|
IN LPCWSTR lpName OPTIONAL)
|
||||||
{
|
{
|
||||||
CreateNtObjectFromWin32Api(Event, Event, EVENT,
|
CreateNtObjectFromWin32Api(Event, Event, EVENT_ALL_ACCESS,
|
||||||
lpEventAttributes,
|
lpEventAttributes,
|
||||||
lpName,
|
lpName,
|
||||||
bManualReset ? NotificationEvent : SynchronizationEvent,
|
bManualReset ? NotificationEvent : SynchronizationEvent,
|
||||||
|
|
|
@ -132,14 +132,9 @@
|
||||||
// This macro uses the CreateNtObjectFromWin32Api macros from above to create an
|
// This macro uses the CreateNtObjectFromWin32Api macros from above to create an
|
||||||
// NT object based on the Win32 API settings.
|
// NT object based on the Win32 API settings.
|
||||||
//
|
//
|
||||||
// Note that it is hardcoded to always use XXX_ALL_ACCESS permissions, which is
|
#define CreateNtObjectFromWin32Api(obj, ntobj, access, sec, name, ...) \
|
||||||
// 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, ...) \
|
|
||||||
CreateNtObjectFromWin32ApiPrologue \
|
CreateNtObjectFromWin32ApiPrologue \
|
||||||
CreateNtObjectFromWin32ApiBody(ntobj, sec, name, capsobj##_ALL_ACCESS, ##__VA_ARGS__); \
|
CreateNtObjectFromWin32ApiBody(ntobj, sec, name, access, ##__VA_ARGS__); \
|
||||||
CreateNtObjectFromWin32ApiEpilogue
|
CreateNtObjectFromWin32ApiEpilogue
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -158,8 +158,8 @@
|
||||||
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr)
|
@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr)
|
||||||
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr)
|
@ stdcall CreateRemoteThread(long ptr long ptr long long ptr)
|
||||||
@ stdcall CreateSemaphoreA(ptr long long str)
|
@ stdcall CreateSemaphoreA(ptr long long str)
|
||||||
@ stdcall -stub -version=0x600+ CreateSemaphoreExA(ptr long long str long long)
|
@ stdcall -version=0x600+ CreateSemaphoreExA(ptr long long str long long)
|
||||||
@ stdcall -stub -version=0x600+ CreateSemaphoreExW(ptr long long wstr long long)
|
@ stdcall -version=0x600+ CreateSemaphoreExW(ptr long long wstr long long)
|
||||||
@ stdcall CreateSemaphoreW(ptr long long wstr)
|
@ stdcall CreateSemaphoreW(ptr long long wstr)
|
||||||
@ stdcall -i386 CreateSocketHandle()
|
@ stdcall -i386 CreateSocketHandle()
|
||||||
@ stdcall -version=0x600+ CreateSymbolicLinkA(str str long)
|
@ stdcall -version=0x600+ CreateSymbolicLinkA(str str long)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue