mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 15:52:57 +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
|
CreateDirectoryW@8
|
||||||
CreateEventA@16
|
CreateEventA@16
|
||||||
CreateEventW@16
|
CreateEventW@16
|
||||||
|
CreateEventExA@16
|
||||||
|
CreateEventExW@16
|
||||||
CreateFiber@12
|
CreateFiber@12
|
||||||
CreateFiberEx@20
|
CreateFiberEx@20
|
||||||
CreateFileA@28
|
CreateFileA@28
|
||||||
|
@ -126,6 +128,8 @@ CreateMailslotW@16
|
||||||
CreateMemoryResourceNotification@4
|
CreateMemoryResourceNotification@4
|
||||||
CreateMutexA@12
|
CreateMutexA@12
|
||||||
CreateMutexW@12
|
CreateMutexW@12
|
||||||
|
CreateMutexExA@16
|
||||||
|
CreateMutexExW@16
|
||||||
CreateNamedPipeA@32
|
CreateNamedPipeA@32
|
||||||
CreateNamedPipeW@32
|
CreateNamedPipeW@32
|
||||||
CreateNlsSecurityDescriptor@12
|
CreateNlsSecurityDescriptor@12
|
||||||
|
@ -137,6 +141,8 @@ CreateProcessW@40
|
||||||
CreateRemoteThread@28
|
CreateRemoteThread@28
|
||||||
CreateSemaphoreA@16
|
CreateSemaphoreA@16
|
||||||
CreateSemaphoreW@16
|
CreateSemaphoreW@16
|
||||||
|
CreateSemaphoreExA@24
|
||||||
|
CreateSemaphoreExW@24
|
||||||
CreateSocketHandle@0
|
CreateSocketHandle@0
|
||||||
CreateSymbolicLinkA@12
|
CreateSymbolicLinkA@12
|
||||||
CreateSymbolicLinkW@12
|
CreateSymbolicLinkW@12
|
||||||
|
@ -148,6 +154,8 @@ CreateToolhelp32Snapshot@8
|
||||||
CreateVirtualBuffer@12
|
CreateVirtualBuffer@12
|
||||||
CreateWaitableTimerA@12
|
CreateWaitableTimerA@12
|
||||||
CreateWaitableTimerW@12
|
CreateWaitableTimerW@12
|
||||||
|
CreateWaitableTimerExA@16
|
||||||
|
CreateWaitableTimerExW@16
|
||||||
DeactivateActCtx@8
|
DeactivateActCtx@8
|
||||||
DebugActiveProcess@4
|
DebugActiveProcess@4
|
||||||
DebugActiveProcessStop@4
|
DebugActiveProcessStop@4
|
||||||
|
|
|
@ -8,7 +8,12 @@
|
||||||
<define name="_WIN32_WINNT">0x0502</define>
|
<define name="_WIN32_WINNT">0x0502</define>
|
||||||
<define name="__NO_CTYPE_INLINES" />
|
<define name="__NO_CTYPE_INLINES" />
|
||||||
<define name="WINVER">0x502</define>
|
<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>
|
<pch>k32.h</pch>
|
||||||
|
-->
|
||||||
<directory name="debug">
|
<directory name="debug">
|
||||||
<file>debugger.c</file>
|
<file>debugger.c</file>
|
||||||
<file>output.c</file>
|
<file>output.c</file>
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
|
|
||||||
/* INCLUDES *****************************************************************/
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
/* File contains Vista Semantics */
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0600
|
||||||
|
|
||||||
#include <k32.h>
|
#include <k32.h>
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
|
@ -17,10 +21,10 @@
|
||||||
|
|
||||||
HANDLE
|
HANDLE
|
||||||
WINAPI
|
WINAPI
|
||||||
CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
CreateEventExA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
||||||
IN BOOL bManualReset,
|
IN LPCSTR lpName OPTIONAL,
|
||||||
IN BOOL bInitialState,
|
IN DWORD dwFlags,
|
||||||
IN LPCSTR lpName OPTIONAL)
|
IN DWORD dwDesiredAccess)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ANSI_STRING AnsiName;
|
ANSI_STRING AnsiName;
|
||||||
|
@ -48,28 +52,40 @@ CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call the Unicode API */
|
/* Call the Unicode API */
|
||||||
return CreateEventW(lpEventAttributes,
|
return CreateEventExW(lpEventAttributes,
|
||||||
bManualReset,
|
UnicodeName,
|
||||||
bInitialState,
|
dwFlags,
|
||||||
UnicodeName);
|
dwDesiredAccess);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HANDLE
|
HANDLE
|
||||||
WINAPI
|
WINAPI
|
||||||
CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
CreateEventExW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
||||||
IN BOOL bManualReset,
|
IN LPCWSTR lpName OPTIONAL,
|
||||||
IN BOOL bInitialState,
|
IN DWORD dwFlags,
|
||||||
IN LPCWSTR lpName OPTIONAL)
|
IN DWORD dwDesiredAccess)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
OBJECT_ATTRIBUTES LocalAttributes;
|
OBJECT_ATTRIBUTES LocalAttributes;
|
||||||
POBJECT_ATTRIBUTES ObjectAttributes;
|
POBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
UNICODE_STRING ObjectName;
|
UNICODE_STRING ObjectName;
|
||||||
|
BOOLEAN InitialState;
|
||||||
|
EVENT_TYPE EventType;
|
||||||
|
|
||||||
/* Now check if we got a name */
|
/* Now check if we got a name */
|
||||||
if (lpName) RtlInitUnicodeString(&ObjectName, lpName);
|
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 */
|
/* Now convert the object attributes */
|
||||||
ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes,
|
ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes,
|
||||||
lpEventAttributes,
|
lpEventAttributes,
|
||||||
|
@ -77,11 +93,10 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
||||||
|
|
||||||
/* Create the event */
|
/* Create the event */
|
||||||
Status = NtCreateEvent(&Handle,
|
Status = NtCreateEvent(&Handle,
|
||||||
EVENT_ALL_ACCESS,
|
(ACCESS_MASK)dwDesiredAccess,
|
||||||
ObjectAttributes,
|
ObjectAttributes,
|
||||||
bManualReset ?
|
EventType,
|
||||||
NotificationEvent : SynchronizationEvent,
|
InitialState);
|
||||||
(BOOLEAN)bInitialState);
|
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* Check if the object already existed */
|
/* Check if the object already existed */
|
||||||
|
@ -105,6 +120,49 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL,
|
||||||
SetLastErrorByStatus(Status);
|
SetLastErrorByStatus(Status);
|
||||||
return NULL;
|
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
|
HANDLE
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
|
|
||||||
/* INCLUDES *****************************************************************/
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
/* File contains Vista Semantics */
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0600
|
||||||
|
|
||||||
#include <k32.h>
|
#include <k32.h>
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
|
@ -20,9 +24,10 @@
|
||||||
*/
|
*/
|
||||||
HANDLE
|
HANDLE
|
||||||
WINAPI
|
WINAPI
|
||||||
CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
CreateMutexExA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
||||||
IN BOOL bInitialOwner,
|
IN LPCSTR lpName OPTIONAL,
|
||||||
IN LPCSTR lpName OPTIONAL)
|
IN DWORD dwFlags,
|
||||||
|
IN DWORD dwDesiredAccess)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ANSI_STRING AnsiName;
|
ANSI_STRING AnsiName;
|
||||||
|
@ -50,9 +55,10 @@ CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call the Unicode API */
|
/* Call the Unicode API */
|
||||||
return CreateMutexW(lpMutexAttributes,
|
return CreateMutexExW(lpMutexAttributes,
|
||||||
bInitialOwner,
|
UnicodeName,
|
||||||
UnicodeName);
|
dwFlags,
|
||||||
|
dwDesiredAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -60,19 +66,29 @@ CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
||||||
*/
|
*/
|
||||||
HANDLE
|
HANDLE
|
||||||
WINAPI
|
WINAPI
|
||||||
CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
CreateMutexExW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
||||||
IN BOOL bInitialOwner,
|
IN LPCWSTR lpName OPTIONAL,
|
||||||
IN LPCWSTR lpName OPTIONAL)
|
IN DWORD dwFlags,
|
||||||
|
IN DWORD dwDesiredAccess)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
OBJECT_ATTRIBUTES LocalAttributes;
|
OBJECT_ATTRIBUTES LocalAttributes;
|
||||||
POBJECT_ATTRIBUTES ObjectAttributes;
|
POBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
UNICODE_STRING ObjectName;
|
UNICODE_STRING ObjectName;
|
||||||
|
BOOLEAN InitialOwner;
|
||||||
|
|
||||||
/* Now check if we got a name */
|
/* Now check if we got a name */
|
||||||
if (lpName) RtlInitUnicodeString(&ObjectName, lpName);
|
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 */
|
/* Now convert the object attributes */
|
||||||
ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes,
|
ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes,
|
||||||
lpMutexAttributes,
|
lpMutexAttributes,
|
||||||
|
@ -80,9 +96,9 @@ CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
||||||
|
|
||||||
/* Create the mutant */
|
/* Create the mutant */
|
||||||
Status = NtCreateMutant(&Handle,
|
Status = NtCreateMutant(&Handle,
|
||||||
MUTANT_ALL_ACCESS,
|
(ACCESS_MASK)dwDesiredAccess,
|
||||||
ObjectAttributes,
|
ObjectAttributes,
|
||||||
(BOOLEAN)bInitialOwner);
|
InitialOwner);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* Check if the object already existed */
|
/* Check if the object already existed */
|
||||||
|
@ -106,6 +122,47 @@ CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL,
|
||||||
SetLastErrorByStatus(Status);
|
SetLastErrorByStatus(Status);
|
||||||
return NULL;
|
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 *****************************************************************/
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
/* File contains Vista Semantics */
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0600
|
||||||
|
|
||||||
#include <k32.h>
|
#include <k32.h>
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
|
@ -20,10 +24,12 @@
|
||||||
*/
|
*/
|
||||||
HANDLE
|
HANDLE
|
||||||
WINAPI
|
WINAPI
|
||||||
CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
CreateSemaphoreExA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
IN LONG lInitialCount,
|
IN LONG lInitialCount,
|
||||||
IN LONG lMaximumCount,
|
IN LONG lMaximumCount,
|
||||||
IN LPCSTR lpName OPTIONAL)
|
IN LPCSTR lpName OPTIONAL,
|
||||||
|
IN DWORD dwFlags,
|
||||||
|
IN DWORD dwDesiredAccess)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ANSI_STRING AnsiName;
|
ANSI_STRING AnsiName;
|
||||||
|
@ -51,10 +57,12 @@ CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call the Unicode API */
|
/* Call the Unicode API */
|
||||||
return CreateSemaphoreW(lpSemaphoreAttributes,
|
return CreateSemaphoreExW(lpSemaphoreAttributes,
|
||||||
lInitialCount,
|
lInitialCount,
|
||||||
lMaximumCount,
|
lMaximumCount,
|
||||||
UnicodeName);
|
UnicodeName,
|
||||||
|
dwFlags,
|
||||||
|
dwDesiredAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -62,10 +70,12 @@ CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
*/
|
*/
|
||||||
HANDLE
|
HANDLE
|
||||||
WINAPI
|
WINAPI
|
||||||
CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
CreateSemaphoreExW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
IN LONG lInitialCount,
|
IN LONG lInitialCount,
|
||||||
IN LONG lMaximumCount,
|
IN LONG lMaximumCount,
|
||||||
IN LPCWSTR lpName OPTIONAL)
|
IN LPCWSTR lpName OPTIONAL,
|
||||||
|
IN DWORD dwFlags,
|
||||||
|
IN DWORD dwDesiredAccess)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
OBJECT_ATTRIBUTES LocalAttributes;
|
OBJECT_ATTRIBUTES LocalAttributes;
|
||||||
|
@ -76,6 +86,12 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
/* Now check if we got a name */
|
/* Now check if we got a name */
|
||||||
if (lpName) RtlInitUnicodeString(&ObjectName, lpName);
|
if (lpName) RtlInitUnicodeString(&ObjectName, lpName);
|
||||||
|
|
||||||
|
if (dwFlags != 0)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Now convert the object attributes */
|
/* Now convert the object attributes */
|
||||||
ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes,
|
ObjectAttributes = BasepConvertObjectAttributes(&LocalAttributes,
|
||||||
lpSemaphoreAttributes,
|
lpSemaphoreAttributes,
|
||||||
|
@ -83,7 +99,7 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
|
|
||||||
/* Create the semaphore */
|
/* Create the semaphore */
|
||||||
Status = NtCreateSemaphore(&Handle,
|
Status = NtCreateSemaphore(&Handle,
|
||||||
SEMAPHORE_ALL_ACCESS,
|
(ACCESS_MASK)dwDesiredAccess,
|
||||||
ObjectAttributes,
|
ObjectAttributes,
|
||||||
lInitialCount,
|
lInitialCount,
|
||||||
lMaximumCount);
|
lMaximumCount);
|
||||||
|
@ -110,6 +126,44 @@ CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL,
|
||||||
SetLastErrorByStatus(Status);
|
SetLastErrorByStatus(Status);
|
||||||
return NULL;
|
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 *****************************************************************/
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
/* File contains Vista Semantics */
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0600
|
||||||
|
|
||||||
#include <k32.h>
|
#include <k32.h>
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
|
@ -20,63 +24,10 @@
|
||||||
*/
|
*/
|
||||||
HANDLE
|
HANDLE
|
||||||
WINAPI
|
WINAPI
|
||||||
CreateWaitableTimerW(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL,
|
CreateWaitableTimerExA(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL,
|
||||||
IN BOOL bManualReset,
|
IN LPCSTR lpTimerName OPTIONAL,
|
||||||
IN LPCWSTR lpTimerName OPTIONAL)
|
IN DWORD dwFlags,
|
||||||
{
|
IN DWORD dwDesiredAccess)
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ANSI_STRING AnsiName;
|
ANSI_STRING AnsiName;
|
||||||
|
@ -104,9 +55,114 @@ CreateWaitableTimerA(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call the Unicode API */
|
/* Call the Unicode API */
|
||||||
return CreateWaitableTimerW(lpTimerAttributes,
|
return CreateWaitableTimerExW(lpTimerAttributes,
|
||||||
bManualReset,
|
UnicodeName,
|
||||||
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 *****************************************************************/
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
/* File contains Vista Semantics */
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0600
|
||||||
|
|
||||||
#include <k32.h>
|
#include <k32.h>
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
|
|
|
@ -535,6 +535,12 @@ extern "C" {
|
||||||
#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 0x2
|
#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 0x2
|
||||||
#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x4
|
#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x4
|
||||||
#endif
|
#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 RC_INVOKED
|
||||||
#ifndef _FILETIME_
|
#ifndef _FILETIME_
|
||||||
|
@ -1179,6 +1185,10 @@ BOOL WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
|
||||||
BOOL WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
|
BOOL WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
|
||||||
HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR);
|
HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR);
|
||||||
HANDLE WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR);
|
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);
|
LPVOID WINAPI CreateFiber(SIZE_T,LPFIBER_START_ROUTINE,LPVOID);
|
||||||
#if (_WIN32_WINNT >= 0x0400)
|
#if (_WIN32_WINNT >= 0x0400)
|
||||||
LPVOID WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID);
|
LPVOID WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID);
|
||||||
|
@ -1205,6 +1215,10 @@ HANDLE WINAPI CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE
|
||||||
#endif
|
#endif
|
||||||
HANDLE WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
|
HANDLE WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
|
||||||
HANDLE WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
|
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 CreateNamedPipeA(LPCSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
|
||||||
HANDLE WINAPI CreateNamedPipeW(LPCWSTR,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);
|
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 CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
|
||||||
HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
|
HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
|
||||||
HANDLE WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
|
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);
|
DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD);
|
||||||
#if (_WIN32_WINNT >= 0x0500)
|
#if (_WIN32_WINNT >= 0x0500)
|
||||||
HANDLE WINAPI CreateTimerQueue(void);
|
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 CreateThread(LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,PVOID,DWORD,PDWORD);
|
||||||
HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
|
HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
|
||||||
HANDLE WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
|
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)
|
#if (_WIN32_WINNT >= 0x0501)
|
||||||
BOOL WINAPI CreateWellKnownSid(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*);
|
BOOL WINAPI CreateWellKnownSid(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*);
|
||||||
BOOL WINAPI DeactivateActCtx(DWORD,ULONG_PTR);
|
BOOL WINAPI DeactivateActCtx(DWORD,ULONG_PTR);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue