3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/synch/event.c
6 * PURPOSE: Local string functions
7 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
12 /* INCLUDES *****************************************************************/
17 #include "../include/debug.h"
20 /* FUNCTIONS ****************************************************************/
26 CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes
,
31 UNICODE_STRING EventNameU
;
32 ANSI_STRING EventName
;
37 RtlInitAnsiString(&EventName
,
39 RtlAnsiStringToUnicodeString(&EventNameU
,
44 EventHandle
= CreateEventW(lpEventAttributes
,
47 (lpName
? EventNameU
.Buffer
: NULL
));
51 RtlFreeUnicodeString(&EventNameU
);
62 CreateEventW(LPSECURITY_ATTRIBUTES lpEventAttributes
,
69 UNICODE_STRING UnicodeName
;
70 OBJECT_ATTRIBUTES ObjectAttributes
;
74 RtlInitUnicodeString(&UnicodeName
, (LPWSTR
)lpName
);
77 InitializeObjectAttributes(&ObjectAttributes
,
78 (lpName
? &UnicodeName
: NULL
),
80 (lpName
? hBaseDir
: NULL
),
83 if (lpEventAttributes
!= NULL
)
85 ObjectAttributes
.SecurityDescriptor
= lpEventAttributes
->lpSecurityDescriptor
;
86 if (lpEventAttributes
->bInheritHandle
)
88 ObjectAttributes
.Attributes
|= OBJ_INHERIT
;
92 Status
= NtCreateEvent(&hEvent
,
93 STANDARD_RIGHTS_ALL
| EVENT_READ_ACCESS
| EVENT_WRITE_ACCESS
,
95 (bManualReset
? NotificationEvent
: SynchronizationEvent
),
98 if (!NT_SUCCESS(Status
))
100 SetLastErrorByStatus(Status
);
112 OpenEventA(DWORD dwDesiredAccess
,
116 UNICODE_STRING EventNameU
;
117 ANSI_STRING EventName
;
122 SetLastErrorByStatus(STATUS_INVALID_PARAMETER
);
126 RtlInitUnicodeString(&EventNameU
,
129 RtlInitAnsiString(&EventName
,
131 RtlAnsiStringToUnicodeString(&EventNameU
,
135 EventHandle
= OpenEventW(dwDesiredAccess
,
139 RtlFreeUnicodeString(&EventNameU
);
149 OpenEventW(DWORD dwDesiredAccess
,
153 OBJECT_ATTRIBUTES ObjectAttributes
;
154 UNICODE_STRING EventNameString
;
156 HANDLE hEvent
= NULL
;
160 SetLastError(ERROR_INVALID_PARAMETER
);
164 RtlInitUnicodeString(&EventNameString
, (LPWSTR
)lpName
);
166 InitializeObjectAttributes(&ObjectAttributes
,
168 (bInheritHandle
? OBJ_INHERIT
: 0),
172 Status
= NtOpenEvent(&hEvent
,
175 if (!NT_SUCCESS(Status
))
177 SetLastErrorByStatus(Status
);
189 PulseEvent(HANDLE hEvent
)
193 Status
= NtPulseEvent(hEvent
, NULL
);
194 if (!NT_SUCCESS(Status
))
196 SetLastErrorByStatus (Status
);
208 ResetEvent(HANDLE hEvent
)
212 Status
= NtClearEvent(hEvent
);
213 if (!NT_SUCCESS(Status
))
215 SetLastErrorByStatus(Status
);
227 SetEvent(HANDLE hEvent
)
231 Status
= NtSetEvent(hEvent
, NULL
);
232 if (!NT_SUCCESS(Status
))
234 SetLastErrorByStatus(Status
);