xref: /reactos/sdk/include/xdk/ntdef.template.h (revision c2c66aff)
1*c2c66affSColin Finck /*
2*c2c66affSColin Finck  * ntdef.h
3*c2c66affSColin Finck  *
4*c2c66affSColin Finck  * This file is part of the ReactOS PSDK package.
5*c2c66affSColin Finck  *
6*c2c66affSColin Finck  * Contributors:
7*c2c66affSColin Finck  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
8*c2c66affSColin Finck  *
9*c2c66affSColin Finck  * THIS SOFTWARE IS NOT COPYRIGHTED
10*c2c66affSColin Finck  *
11*c2c66affSColin Finck  * This source code is offered for use in the public domain. You may
12*c2c66affSColin Finck  * use, modify or distribute it freely.
13*c2c66affSColin Finck  *
14*c2c66affSColin Finck  * This code is distributed in the hope that it will be useful but
15*c2c66affSColin Finck  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
16*c2c66affSColin Finck  * DISCLAIMED. This includes but is not limited to warranties of
17*c2c66affSColin Finck  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18*c2c66affSColin Finck  *
19*c2c66affSColin Finck  */
20*c2c66affSColin Finck 
21*c2c66affSColin Finck #ifndef _NTDEF_
22*c2c66affSColin Finck #define _NTDEF_
23*c2c66affSColin Finck #pragma once
24*c2c66affSColin Finck 
25*c2c66affSColin Finck /* Dependencies */
26*c2c66affSColin Finck #include <ctype.h>
27*c2c66affSColin Finck $if(0)
28*c2c66affSColin Finck //#include <winapifamily.h>
29*c2c66affSColin Finck $endif()
30*c2c66affSColin Finck #include <basetsd.h>
31*c2c66affSColin Finck #include <guiddef.h>
32*c2c66affSColin Finck #include <excpt.h>
33*c2c66affSColin Finck #include <sdkddkver.h>
34*c2c66affSColin Finck #include <specstrings.h>
35*c2c66affSColin Finck #include <kernelspecs.h>
36*c2c66affSColin Finck 
37*c2c66affSColin Finck #ifdef __cplusplus
38*c2c66affSColin Finck extern "C" {
39*c2c66affSColin Finck #endif
40*c2c66affSColin Finck 
41*c2c66affSColin Finck /* Default to strict */
42*c2c66affSColin Finck #ifndef NO_STRICT
43*c2c66affSColin Finck #ifndef STRICT
44*c2c66affSColin Finck #define STRICT 1
45*c2c66affSColin Finck #endif
46*c2c66affSColin Finck #endif
47*c2c66affSColin Finck 
48*c2c66affSColin Finck /* Pseudo Modifiers for Input Parameters */
49*c2c66affSColin Finck 
50*c2c66affSColin Finck #ifndef IN
51*c2c66affSColin Finck #define IN
52*c2c66affSColin Finck #endif
53*c2c66affSColin Finck 
54*c2c66affSColin Finck #ifndef OUT
55*c2c66affSColin Finck #define OUT
56*c2c66affSColin Finck #endif
57*c2c66affSColin Finck 
58*c2c66affSColin Finck #ifndef OPTIONAL
59*c2c66affSColin Finck #define OPTIONAL
60*c2c66affSColin Finck #endif
61*c2c66affSColin Finck 
62*c2c66affSColin Finck #ifndef NOTHING
63*c2c66affSColin Finck #define NOTHING
64*c2c66affSColin Finck #endif
65*c2c66affSColin Finck 
66*c2c66affSColin Finck #ifndef CRITICAL
67*c2c66affSColin Finck #define CRITICAL
68*c2c66affSColin Finck #endif
69*c2c66affSColin Finck 
70*c2c66affSColin Finck /* Constant modifier */
71*c2c66affSColin Finck #ifndef CONST
72*c2c66affSColin Finck #define CONST const
73*c2c66affSColin Finck #endif
74*c2c66affSColin Finck 
75*c2c66affSColin Finck /* TRUE/FALSE */
76*c2c66affSColin Finck #define FALSE   0
77*c2c66affSColin Finck #define TRUE    1
78*c2c66affSColin Finck 
79*c2c66affSColin Finck /* NULL/NULL64 */
80*c2c66affSColin Finck #ifndef NULL
81*c2c66affSColin Finck #ifdef __cplusplus
82*c2c66affSColin Finck #define NULL    0
83*c2c66affSColin Finck #define NULL64  0
84*c2c66affSColin Finck #else
85*c2c66affSColin Finck #define NULL    ((void *)0)
86*c2c66affSColin Finck #define NULL64  ((void * POINTER_64)0)
87*c2c66affSColin Finck #endif
88*c2c66affSColin Finck #endif /* NULL */
89*c2c66affSColin Finck 
90*c2c66affSColin Finck #define ARGUMENT_PRESENT(ArgumentPointer) \
91*c2c66affSColin Finck   ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
92*c2c66affSColin Finck 
93*c2c66affSColin Finck #if defined(_MANAGED)
94*c2c66affSColin Finck  #define FASTCALL __stdcall
95*c2c66affSColin Finck #elif defined(_M_IX86)
96*c2c66affSColin Finck  #define FASTCALL __fastcall
97*c2c66affSColin Finck #else
98*c2c66affSColin Finck  #define FASTCALL
99*c2c66affSColin Finck #endif /* _MANAGED */
100*c2c66affSColin Finck 
101*c2c66affSColin Finck /* min/max helper macros */
102*c2c66affSColin Finck #ifndef NOMINMAX
103*c2c66affSColin Finck # ifndef min
104*c2c66affSColin Finck #  define min(a,b) (((a) < (b)) ? (a) : (b))
105*c2c66affSColin Finck # endif
106*c2c66affSColin Finck # ifndef max
107*c2c66affSColin Finck #  define max(a,b) (((a) > (b)) ? (a) : (b))
108*c2c66affSColin Finck # endif
109*c2c66affSColin Finck #endif /* NOMINMAX */
110*c2c66affSColin Finck 
111*c2c66affSColin Finck /* Tell windef.h that we have defined some basic types */
112*c2c66affSColin Finck #define BASETYPES
113*c2c66affSColin Finck 
114*c2c66affSColin Finck $define(_NTDEF_)
115*c2c66affSColin Finck $define(ULONG=ULONG)
116*c2c66affSColin Finck $define(USHORT=USHORT)
117*c2c66affSColin Finck $define(UCHAR=UCHAR)
118*c2c66affSColin Finck $include(ntbasedef.h)
119*c2c66affSColin Finck 
120*c2c66affSColin Finck typedef _Return_type_success_(return >= 0) LONG NTSTATUS;
121*c2c66affSColin Finck typedef NTSTATUS *PNTSTATUS;
122*c2c66affSColin Finck 
123*c2c66affSColin Finck #ifndef __SECSTATUS_DEFINED__
124*c2c66affSColin Finck typedef long SECURITY_STATUS;
125*c2c66affSColin Finck #define __SECSTATUS_DEFINED__
126*c2c66affSColin Finck #endif
127*c2c66affSColin Finck 
128*c2c66affSColin Finck /* Physical Addresses are always treated as 64-bit wide */
129*c2c66affSColin Finck typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
130*c2c66affSColin Finck 
131*c2c66affSColin Finck #define TIME LARGE_INTEGER
132*c2c66affSColin Finck #define _TIME _LARGE_INTEGER
133*c2c66affSColin Finck #define PTIME PLARGE_INTEGER
134*c2c66affSColin Finck #define LowTime LowPart
135*c2c66affSColin Finck #define HighTime HighPart
136*c2c66affSColin Finck 
137*c2c66affSColin Finck /* Used to store a non-float 8 byte aligned structure */
138*c2c66affSColin Finck typedef struct _QUAD
139*c2c66affSColin Finck {
140*c2c66affSColin Finck     _ANONYMOUS_UNION union
141*c2c66affSColin Finck     {
142*c2c66affSColin Finck         __GNU_EXTENSION __int64 UseThisFieldToCopy;
143*c2c66affSColin Finck         double DoNotUseThisField;
144*c2c66affSColin Finck     } DUMMYUNIONNAME;
145*c2c66affSColin Finck } QUAD, *PQUAD, UQUAD, *PUQUAD;
146*c2c66affSColin Finck 
147*c2c66affSColin Finck #if (_WIN32_WINNT >= 0x0600) || (defined(__cplusplus) && defined(WINDOWS_ENABLE_CPLUSPLUS))
148*c2c66affSColin Finck typedef CONST UCHAR *PCUCHAR;
149*c2c66affSColin Finck typedef CONST USHORT *PCUSHORT;
150*c2c66affSColin Finck typedef CONST ULONG *PCULONG;
151*c2c66affSColin Finck typedef CONST UQUAD *PCUQUAD;
152*c2c66affSColin Finck typedef CONST SCHAR *PCSCHAR;
153*c2c66affSColin Finck #endif /* (/_WIN32_WINNT >= 0x0600) */
154*c2c66affSColin Finck #if (_WIN32_WINNT >= 0x0600)
155*c2c66affSColin Finck typedef CONST NTSTATUS *PCNTSTATUS;
156*c2c66affSColin Finck #endif /* (/_WIN32_WINNT >= 0x0600) */
157*c2c66affSColin Finck 
158*c2c66affSColin Finck /* String Types */
159*c2c66affSColin Finck typedef struct _STRING {
160*c2c66affSColin Finck   USHORT Length;
161*c2c66affSColin Finck   USHORT MaximumLength;
162*c2c66affSColin Finck #ifdef MIDL_PASS
163*c2c66affSColin Finck   [size_is(MaximumLength), length_is(Length) ]
164*c2c66affSColin Finck #endif
165*c2c66affSColin Finck   _Field_size_bytes_part_opt_(MaximumLength, Length) PCHAR Buffer;
166*c2c66affSColin Finck } STRING, *PSTRING,
167*c2c66affSColin Finck   ANSI_STRING, *PANSI_STRING,
168*c2c66affSColin Finck   OEM_STRING, *POEM_STRING;
169*c2c66affSColin Finck 
170*c2c66affSColin Finck typedef CONST STRING* PCOEM_STRING;
171*c2c66affSColin Finck typedef STRING CANSI_STRING;
172*c2c66affSColin Finck typedef PSTRING PCANSI_STRING;
173*c2c66affSColin Finck 
174*c2c66affSColin Finck typedef struct _STRING32 {
175*c2c66affSColin Finck   USHORT   Length;
176*c2c66affSColin Finck   USHORT   MaximumLength;
177*c2c66affSColin Finck   $ULONG  Buffer;
178*c2c66affSColin Finck } STRING32, *PSTRING32,
179*c2c66affSColin Finck   UNICODE_STRING32, *PUNICODE_STRING32,
180*c2c66affSColin Finck   ANSI_STRING32, *PANSI_STRING32;
181*c2c66affSColin Finck 
182*c2c66affSColin Finck typedef struct _STRING64 {
183*c2c66affSColin Finck   USHORT   Length;
184*c2c66affSColin Finck   USHORT   MaximumLength;
185*c2c66affSColin Finck   ULONGLONG  Buffer;
186*c2c66affSColin Finck } STRING64, *PSTRING64,
187*c2c66affSColin Finck   UNICODE_STRING64, *PUNICODE_STRING64,
188*c2c66affSColin Finck   ANSI_STRING64, *PANSI_STRING64;
189*c2c66affSColin Finck 
190*c2c66affSColin Finck typedef struct _CSTRING {
191*c2c66affSColin Finck   USHORT Length;
192*c2c66affSColin Finck   USHORT MaximumLength;
193*c2c66affSColin Finck   CONST CHAR *Buffer;
194*c2c66affSColin Finck } CSTRING, *PCSTRING;
195*c2c66affSColin Finck 
196*c2c66affSColin Finck typedef struct _UNICODE_STRING {
197*c2c66affSColin Finck   USHORT Length;
198*c2c66affSColin Finck   USHORT MaximumLength;
199*c2c66affSColin Finck #ifdef MIDL_PASS
200*c2c66affSColin Finck   [size_is(MaximumLength / 2), length_is((Length) / 2)] PUSHORT Buffer;
201*c2c66affSColin Finck #else
202*c2c66affSColin Finck   _Field_size_bytes_part_(MaximumLength, Length) PWCH Buffer;
203*c2c66affSColin Finck #endif
204*c2c66affSColin Finck } UNICODE_STRING, *PUNICODE_STRING;
205*c2c66affSColin Finck typedef const UNICODE_STRING* PCUNICODE_STRING;
206*c2c66affSColin Finck 
207*c2c66affSColin Finck typedef USHORT RTL_STRING_LENGTH_TYPE;
208*c2c66affSColin Finck 
209*c2c66affSColin Finck #ifdef __cplusplus
210*c2c66affSColin Finck extern "C++" template<typename _Type> struct _RTL_remove_const_template;
211*c2c66affSColin Finck extern "C++" template<typename _Type> struct _RTL_remove_const_template<const _Type&> { typedef _Type type; };
212*c2c66affSColin Finck #define _RTL_CONSTANT_STRING_remove_const_macro(s) \
213*c2c66affSColin Finck     (const_cast<_RTL_remove_const_template<decltype((s)[0])>::type*>(s))
214*c2c66affSColin Finck extern "C++" template<class _Ty> struct _RTL_CONSTANT_STRING_type_check_template;
215*c2c66affSColin Finck extern "C++" template<class _Ty, int _Count>	struct _RTL_CONSTANT_STRING_type_check_template<const _Ty (&)[_Count]> { typedef char type; };
216*c2c66affSColin Finck #define _RTL_CONSTANT_STRING_type_check(s) _RTL_CONSTANT_STRING_type_check_template<decltype(s)>::type
217*c2c66affSColin Finck #else
218*c2c66affSColin Finck # define _RTL_CONSTANT_STRING_remove_const_macro(s) (s)
219*c2c66affSColin Finck char _RTL_CONSTANT_STRING_type_check(const void *s);
220*c2c66affSColin Finck #endif
221*c2c66affSColin Finck #define RTL_CONSTANT_STRING(s) { \
222*c2c66affSColin Finck     sizeof(s)-sizeof((s)[0]), \
223*c2c66affSColin Finck     sizeof(s) / sizeof(_RTL_CONSTANT_STRING_type_check(s)), \
224*c2c66affSColin Finck     _RTL_CONSTANT_STRING_remove_const_macro(s) }
225*c2c66affSColin Finck 
226*c2c66affSColin Finck #ifdef _MSC_VER
227*c2c66affSColin Finck #define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
228*c2c66affSColin Finck   WCHAR _var ## _buffer[_size]; \
229*c2c66affSColin Finck   __pragma(warning(push)) __pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \
230*c2c66affSColin Finck   UNICODE_STRING _var = { 0, (_size) * sizeof(WCHAR) , _var ## _buffer } \
231*c2c66affSColin Finck   __pragma(warning(pop))
232*c2c66affSColin Finck 
233*c2c66affSColin Finck #define DECLARE_CONST_UNICODE_STRING(_var, _string) \
234*c2c66affSColin Finck   const WCHAR _var##_buffer[] = _string; \
235*c2c66affSColin Finck   __pragma(warning(push)) __pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \
236*c2c66affSColin Finck   const UNICODE_STRING _var = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWCH)_var##_buffer } \
237*c2c66affSColin Finck   __pragma(warning(pop))
238*c2c66affSColin Finck #else
239*c2c66affSColin Finck #define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
240*c2c66affSColin Finck   WCHAR _var ## _buffer[_size]; \
241*c2c66affSColin Finck   UNICODE_STRING _var = { 0, (_size) * sizeof(WCHAR) , _var ## _buffer }
242*c2c66affSColin Finck 
243*c2c66affSColin Finck #define DECLARE_CONST_UNICODE_STRING(_var, _string) \
244*c2c66affSColin Finck   const WCHAR _var##_buffer[] = _string; \
245*c2c66affSColin Finck   const UNICODE_STRING _var = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWCH)_var##_buffer }
246*c2c66affSColin Finck #endif
247*c2c66affSColin Finck 
248*c2c66affSColin Finck #define DECLARE_GLOBAL_CONST_UNICODE_STRING(_var, _str) \
249*c2c66affSColin Finck   extern const __declspec(selectany) UNICODE_STRING _var = RTL_CONSTANT_STRING(_str)
250*c2c66affSColin Finck 
251*c2c66affSColin Finck /* Object Attributes */
252*c2c66affSColin Finck typedef struct _OBJECT_ATTRIBUTES {
253*c2c66affSColin Finck   ULONG Length;
254*c2c66affSColin Finck   HANDLE RootDirectory;
255*c2c66affSColin Finck   PUNICODE_STRING ObjectName;
256*c2c66affSColin Finck   ULONG Attributes;
257*c2c66affSColin Finck   PVOID SecurityDescriptor;
258*c2c66affSColin Finck   PVOID SecurityQualityOfService;
259*c2c66affSColin Finck } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
260*c2c66affSColin Finck typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;
261*c2c66affSColin Finck 
262*c2c66affSColin Finck typedef struct _OBJECT_ATTRIBUTES32 {
263*c2c66affSColin Finck   ULONG Length;
264*c2c66affSColin Finck   ULONG RootDirectory;
265*c2c66affSColin Finck   ULONG ObjectName;
266*c2c66affSColin Finck   ULONG Attributes;
267*c2c66affSColin Finck   ULONG SecurityDescriptor;
268*c2c66affSColin Finck   ULONG SecurityQualityOfService;
269*c2c66affSColin Finck } OBJECT_ATTRIBUTES32, *POBJECT_ATTRIBUTES32;
270*c2c66affSColin Finck typedef CONST OBJECT_ATTRIBUTES32 *PCOBJECT_ATTRIBUTES32;
271*c2c66affSColin Finck 
272*c2c66affSColin Finck typedef struct _OBJECT_ATTRIBUTES64 {
273*c2c66affSColin Finck   ULONG Length;
274*c2c66affSColin Finck   ULONG64 RootDirectory;
275*c2c66affSColin Finck   ULONG64 ObjectName;
276*c2c66affSColin Finck   ULONG Attributes;
277*c2c66affSColin Finck   ULONG64 SecurityDescriptor;
278*c2c66affSColin Finck   ULONG64 SecurityQualityOfService;
279*c2c66affSColin Finck } OBJECT_ATTRIBUTES64, *POBJECT_ATTRIBUTES64;
280*c2c66affSColin Finck typedef CONST OBJECT_ATTRIBUTES64 *PCOBJECT_ATTRIBUTES64;
281*c2c66affSColin Finck 
282*c2c66affSColin Finck #define OBJ_HANDLE_TAGBITS      0x00000003L
283*c2c66affSColin Finck 
284*c2c66affSColin Finck /* Values for the Attributes member */
285*c2c66affSColin Finck #define OBJ_INHERIT             0x00000002L
286*c2c66affSColin Finck #define OBJ_PERMANENT           0x00000010L
287*c2c66affSColin Finck #define OBJ_EXCLUSIVE           0x00000020L
288*c2c66affSColin Finck #define OBJ_CASE_INSENSITIVE    0x00000040L
289*c2c66affSColin Finck #define OBJ_OPENIF              0x00000080L
290*c2c66affSColin Finck #define OBJ_OPENLINK            0x00000100L
291*c2c66affSColin Finck #define OBJ_KERNEL_HANDLE       0x00000200L
292*c2c66affSColin Finck #define OBJ_FORCE_ACCESS_CHECK  0x00000400L
293*c2c66affSColin Finck #define OBJ_VALID_ATTRIBUTES    0x000007F2L
294*c2c66affSColin Finck 
295*c2c66affSColin Finck /* Helper Macro */
296*c2c66affSColin Finck #define InitializeObjectAttributes(p,n,a,r,s) { \
297*c2c66affSColin Finck   (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
298*c2c66affSColin Finck   (p)->RootDirectory = (r); \
299*c2c66affSColin Finck   (p)->ObjectName = (n); \
300*c2c66affSColin Finck   (p)->Attributes = (a); \
301*c2c66affSColin Finck   (p)->SecurityDescriptor = (s); \
302*c2c66affSColin Finck   (p)->SecurityQualityOfService = NULL; \
303*c2c66affSColin Finck }
304*c2c66affSColin Finck 
305*c2c66affSColin Finck #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n,a) { \
306*c2c66affSColin Finck   sizeof(OBJECT_ATTRIBUTES), \
307*c2c66affSColin Finck   NULL, \
308*c2c66affSColin Finck   RTL_CONST_CAST(PUNICODE_STRING)(n), \
309*c2c66affSColin Finck   a, \
310*c2c66affSColin Finck   NULL, \
311*c2c66affSColin Finck   NULL  \
312*c2c66affSColin Finck }
313*c2c66affSColin Finck 
314*c2c66affSColin Finck #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
315*c2c66affSColin Finck     RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
316*c2c66affSColin Finck 
317*c2c66affSColin Finck #ifdef _MSC_VER
318*c2c66affSColin Finck  #pragma warning(push)
319*c2c66affSColin Finck  #pragma warning(disable:4214) /* Bit fields of other types than int */
320*c2c66affSColin Finck #endif /* _MSC_VER */
321*c2c66affSColin Finck typedef struct _RTL_BALANCED_NODE
322*c2c66affSColin Finck {
323*c2c66affSColin Finck     _ANONYMOUS_UNION union
324*c2c66affSColin Finck     {
325*c2c66affSColin Finck         struct _RTL_BALANCED_NODE *Children[2];
326*c2c66affSColin Finck         _ANONYMOUS_STRUCT struct
327*c2c66affSColin Finck         {
328*c2c66affSColin Finck             struct _RTL_BALANCED_NODE *Left;
329*c2c66affSColin Finck             struct _RTL_BALANCED_NODE *Right;
330*c2c66affSColin Finck         } DUMMYSTRUCTNAME;
331*c2c66affSColin Finck     } DUMMYUNIONNAME;
332*c2c66affSColin Finck     _ANONYMOUS_UNION union
333*c2c66affSColin Finck     {
334*c2c66affSColin Finck         UCHAR Red : 1;
335*c2c66affSColin Finck         UCHAR Balance : 2;
336*c2c66affSColin Finck         ULONG_PTR ParentValue;
337*c2c66affSColin Finck     } DUMMYUNIONNAME2;
338*c2c66affSColin Finck } RTL_BALANCED_NODE, *PRTL_BALANCED_NODE;
339*c2c66affSColin Finck #ifdef _MSC_VER
340*c2c66affSColin Finck  #pragma warning(pop)
341*c2c66affSColin Finck #endif /* _MSC_VER */
342*c2c66affSColin Finck 
343*c2c66affSColin Finck #define RTL_BALANCED_NODE_RESERVED_PARENT_MASK 3
344*c2c66affSColin Finck #define RTL_BALANCED_NODE_GET_PARENT_POINTER(Node) \
345*c2c66affSColin Finck     ((PRTL_BALANCED_NODE)((Node)->ParentValue & \
346*c2c66affSColin Finck                           ~RTL_BALANCED_NODE_RESERVED_PARENT_MASK))
347*c2c66affSColin Finck 
348*c2c66affSColin Finck /* Product Types */
349*c2c66affSColin Finck typedef enum _NT_PRODUCT_TYPE {
350*c2c66affSColin Finck   NtProductWinNt = 1,
351*c2c66affSColin Finck   NtProductLanManNt,
352*c2c66affSColin Finck   NtProductServer
353*c2c66affSColin Finck } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
354*c2c66affSColin Finck 
355*c2c66affSColin Finck typedef enum _EVENT_TYPE {
356*c2c66affSColin Finck   NotificationEvent,
357*c2c66affSColin Finck   SynchronizationEvent
358*c2c66affSColin Finck } EVENT_TYPE;
359*c2c66affSColin Finck 
360*c2c66affSColin Finck typedef enum _TIMER_TYPE {
361*c2c66affSColin Finck   NotificationTimer,
362*c2c66affSColin Finck   SynchronizationTimer
363*c2c66affSColin Finck } TIMER_TYPE;
364*c2c66affSColin Finck 
365*c2c66affSColin Finck typedef enum _WAIT_TYPE {
366*c2c66affSColin Finck   WaitAll,
367*c2c66affSColin Finck   WaitAny
368*c2c66affSColin Finck } WAIT_TYPE;
369*c2c66affSColin Finck 
370*c2c66affSColin Finck #ifndef MIDL_PASS
371*c2c66affSColin Finck FORCEINLINE
372*c2c66affSColin Finck VOID
373*c2c66affSColin Finck ListEntry32To64(
374*c2c66affSColin Finck     _In_ PLIST_ENTRY32 ListEntry32,
375*c2c66affSColin Finck     _Out_ PLIST_ENTRY64 ListEntry64)
376*c2c66affSColin Finck {
377*c2c66affSColin Finck     ListEntry64->Flink = ListEntry32->Flink;
378*c2c66affSColin Finck     ListEntry64->Blink = ListEntry32->Blink;
379*c2c66affSColin Finck }
380*c2c66affSColin Finck 
381*c2c66affSColin Finck FORCEINLINE
382*c2c66affSColin Finck VOID
383*c2c66affSColin Finck ListEntry64To32(
384*c2c66affSColin Finck     _In_ PLIST_ENTRY64 ListEntry64,
385*c2c66affSColin Finck     _Out_ PLIST_ENTRY32 ListEntry32)
386*c2c66affSColin Finck {
387*c2c66affSColin Finck     /* ASSERT without ASSERT or intrinsics ... */
388*c2c66affSColin Finck     if (((ListEntry64->Flink >> 32) != 0) ||
389*c2c66affSColin Finck         ((ListEntry64->Blink >> 32) != 0))
390*c2c66affSColin Finck     {
391*c2c66affSColin Finck         (VOID)*(volatile LONG*)(LONG_PTR)-1;
392*c2c66affSColin Finck     }
393*c2c66affSColin Finck     ListEntry32->Flink = ListEntry64->Flink & 0xFFFFFFFF;
394*c2c66affSColin Finck     ListEntry32->Blink = ListEntry64->Blink & 0xFFFFFFFF;
395*c2c66affSColin Finck }
396*c2c66affSColin Finck #endif /* !MIDL_PASS */
397*c2c66affSColin Finck 
398*c2c66affSColin Finck #ifdef __cplusplus
399*c2c66affSColin Finck } // extern "C"
400*c2c66affSColin Finck #endif
401*c2c66affSColin Finck 
402*c2c66affSColin Finck #endif /* _NTDEF_ */
403