mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 17:01:53 +00:00
bug 1769 : from w3seek : Implement some new functions
svn path=/trunk/; revision=23719
This commit is contained in:
parent
b4e91152db
commit
0e96db4bf5
8 changed files with 364 additions and 100 deletions
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -8,6 +8,10 @@
|
|||
|
||||
/* INCLUDES *****************************************************************/
|
||||
|
||||
/* File contains Vista Semantics */
|
||||
#undef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600
|
||||
|
||||
#include <k32.h>
|
||||
|
||||
#define NDEBUG
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue