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