1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024 |
- /*
- * ntdef.h
- *
- * This file is part of the ReactOS PSDK package.
- *
- * Contributors:
- * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
- *
- * 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 <ctype.h>
- #include <basetsd.h>
- #include <excpt.h>
- #include <sdkddkver.h>
- #include <specstrings.h>
- /* FIXME: Shouldn't be included! */
- #include <stdarg.h>
- #include <string.h>
- /* 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_ */
|