3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the basic native types.
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
19 #if !defined(_NTDEF_) && !defined(_NTDEF_H)
24 // Use dummy macros, if SAL 2 is not available
27 #if (_SAL_VERSION < 20)
32 // Don't use the SDK status values
34 #ifndef WIN32_NO_STATUS
35 #define WIN32_NO_STATUS
39 // Let the NDK know we're in Application Mode
41 #define NTOS_MODE_USER
47 #undef WIN32_NO_STATUS
53 // Compiler Definitions
58 #define FASTCALL __fastcall
64 #define FASTCALL NTAPI
67 #if !defined(_M_CEE_PURE)
68 #define NTAPI_INLINE NTAPI
76 #define ALIGN_DOWN_BY(size, align) \
77 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
79 #define ALIGN_UP_BY(size, align) \
80 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
82 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
83 ((PVOID)ALIGN_DOWN_BY(ptr, align))
85 #define ALIGN_UP_POINTER_BY(ptr, align) \
86 ((PVOID)ALIGN_UP_BY(ptr, align))
88 #define ALIGN_DOWN(size, type) \
89 ALIGN_DOWN_BY(size, sizeof(type))
91 #define ALIGN_UP(size, type) \
92 ALIGN_UP_BY(size, sizeof(type))
94 #define ALIGN_DOWN_POINTER(ptr, type) \
95 ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
97 #define ALIGN_UP_POINTER(ptr, type) \
98 ALIGN_UP_POINTER_BY(ptr, sizeof(type))
101 // Native API Return Value Macros
103 #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
104 #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1)
105 #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2)
106 #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
113 #define MINSHORT 0x8000
114 #define MAXSHORT 0x7fff
115 #define MINLONG 0x80000000
116 #define MAXLONG 0x7fffffff
117 #define MAXUCHAR 0xff
118 #define MAXUSHORT 0xffff
119 #define MAXULONG 0xffffffff
122 // Basic Types that aren't defined in User-Mode Headers
124 typedef CONST
int CINT
;
125 typedef CONST
char *PCSZ
;
127 typedef short CSHORT
;
128 typedef CSHORT
*PCSHORT
;
129 typedef LARGE_INTEGER PHYSICAL_ADDRESS
, *PPHYSICAL_ADDRESS
;
130 typedef LONG KPRIORITY
;
135 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H) && !defined(_NTSECAPI_)
137 #if !defined(__BCRYPT_H__) && !defined(__WINE_BCRYPT_H)
138 typedef _Return_type_success_(return >= 0) long NTSTATUS
, *PNTSTATUS
;
141 typedef struct _UNICODE_STRING
144 USHORT MaximumLength
;
146 } UNICODE_STRING
, *PUNICODE_STRING
;
148 typedef struct _STRING
151 USHORT MaximumLength
;
155 typedef struct _CSTRING
158 USHORT MaximumLength
;
160 } CSTRING
, *PCSTRING
;
164 typedef struct _STRING32
{
166 USHORT MaximumLength
;
168 } STRING32
, *PSTRING32
,
169 UNICODE_STRING32
, *PUNICODE_STRING32
,
170 ANSI_STRING32
, *PANSI_STRING32
;
172 typedef struct _STRING64
{
174 USHORT MaximumLength
;
176 } STRING64
, *PSTRING64
,
177 UNICODE_STRING64
, *PUNICODE_STRING64
,
178 ANSI_STRING64
, *PANSI_STRING64
;
181 typedef struct _OBJECT_ATTRIBUTES
184 HANDLE RootDirectory
;
185 PUNICODE_STRING ObjectName
;
187 PVOID SecurityDescriptor
;
188 PVOID SecurityQualityOfService
;
189 } OBJECT_ATTRIBUTES
, *POBJECT_ATTRIBUTES
;
192 // ClientID Structure
194 typedef struct _CLIENT_ID
196 HANDLE UniqueProcess
;
198 } CLIENT_ID
, *PCLIENT_ID
;
200 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
201 typedef STRING ANSI_STRING
;
202 typedef PSTRING PANSI_STRING
;
203 typedef STRING OEM_STRING
;
204 typedef PSTRING POEM_STRING
;
205 typedef CONST STRING
* PCOEM_STRING
;
206 typedef STRING CANSI_STRING
;
207 typedef PSTRING PCANSI_STRING
;