xref: /reactos/sdk/include/ndk/umtypes.h (revision 8a978a17)
1 /*++ NDK Version: 0095
2 
3 Copyright (c) Alex Ionescu.  All rights reserved.
4 
5 Header Name:
6 
7     umtypes.h
8 
9 Abstract:
10 
11     Type definitions for the basic native types.
12 
13 Author:
14 
15     Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004
16 
17 --*/
18 
19 #if !defined(_NTDEF_) && !defined(_NTDEF_H)
20 #define _NTDEF_
21 #define _NTDEF_H
22 
23 //
24 // Use dummy macros, if SAL 2 is not available
25 //
26 #include <sal.h>
27 #if (_SAL_VERSION < 20)
28 #include <no_sal2.h>
29 #endif
30 
31 //
32 // Don't use the SDK status values
33 //
34 #ifndef WIN32_NO_STATUS
35 #define WIN32_NO_STATUS
36 #endif
37 
38 //
39 // Let the NDK know we're in Application Mode
40 //
41 #define NTOS_MODE_USER
42 
43 //
44 // Dependencies
45 //
46 #include <windef.h>
47 #undef WIN32_NO_STATUS
48 #include <ntstatus.h>
49 #include <winioctl.h>
50 #include <ntnls.h>
51 
52 //
53 // Compiler Definitions
54 //
55 #ifndef _MANAGED
56 #if defined(_M_IX86)
57 #ifndef FASTCALL
58 #define FASTCALL                        __fastcall
59 #endif
60 #else
61 #define FASTCALL
62 #endif
63 #else
64 #define FASTCALL                        NTAPI
65 #endif
66 
67 #if !defined(_M_CEE_PURE)
68 #define NTAPI_INLINE                    NTAPI
69 #else
70 #define NTAPI_INLINE
71 #endif
72 
73 //
74 // Alignment Macros
75 //
76 #define ALIGN_DOWN_BY(size, align) \
77     ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
78 
79 #define ALIGN_UP_BY(size, align) \
80     (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
81 
82 #define ALIGN_DOWN_POINTER_BY(ptr, align) \
83     ((PVOID)ALIGN_DOWN_BY(ptr, align))
84 
85 #define ALIGN_UP_POINTER_BY(ptr, align) \
86     ((PVOID)ALIGN_UP_BY(ptr, align))
87 
88 #define ALIGN_DOWN(size, type) \
89     ALIGN_DOWN_BY(size, sizeof(type))
90 
91 #define ALIGN_UP(size, type) \
92     ALIGN_UP_BY(size, sizeof(type))
93 
94 #define ALIGN_DOWN_POINTER(ptr, type) \
95     ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
96 
97 #define ALIGN_UP_POINTER(ptr, type) \
98     ALIGN_UP_POINTER_BY(ptr, sizeof(type))
99 
100 //
101 // Native API Return Value Macros
102 //
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)
107 
108 //
109 // Limits
110 //
111 #define MINCHAR                         0x80
112 #define MAXCHAR                         0x7f
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
120 
121 //
122 // Basic Types that aren't defined in User-Mode Headers
123 //
124 typedef CONST int CINT;
125 typedef CONST char *PCSZ;
126 typedef ULONG CLONG;
127 typedef short CSHORT;
128 typedef CSHORT *PCSHORT;
129 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
130 typedef LONG KPRIORITY;
131 
132 //
133 // Basic NT Types
134 //
135 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H) && !defined(_NTSECAPI_)
136 
137 #if !defined(__BCRYPT_H__) && !defined(__WINE_BCRYPT_H)
138 typedef _Return_type_success_(return >= 0) long NTSTATUS, *PNTSTATUS;
139 #endif
140 
141 typedef struct _UNICODE_STRING
142 {
143     USHORT Length;
144     USHORT MaximumLength;
145     PWSTR Buffer;
146 } UNICODE_STRING, *PUNICODE_STRING;
147 
148 typedef struct _STRING
149 {
150     USHORT Length;
151     USHORT MaximumLength;
152     PCHAR Buffer;
153 } STRING, *PSTRING;
154 
155 typedef struct _CSTRING
156 {
157     USHORT Length;
158     USHORT MaximumLength;
159     CONST CHAR *Buffer;
160 } CSTRING, *PCSTRING;
161 
162 #endif
163 
164 typedef struct _STRING32 {
165     USHORT   Length;
166     USHORT   MaximumLength;
167     ULONG  Buffer;
168 } STRING32, *PSTRING32,
169   UNICODE_STRING32, *PUNICODE_STRING32,
170   ANSI_STRING32, *PANSI_STRING32;
171 
172 typedef struct _STRING64 {
173     USHORT   Length;
174     USHORT   MaximumLength;
175     ULONGLONG  Buffer;
176 } STRING64, *PSTRING64,
177   UNICODE_STRING64, *PUNICODE_STRING64,
178   ANSI_STRING64, *PANSI_STRING64;
179 
180 
181 typedef struct _OBJECT_ATTRIBUTES
182 {
183     ULONG Length;
184     HANDLE RootDirectory;
185     PUNICODE_STRING ObjectName;
186     ULONG Attributes;
187     PVOID SecurityDescriptor;
188     PVOID SecurityQualityOfService;
189 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
190 
191 //
192 // ClientID Structure
193 //
194 typedef struct _CLIENT_ID
195 {
196     HANDLE UniqueProcess;
197     HANDLE UniqueThread;
198 } CLIENT_ID, *PCLIENT_ID;
199 
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;
208 
209 #endif
210