ReactOS  0.4.15-dev-1389-g828d5fa
IoEvent.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS kernel-mode tests
3  * LICENSE: GPLv2+ - See COPYING in the top level directory
4  * PURPOSE: Kernel-Mode Test Suite Event creation test
5  * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
6  */
7 
8 #include <kmt_test.h>
9 
10 #ifdef _WIN64
11 #define KERNEL_HANDLE_FLAG 0xFFFFFFFF80000000ULL
12 #else
13 #define KERNEL_HANDLE_FLAG 0x80000000
14 #endif
15 
16 #define CheckEventObject(Handle, Pointers, Handles) do \
17 { \
18  PUBLIC_OBJECT_BASIC_INFORMATION ObjectInfo; \
19  Status = ZwQueryObject(Handle, ObjectBasicInformation, \
20  &ObjectInfo, sizeof ObjectInfo, NULL); \
21  ok_eq_hex(Status, STATUS_SUCCESS); \
22  ok_eq_ulong(ObjectInfo.PointerCount, Pointers); \
23  ok_eq_ulong(ObjectInfo.HandleCount, Handles); \
24  ok_eq_ulong(ObjectInfo.Attributes, 0); \
25  ok_eq_ulong(ObjectInfo.GrantedAccess, EVENT_ALL_ACCESS); \
26  ok(((ULONG_PTR)Handle & KERNEL_HANDLE_FLAG) == KERNEL_HANDLE_FLAG, \
27  "Handle %p is not a kernel handle\n", Handle); \
28 } while (0)
29 
30 static
31 VOID
34  PUNICODE_STRING EventName,
36 {
38  PKEVENT Event, Event2;
39  HANDLE EventHandle, EventHandle2;
40  LONG State;
41 
42  /* Nameless event */
43  KmtStartSeh()
45  ok(Event != NULL, "Event is NULL\n");
46  ok(EventHandle != NULL, "EventHandle is NULL\n");
47  if (!skip(EventHandle != NULL, "No event\n"))
48  {
49  ok_eq_uint(Event->Header.Type, Type);
51  ok_eq_long(State, 1L);
55  }
57 
58  /* Named event */
59  EventHandle = NULL;
60  Event = CreateEvent(EventName, &EventHandle);
61  ok(Event != NULL, "Event is NULL\n");
62  ok(EventHandle != NULL, "EventHandle is NULL\n");
63  if (!skip(EventHandle != NULL, "No event\n"))
64  {
65  ok_eq_uint(Event->Header.Type, Type);
67  ok_eq_long(State, 1L);
69 
70  /* Open the existing one */
71  EventHandle2 = NULL;
72  Event2 = CreateEvent(EventName, &EventHandle2);
74  ok(Event2 != NULL, "Event is NULL\n");
75  ok(EventHandle2 != NULL, "EventHandle is NULL\n");
76  if (!skip(EventHandle2 != NULL, "No event\n"))
77  {
78  CheckEventObject(EventHandle2, 4UL, 2UL);
79  ZwClose(EventHandle2);
80  }
81 
85  }
86 }
87 
88 START_TEST(IoEvent)
89 {
90  PKEVENT Event, Event2;
91  HANDLE EventHandle = NULL, EventHandle2 = NULL;
92  UNICODE_STRING NotificationEventName = RTL_CONSTANT_STRING(L"\\BaseNamedObjects\\KmTestIoEventNotificationEvent");
93  UNICODE_STRING SynchronizationEventName = RTL_CONSTANT_STRING(L"\\BaseNamedObjects\\KmTestIoEventSynchronizationEvent");
94 
97 
98  /* Create different types with the same name */
99  Event = IoCreateNotificationEvent(&NotificationEventName, &EventHandle);
100  ok(Event != NULL, "Event is NULL\n");
101  ok(EventHandle != NULL, "EventHandle is NULL\n");
102  if (!skip(EventHandle != NULL, "No event\n"))
103  {
104  ok_eq_uint(Event->Header.Type, NotificationEvent);
105  Event2 = IoCreateSynchronizationEvent(&NotificationEventName, &EventHandle2);
106  ok(Event2 != NULL, "Event is NULL\n");
107  ok(EventHandle2 != NULL, "EventHandle is NULL\n");
108  if (!skip(EventHandle2 != NULL, "No event\n"))
109  {
111  ZwClose(EventHandle2);
112  }
114  }
115 
116 }
117 
#define CreateEvent
Definition: winbase.h:3588
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
LONG NTSTATUS
Definition: precomp.h:26
#define CheckEventObject(Handle, Pointers, Handles)
Definition: IoEvent.c:16
#define KmtEndSeh(ExpectedStatus)
Definition: kmt_test.h:283
_In_ ULONG _In_ ULONG State
Definition: potypes.h:516
START_TEST(IoEvent)
Definition: IoEvent.c:88
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
long LONG
Definition: pedump.c:60
static VOID TestCreateEvent(PRKEVENT(NTAPI *CreateEvent)(PUNICODE_STRING, PHANDLE), PUNICODE_STRING EventName, EVENT_TYPE Type)
Definition: IoEvent.c:32
_In_ PVOID _In_ ULONG Event
Definition: iotypes.h:450
PKEVENT NTAPI IoCreateNotificationEvent(IN PUNICODE_STRING EventName, IN PHANDLE EventHandle)
Definition: ioevent.c:70
enum _EVENT_TYPE EVENT_TYPE
Status
Definition: gdiplustypes.h:24
Type
Definition: Type.h:6
static const WCHAR L[]
Definition: oid.c:1250
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:454
#define KmtStartSeh()
Definition: kmt_test.h:277
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
DISPATCHER_HEADER Header
Definition: ketypes.h:800
PKEVENT NTAPI IoCreateSynchronizationEvent(IN PUNICODE_STRING EventName, IN PHANDLE EventHandle)
Definition: ioevent.c:82
#define skip(...)
Definition: atltest.h:64
LONG NTAPI KeReadStateEvent(IN PKEVENT Event)
Definition: eventobj.c:120
#define ok_eq_hex(value, expected)
#define STATUS_SUCCESS
Definition: shellext.h:65
#define ok_eq_uint(value, expected)
Definition: kmt_test.h:239
#define UL
Definition: tui.h:82
#define ok_eq_long(value, expected)
Definition: kmt_test.h:240
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
_Out_ PHANDLE EventHandle
Definition: iofuncs.h:855