/* * ntdef.h * * This file is part of the ReactOS PSDK package. * * Contributors: * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef _NTDEF_ #define _NTDEF_ #ifdef _WINNT_ /* FIXME: In version two, warn about including both ntdef.h and winnt.h * #warning Including winnt.h and ntdef.h is deprecated and will be removed in a future release. Please use winternl.h */ #endif #include <_mingw.h> #if defined(__x86_64) && \ !(defined(_X86_) || defined(__i386__) || defined(_IA64_)) #if !defined(_AMD64_) #define _AMD64_ #endif #endif /* _AMD64_ */ #if defined(__ia64__) && \ !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_)) #if !defined(_IA64_) #define _IA64_ #endif #endif /* _IA64_ */ /* Dependencies */ #include #include #include #include #include /* FIXME: Shouldn't be included! */ #include #include /* Pseudo Modifiers for Input Parameters */ #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif #ifndef OPTIONAL #define OPTIONAL #endif #ifndef NOTHING #define NOTHING #endif #ifndef CRITICAL #define CRITICAL #endif #ifndef FAR #define FAR #endif /* Defines the "size" of an any-size array */ #ifndef ANYSIZE_ARRAY #define ANYSIZE_ARRAY 1 #endif /* Constant modifier */ #ifndef CONST #define CONST const #endif /* TRUE/FALSE */ #define FALSE 0 #define TRUE 1 /* NULL/NULL64 */ #ifndef NULL #ifdef __cplusplus #ifndef _WIN64 #define NULL 0 #else #define NULL 0LL #endif /* W64 */ #else #define NULL ((void *)0) #endif #endif /* NULL */ #ifndef NULL64 #ifdef __cplusplus #define NULL64 0LL #else #define NULL64 ((void * POINTER_64)0) #endif #endif /* NULL64 */ #undef UNALIGNED /* avoid redefinition warnings vs _mingw.h */ #undef UNALIGNED64 #if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64) || defined (_M_ARM) #define ALIGNMENT_MACHINE #define UNALIGNED __unaligned #if defined(_WIN64) #define UNALIGNED64 __unaligned #else #define UNALIGNED64 #endif #else #undef ALIGNMENT_MACHINE #define UNALIGNED #define UNALIGNED64 #endif #if defined(_WIN64) || defined(_M_ALPHA) #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG) #define MEMORY_ALLOCATION_ALIGNMENT 16 #else #define MAX_NATURAL_ALIGNMENT sizeof(ULONG) #define MEMORY_ALLOCATION_ALIGNMENT 8 #endif #if defined(_M_MRX000) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) && defined(ENABLE_RESTRICTED) #define RESTRICTED_POINTER __restrict #else #define RESTRICTED_POINTER #endif #define ARGUMENT_PRESENT(ArgumentPointer) \ ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL) /* Returns the base address of a structure from a structure member */ #ifndef CONTAINING_RECORD #define CONTAINING_RECORD(address, type, field) \ ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field)))) #endif /* Returns the byte offset of the specified structure's member */ #ifndef __GNUC__ #define FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field)) #else #define FIELD_OFFSET(Type, Field) __builtin_offsetof(Type, Field) #endif /* Returns the type's alignment */ #if defined(_MSC_VER) && (_MSC_VER >= 1300) #define TYPE_ALIGNMENT(t) __alignof(t) #else #define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test) #endif #if defined (_X86_) || defined (_AMD64_) #define PROBE_ALIGNMENT(v) TYPE_ALIGNMENT(ULONG) #elif defined (_IA64_) || defined (_ARM_) #define PROBE_ALIGNMENT(v) (TYPE_ALIGNMENT(v) > TYPE_ALIGNMENT(ULONG) ? TYPE_ALIGNMENT(v) : TYPE_ALIGNMENT(ULONG)) #endif /* Calling Conventions */ #if defined(_M_IX86) #define FASTCALL __fastcall #else #define FASTCALL #endif #if defined(_ARM_) #define NTAPI #else #define NTAPI __stdcall #endif #ifndef NOP_FUNCTION #if (_MSC_VER >= 1210) #define NOP_FUNCTION __noop #else #define NOP_FUNCTION (void)0 #endif #endif /* Import and Export Specifiers */ /* Done the same way as in windef.h for now */ #define DECLSPEC_IMPORT __declspec(dllimport) #define DECLSPEC_NORETURN __declspec(noreturn) #ifndef DECLSPEC_ADDRSAFE #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64)) #define DECLSPEC_ADDRSAFE __declspec(address_safe) #else #define DECLSPEC_ADDRSAFE #endif #endif /* DECLSPEC_ADDRSAFE */ #if !defined(_NTSYSTEM_) #define NTSYSAPI DECLSPEC_IMPORT #define NTSYSCALLAPI DECLSPEC_IMPORT #else #define NTSYSAPI #if defined(_NTDLLBUILD_) #define NTSYSCALLAPI #else #define NTSYSCALLAPI DECLSPEC_ADDRSAFE #endif #endif /* Inlines */ #ifndef FORCEINLINE #if !defined(_MSC_VER) || (_MSC_VER >=1200) #define FORCEINLINE __forceinline #else #define FORCEINLINE __inline #endif #endif /* FORCEINLINE */ #ifndef DECLSPEC_NOINLINE #if (_MSC_VER >= 1300) #define DECLSPEC_NOINLINE __declspec(noinline) #elif defined(__GNUC__) #define DECLSPEC_NOINLINE __attribute__((noinline)) #else #define DECLSPEC_NOINLINE #endif #endif /* DECLSPEC_NOINLINE */ #if !defined(_M_CEE_PURE) #define NTAPI_INLINE NTAPI #else #define NTAPI_INLINE #endif /* Use to specify structure alignment */ #ifndef DECLSPEC_ALIGN #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) #define DECLSPEC_ALIGN(x) __declspec(align(x)) #elif defined(__GNUC__) #define DECLSPEC_ALIGN(x) __attribute__ ((__aligned__ (x))) #else #define DECLSPEC_ALIGN(x) #endif #endif /* DECLSPEC_ALIGN */ #ifndef SYSTEM_CACHE_ALIGNMENT_SIZE #if defined(_AMD64_) || defined(_X86_) #define SYSTEM_CACHE_ALIGNMENT_SIZE 64 #else #define SYSTEM_CACHE_ALIGNMENT_SIZE 128 #endif #endif #ifndef DECLSPEC_CACHEALIGN #define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE) #endif #ifndef DECLSPEC_SELECTANY #if (_MSC_VER >= 1100) || defined(__GNUC__) #define DECLSPEC_SELECTANY __declspec(selectany) #else #define DECLSPEC_SELECTANY #endif #endif /* Use to silence unused variable warnings when it is intentional */ #define UNREFERENCED_PARAMETER(P) {(P) = (P);} #define UNREFERENCED_LOCAL_VARIABLE(L) {(L) = (L);} #define DBG_UNREFERENCED_PARAMETER(P) (P) #define DBG_UNREFERENCED_LOCAL_VARIABLE(L) (L) /* min/max helper macros */ #ifndef NOMINMAX #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #endif /* NOMINMAX */ /* Tell windef.h that we have defined some basic types */ #define BASETYPES /* Void Pointers */ typedef void *PVOID; typedef void * POINTER_64 PVOID64; /* Handle Type */ #ifdef STRICT typedef void *HANDLE; #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n #else typedef PVOID HANDLE; #define DECLARE_HANDLE(n) typedef HANDLE n #endif typedef HANDLE *PHANDLE; /* Upper-Case Versions of Some Standard C Types */ #ifndef VOID #define VOID void typedef char CHAR; typedef short SHORT; typedef __LONG32 LONG; #if !defined(MIDL_PASS) && !defined (__WIDL__) typedef int INT; #endif #endif typedef double DOUBLE; /* Unsigned Types */ typedef unsigned char UCHAR, *PUCHAR; typedef unsigned short USHORT, *PUSHORT; typedef unsigned __LONG32 ULONG, *PULONG; typedef CONST UCHAR *PCUCHAR; typedef CONST USHORT *PCUSHORT; typedef CONST ULONG *PCULONG; typedef UCHAR FCHAR; typedef USHORT FSHORT; typedef ULONG FLONG; typedef UCHAR BOOLEAN, *PBOOLEAN; typedef ULONG LOGICAL; typedef ULONG *PLOGICAL; /* Signed Types */ typedef SHORT *PSHORT; typedef LONG *PLONG; typedef LONG NTSTATUS; typedef NTSTATUS *PNTSTATUS; typedef signed char SCHAR; typedef SCHAR *PSCHAR; #ifndef _DEF_WINBOOL_ #define _DEF_WINBOOL_ typedef int WINBOOL; #pragma push_macro("BOOL") #undef BOOL #if !defined(__OBJC__) && !defined(__OBJC_BOOL) && !defined(__objc_INCLUDE_GNU) typedef int BOOL; #endif #define BOOL WINBOOL typedef BOOL *PBOOL; typedef BOOL *LPBOOL; #pragma pop_macro("BOOL") #endif /* _DEF_WINBOOL_ */ #ifndef _HRESULT_DEFINED #define _HRESULT_DEFINED typedef LONG HRESULT; #endif /* 64-bit types */ #define _ULONGLONG_ __MINGW_EXTENSION typedef __int64 LONGLONG, *PLONGLONG; __MINGW_EXTENSION typedef unsigned __int64 ULONGLONG, *PULONGLONG; #define _DWORDLONG_ typedef ULONGLONG DWORDLONG, *PDWORDLONG; /* Update Sequence Number */ typedef LONGLONG USN; /* ANSI (Multi-byte Character) types */ typedef CHAR *PCHAR, *LPCH, *PCH; typedef CONST CHAR *LPCCH, *PCCH; typedef CHAR *NPSTR, *LPSTR, *PSTR; typedef PSTR *PZPSTR; typedef CONST PSTR *PCZPSTR; typedef CONST CHAR *LPCSTR, *PCSTR; typedef PCSTR *PZPCSTR; /* Pointer to an Asciiz string */ typedef CHAR *PSZ; typedef CONST char *PCSZ; /* UNICODE (Wide Character) types */ #ifndef __WCHAR_DEFINED #define __WCHAR_DEFINED typedef wchar_t WCHAR; #endif typedef WCHAR *PWCHAR, *LPWCH, *PWCH; typedef CONST WCHAR *LPCWCH, *PCWCH; typedef WCHAR *NWPSTR, *LPWSTR, *PWSTR; typedef PWSTR *PZPWSTR; typedef CONST PWSTR *PCZPWSTR; typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR; typedef CONST WCHAR *LPCWSTR, *PCWSTR; typedef PCWSTR *PZPCWSTR; typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR; /* Cardinal Data Types */ typedef char CCHAR, *PCCHAR; typedef short CSHORT, *PCSHORT; typedef ULONG CLONG, *PCLONG; /* NLS basics (Locale and Language Ids) */ typedef ULONG LCID; typedef PULONG PLCID; typedef USHORT LANGID; /* Used to store a non-float 8 byte aligned structure */ typedef struct _QUAD { __C89_NAMELESS union { __MINGW_EXTENSION __int64 UseThisFieldToCopy; double DoNotUseThisField; } DUMMYUNIONNAME; } QUAD, *PQUAD, UQUAD, *PUQUAD; #ifndef _LARGE_INTEGER_DEFINED #define _LARGE_INTEGER_DEFINED /* Large Integer Unions */ #if defined(MIDL_PASS) || defined (__WIDL__) typedef struct _LARGE_INTEGER { #else typedef union _LARGE_INTEGER { __C89_NAMELESS struct { ULONG LowPart; LONG HighPart; } DUMMYSTRUCTNAME; struct { ULONG LowPart; LONG HighPart; } u; #endif /* MIDL_PASS */ LONGLONG QuadPart; } LARGE_INTEGER, *PLARGE_INTEGER; #if defined(MIDL_PASS) || defined (__WIDL__) typedef struct _ULARGE_INTEGER { #else typedef union _ULARGE_INTEGER { __C89_NAMELESS struct { ULONG LowPart; ULONG HighPart; } DUMMYSTRUCTNAME; struct { ULONG LowPart; ULONG HighPart; } u; #endif /* MIDL_PASS */ ULONGLONG QuadPart; } ULARGE_INTEGER, *PULARGE_INTEGER; /* Locally Unique Identifier */ typedef struct _LUID { ULONG LowPart; LONG HighPart; } LUID, *PLUID; #endif /* _LARGE_INTEGER_DEFINED */ /* Physical Addresses are always treated as 64-bit wide */ typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; /* Native API Return Value Macros */ #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1) #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2) #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3) /* String Types */ #ifndef __UNICODE_STRING_DEFINED #define __UNICODE_STRING_DEFINED typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; #endif typedef const UNICODE_STRING* PCUNICODE_STRING; #define UNICODE_NULL ((WCHAR)0) #define UNICODE_STRING_MAX_BYTES ((USHORT) 65534) #define UNICODE_STRING_MAX_CHARS (32767) #ifdef _MSC_VER #define DECLARE_UNICODE_STRING_SIZE(_var, _size) \ WCHAR _var ## _buffer[_size]; \ __pragma(warning(push)) __pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \ UNICODE_STRING _var = { 0, (_size) * sizeof(WCHAR) , _var ## _buffer } \ __pragma(warning(pop)) #define DECLARE_CONST_UNICODE_STRING(_var, _string) \ const WCHAR _var##_buffer[] = _string; \ __pragma(warning(push)) __pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \ const UNICODE_STRING _var = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWCH)_var##_buffer } \ __pragma(warning(pop)) #else #define DECLARE_UNICODE_STRING_SIZE(_var, _size) \ WCHAR _var ## _buffer[_size]; \ UNICODE_STRING _var = { 0, (_size) * sizeof(WCHAR) , _var ## _buffer } #define DECLARE_CONST_UNICODE_STRING(_var, _string) \ const WCHAR _var##_buffer[] = _string; \ const UNICODE_STRING _var = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWCH)_var##_buffer } #endif typedef struct _CSTRING { USHORT Length; USHORT MaximumLength; CONST CHAR *Buffer; } CSTRING, *PCSTRING; #define ANSI_NULL ((CHAR)0) #ifndef __STRING_DEFINED #define __STRING_DEFINED typedef struct _STRING { USHORT Length; USHORT MaximumLength; PCHAR Buffer; } STRING, *PSTRING; #endif typedef STRING ANSI_STRING; typedef PSTRING PANSI_STRING; typedef STRING OEM_STRING; typedef PSTRING POEM_STRING; typedef CONST STRING* PCOEM_STRING; typedef STRING CANSI_STRING; typedef PSTRING PCANSI_STRING; typedef STRING UTF8_STRING; typedef PSTRING PUTF8_STRING; typedef struct _STRING32 { USHORT Length; USHORT MaximumLength; ULONG Buffer; } STRING32, *PSTRING32, UNICODE_STRING32, *PUNICODE_STRING32, ANSI_STRING32, *PANSI_STRING32; typedef struct _STRING64 { USHORT Length; USHORT MaximumLength; ULONGLONG Buffer; } STRING64, *PSTRING64, UNICODE_STRING64, *PUNICODE_STRING64, ANSI_STRING64, *PANSI_STRING64; /* LangID and NLS */ #define MAKELANGID(p, s) ((((USHORT)(s)) << 10) | (USHORT)(p)) #define PRIMARYLANGID(lgid) ((USHORT)(lgid) & 0x3ff) #define SUBLANGID(lgid) ((USHORT)(lgid) >> 10) #define NLS_VALID_LOCALE_MASK 0x000fffff #define MAKELCID(lgid, srtid) ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) | \ ((ULONG)((USHORT)(lgid))))) #define MAKESORTLCID(lgid, srtid, ver) \ ((ULONG)((MAKELCID(lgid, srtid)) | \ (((ULONG)((USHORT)(ver))) << 20))) #define LANGIDFROMLCID(lcid) ((USHORT)(lcid)) #define SORTIDFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 16) & 0xf)) #define SORTVERSIONFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 20) & 0xf)) /* Object Attributes */ #ifndef __OBJECT_ATTRIBUTES_DEFINED #define __OBJECT_ATTRIBUTES_DEFINED typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; PUNICODE_STRING ObjectName; ULONG Attributes; PVOID SecurityDescriptor; PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; #endif typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES; typedef struct _OBJECT_ATTRIBUTES64 { ULONG Length; ULONG64 RootDirectory; ULONG64 ObjectName; ULONG Attributes; ULONG64 SecurityDescriptor; ULONG64 SecurityQualityOfService; } OBJECT_ATTRIBUTES64, *POBJECT_ATTRIBUTES64; typedef CONST OBJECT_ATTRIBUTES64 *PCOBJECT_ATTRIBUTES64; typedef struct _OBJECT_ATTRIBUTES32 { ULONG Length; ULONG RootDirectory; ULONG ObjectName; ULONG Attributes; ULONG SecurityDescriptor; ULONG SecurityQualityOfService; } OBJECT_ATTRIBUTES32, *POBJECT_ATTRIBUTES32; typedef CONST OBJECT_ATTRIBUTES32 *PCOBJECT_ATTRIBUTES32; /* Values for the Attributes member */ #define OBJ_INHERIT 0x00000002 #define OBJ_PERMANENT 0x00000010 #define OBJ_EXCLUSIVE 0x00000020 #define OBJ_CASE_INSENSITIVE 0x00000040 #define OBJ_OPENIF 0x00000080 #define OBJ_OPENLINK 0x00000100 #define OBJ_KERNEL_HANDLE 0x00000200 #define OBJ_FORCE_ACCESS_CHECK 0x00000400 #define OBJ_IGNORE_IMPERSONATED_DEVICEMAP 0x00000800 #define OBJ_DONT_REPARSE 0x00001000 #define OBJ_VALID_ATTRIBUTES 0x00001FF2 /* Helper Macro */ #define InitializeObjectAttributes(p,n,a,r,s) { \ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ (p)->RootDirectory = (r); \ (p)->Attributes = (a); \ (p)->ObjectName = (n); \ (p)->SecurityDescriptor = (s); \ (p)->SecurityQualityOfService = NULL; \ } #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) { sizeof(OBJECT_ATTRIBUTES), NULL, RTL_CONST_CAST(PUNICODE_STRING)(n), a, NULL, NULL } #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) /* Product Types */ typedef enum _NT_PRODUCT_TYPE { NtProductWinNt = 1, NtProductLanManNt, NtProductServer } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE; typedef enum _EVENT_TYPE { NotificationEvent, SynchronizationEvent } EVENT_TYPE; typedef enum _TIMER_TYPE { NotificationTimer, SynchronizationTimer } TIMER_TYPE; typedef enum _WAIT_TYPE { WaitAll, WaitAny } WAIT_TYPE; #ifndef _LIST_ENTRY_DEFINED #define _LIST_ENTRY_DEFINED /* Doubly Linked Lists */ typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY; typedef struct LIST_ENTRY32 { ULONG Flink; ULONG Blink; } LIST_ENTRY32, *PLIST_ENTRY32; typedef struct LIST_ENTRY64 { ULONGLONG Flink; ULONGLONG Blink; } LIST_ENTRY64, *PLIST_ENTRY64; /* Singly Linked Lists */ typedef struct _SINGLE_LIST_ENTRY32 { ULONG Next; } SINGLE_LIST_ENTRY32, *PSINGLE_LIST_ENTRY32; typedef struct _SINGLE_LIST_ENTRY { struct _SINGLE_LIST_ENTRY *Next; } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; #endif /* _LIST_ENTRY_DEFINED */ typedef struct _RTL_BALANCED_NODE { __C89_NAMELESS union { struct _RTL_BALANCED_NODE *Children[2]; __C89_NAMELESS struct { struct _RTL_BALANCED_NODE *Left; struct _RTL_BALANCED_NODE *Right; }; }; #define RTL_BALANCED_NODE_RESERVED_PARENT_MASK 3 __C89_NAMELESS union { UCHAR Red : 1; UCHAR Balance : 2; ULONG_PTR ParentValue; }; } RTL_BALANCED_NODE, *PRTL_BALANCED_NODE; #define RTL_BALANCED_NODE_GET_PARENT_POINTER(Node) ((PRTL_BALANCED_NODE)((Node)->ParentValue & ~RTL_BALANCED_NODE_RESERVED_PARENT_MASK)) #define ALL_PROCESSOR_GROUPS 0xffff #ifndef ___PROCESSOR_NUMBER_DEFINED #define ___PROCESSOR_NUMBER_DEFINED typedef struct _PROCESSOR_NUMBER { USHORT Group; UCHAR Number; UCHAR Reserved; } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER; #endif /* !___PROCESSOR_NUMBER_DEFINED */ struct _CONTEXT; struct _EXCEPTION_RECORD; #ifndef __PEXCEPTION_ROUTINE_DEFINED #define __PEXCEPTION_ROUTINE_DEFINED typedef EXCEPTION_DISPOSITION (NTAPI *PEXCEPTION_ROUTINE)( struct _EXCEPTION_RECORD *ExceptionRecord, PVOID EstablisherFrame, struct _CONTEXT *ContextRecord, PVOID DispatcherContext); #endif /* __PEXCEPTION_ROUTINE_DEFINED */ #ifndef ___GROUP_AFFINITY_DEFINED #define ___GROUP_AFFINITY_DEFINED typedef struct _GROUP_AFFINITY { KAFFINITY Mask; USHORT Group; USHORT Reserved[3]; } GROUP_AFFINITY, *PGROUP_AFFINITY; #endif /* !___GROUP_AFFINITY_DEFINED */ #ifndef _DEFINED__WNF_STATE_NAME #define _DEFINED__WNF_STATE_NAME typedef struct _WNF_STATE_NAME { ULONG Data[2]; } WNF_STATE_NAME, *PWNF_STATE_NAME; typedef const WNF_STATE_NAME *PCWNF_STATE_NAME; #endif /* Helper Macros */ #define RTL_FIELD_TYPE(type, field) (((type*)0)->field) #define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) * 8) #define RTL_BITS_OF_FIELD(type, field) (RTL_BITS_OF(RTL_FIELD_TYPE(type, field))) #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s } #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) #define RTL_SIZEOF_THROUGH_FIELD(type, field) \ (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field)) #define RTL_CONTAINS_FIELD(Struct, Size, Field) \ ( (((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)) ) #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0])) #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A) #ifdef ENABLE_RTL_NUMBER_OF_V2 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A) #else #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A) #endif #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A) #define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A) #define RTL_NUMBER_OF_FIELD(type, field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type, field))) /* Type Limits */ #define MINCHAR 0x80 #define MAXCHAR 0x7f #define MINSHORT 0x8000 #define MAXSHORT 0x7fff #define MINLONG 0x80000000 #define MAXLONG 0x7fffffff #define MAXUCHAR 0xff #define MAXUSHORT 0xffff #define MAXULONG 0xffffffff #define MAXLONGLONG (0x7fffffffffffffffll) /* Multiplication and Shift Operations */ #define Int32x32To64(a, b) (((LONGLONG) ((LONG) (a))) * ((LONGLONG) ((LONG) (b)))) #define UInt32x32To64(a, b) (((ULONGLONG) ((unsigned int) (a))) *((ULONGLONG) ((unsigned int) (b)))) #define Int64ShllMod32(a, b) (((ULONGLONG) (a)) << (b)) #define Int64ShraMod32(a, b) (((LONGLONG) (a)) >> (b)) #define Int64ShrlMod32(a, b) (((ULONGLONG) (a)) >> (b)) /* C_ASSERT Definition */ #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] #define VER_WORKSTATION_NT 0x40000000 #define VER_SERVER_NT 0x80000000 #define VER_SUITE_SMALLBUSINESS 0x00000001 #define VER_SUITE_ENTERPRISE 0x00000002 #define VER_SUITE_BACKOFFICE 0x00000004 #define VER_SUITE_COMMUNICATIONS 0x00000008 #define VER_SUITE_TERMINAL 0x00000010 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020 #define VER_SUITE_EMBEDDEDNT 0x00000040 #define VER_SUITE_DATACENTER 0x00000080 #define VER_SUITE_SINGLEUSERTS 0x00000100 #define VER_SUITE_PERSONAL 0x00000200 #define VER_SUITE_BLADE 0x00000400 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000 #define VER_SUITE_STORAGE_SERVER 0x00002000 #define VER_SUITE_COMPUTE_SERVER 0x00004000 #define VER_SUITE_WH_SERVER 0x00008000 #define VER_SUITE_MULTIUSERTS 0x00020000 /* Primary language IDs. */ #define LANG_NEUTRAL 0x00 #define LANG_INVARIANT 0x7f #define LANG_AFRIKAANS 0x36 #define LANG_ALBANIAN 0x1c #define LANG_ALSATIAN 0x84 #define LANG_AMHARIC 0x5e #define LANG_ARABIC 0x01 #define LANG_ARMENIAN 0x2b #define LANG_ASSAMESE 0x4d #define LANG_AZERI 0x2c #define LANG_BASHKIR 0x6d #define LANG_BASQUE 0x2d #define LANG_BELARUSIAN 0x23 #define LANG_BENGALI 0x45 #define LANG_BRETON 0x7e #define LANG_BOSNIAN 0x1a #define LANG_BOSNIAN_NEUTRAL 0x781a #define LANG_BULGARIAN 0x02 #define LANG_CATALAN 0x03 #define LANG_CHINESE 0x04 #define LANG_CHINESE_SIMPLIFIED 0x04 #define LANG_CHINESE_TRADITIONAL 0x7c04 #define LANG_CORSICAN 0x83 #define LANG_CROATIAN 0x1a #define LANG_CZECH 0x05 #define LANG_DANISH 0x06 #define LANG_DARI 0x8c #define LANG_DIVEHI 0x65 #define LANG_DUTCH 0x13 #define LANG_ENGLISH 0x09 #define LANG_ESTONIAN 0x25 #define LANG_FAEROESE 0x38 #define LANG_FARSI 0x29 #define LANG_FILIPINO 0x64 #define LANG_FINNISH 0x0b #define LANG_FRENCH 0x0c #define LANG_FRISIAN 0x62 #define LANG_GALICIAN 0x56 #define LANG_GEORGIAN 0x37 #define LANG_GERMAN 0x07 #define LANG_GREEK 0x08 #define LANG_GREENLANDIC 0x6f #define LANG_GUJARATI 0x47 #define LANG_HAUSA 0x68 #define LANG_HEBREW 0x0d #define LANG_HINDI 0x39 #define LANG_HUNGARIAN 0x0e #define LANG_ICELANDIC 0x0f #define LANG_IGBO 0x70 #define LANG_INDONESIAN 0x21 #define LANG_INUKTITUT 0x5d #define LANG_IRISH 0x3c #define LANG_ITALIAN 0x10 #define LANG_JAPANESE 0x11 #define LANG_KANNADA 0x4b #define LANG_KASHMIRI 0x60 #define LANG_KAZAK 0x3f #define LANG_KHMER 0x53 #define LANG_KICHE 0x86 #define LANG_KINYARWANDA 0x87 #define LANG_KONKANI 0x57 #define LANG_KOREAN 0x12 #define LANG_KYRGYZ 0x40 #define LANG_LAO 0x54 #define LANG_LATVIAN 0x26 #define LANG_LITHUANIAN 0x27 #define LANG_LOWER_SORBIAN 0x2e #define LANG_LUXEMBOURGISH 0x6e #define LANG_MACEDONIAN 0x2f #define LANG_MALAY 0x3e #define LANG_MALAYALAM 0x4c #define LANG_MALTESE 0x3a #define LANG_MANIPURI 0x58 #define LANG_MAORI 0x81 #define LANG_MAPUDUNGUN 0x7a #define LANG_MARATHI 0x4e #define LANG_MOHAWK 0x7c #define LANG_MONGOLIAN 0x50 #define LANG_NEPALI 0x61 #define LANG_NORWEGIAN 0x14 #define LANG_OCCITAN 0x82 #define LANG_ORIYA 0x48 #define LANG_PASHTO 0x63 #define LANG_PERSIAN 0x29 #define LANG_POLISH 0x15 #define LANG_PORTUGUESE 0x16 #define LANG_PUNJABI 0x46 #define LANG_QUECHUA 0x6b #define LANG_ROMANIAN 0x18 #define LANG_ROMANSH 0x17 #define LANG_RUSSIAN 0x19 #define LANG_SAMI 0x3b #define LANG_SANSKRIT 0x4f #define LANG_SERBIAN 0x1a #define LANG_SERBIAN_NEUTRAL 0x7c1a #define LANG_SINDHI 0x59 #define LANG_SINHALESE 0x5b #define LANG_SLOVAK 0x1b #define LANG_SLOVENIAN 0x24 #define LANG_SOTHO 0x6c #define LANG_SPANISH 0x0a #define LANG_SWAHILI 0x41 #define LANG_SWEDISH 0x1d #define LANG_SYRIAC 0x5a #define LANG_TAJIK 0x28 #define LANG_TAMAZIGHT 0x5f #define LANG_TAMIL 0x49 #define LANG_TATAR 0x44 #define LANG_TELUGU 0x4a #define LANG_THAI 0x1e #define LANG_TIBETAN 0x51 #define LANG_TIGRIGNA 0x73 #define LANG_TSWANA 0x32 #define LANG_TURKISH 0x1f #define LANG_TURKMEN 0x42 #define LANG_UIGHUR 0x80 #define LANG_UKRAINIAN 0x22 #define LANG_UPPER_SORBIAN 0x2e #define LANG_URDU 0x20 #define LANG_UZBEK 0x43 #define LANG_VIETNAMESE 0x2a #define LANG_WELSH 0x52 #define LANG_WOLOF 0x88 #define LANG_XHOSA 0x34 #define LANG_YAKUT 0x85 #define LANG_YI 0x78 #define LANG_YORUBA 0x6a #define LANG_ZULU 0x35 #ifndef NT_INCLUDED #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 #define FILE_SHARE_VALID_FLAGS (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE) #define FILE_SUPERSEDE 0x00000000 #define FILE_OPEN 0x00000001 #define FILE_CREATE 0x00000002 #define FILE_OPEN_IF 0x00000003 #define FILE_OVERWRITE 0x00000004 #define FILE_OVERWRITE_IF 0x00000005 #define FILE_MAXIMUM_DISPOSITION 0x00000005 #define FILE_DIRECTORY_FILE 0x00000001 #define FILE_WRITE_THROUGH 0x00000002 #define FILE_SEQUENTIAL_ONLY 0x00000004 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 #define FILE_NON_DIRECTORY_FILE 0x00000040 #define FILE_CREATE_TREE_CONNECTION 0x00000080 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 #define FILE_NO_EA_KNOWLEDGE 0x00000200 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400 #define FILE_RANDOM_ACCESS 0x00000800 #define FILE_DELETE_ON_CLOSE 0x00001000 #define FILE_OPEN_BY_FILE_ID 0x00002000 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 #define FILE_NO_COMPRESSION 0x00008000 #if (NTDDI_VERSION >= NTDDI_WIN7) #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000 #define FILE_DISALLOW_EXCLUSIVE 0x00020000 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #define FILE_RESERVE_OPFILTER 0x00100000 #define FILE_OPEN_REPARSE_POINT 0x00200000 #define FILE_OPEN_NO_RECALL 0x00400000 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 typedef struct _REPARSE_DATA_BUFFER { ULONG ReparseTag; USHORT ReparseDataLength; USHORT Reserved; union { struct { USHORT SubstituteNameOffset; USHORT SubstituteNameLength; USHORT PrintNameOffset; USHORT PrintNameLength; ULONG Flags; WCHAR PathBuffer[1]; } SymbolicLinkReparseBuffer; struct { USHORT SubstituteNameOffset; USHORT SubstituteNameLength; USHORT PrintNameOffset; USHORT PrintNameLength; WCHAR PathBuffer[1]; } MountPointReparseBuffer; struct { UCHAR DataBuffer[1]; } GenericReparseBuffer; }; } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) #endif /* !NT_DEFINED */ #endif /* _NTDEF_ */