2003-07-12 Casper S. Hornstrup <chorns@users.sourceforge.net>
[reactos.git] / reactos / include / ntos / types.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: include/types.h
5 * PURPOSE: Types used by all the parts of the system
6 * PROGRAMMER: David Welch <welch@cwcom.net>
7 * DEFINES: _WIN64: 64-bit architecture
8 * _WIN32: 32-bit architecture (default)
9 * UPDATE HISTORY:
10 * 27/06/00: Created
11 * 01/05/01: Portabillity changes
12 */
13
14 #ifndef __INCLUDE_TYPES_H
15 #define __INCLUDE_TYPES_H
16
17 #define EXPORTED __declspec(dllexport)
18 #define IMPORTED __declspec(dllimport)
19
20 #include <basetsd.h>
21
22 #ifdef __GNUC__
23 #define STDCALL_FUNC STDCALL
24 #else
25 #define STDCALL_FUNC(a) (__stdcall a )
26 #endif /*__GNUC__*/
27
28 /* Fixed precision types */
29 typedef signed char INT8, *PINT8;
30 typedef signed short INT16, *PINT16;
31
32 typedef unsigned char UINT8, *PUINT8;
33 typedef unsigned short UINT16, *PUINT16;
34
35
36 /* Check VOID before defining CHAR, SHORT */
37 #ifndef VOID
38 #define VOID void
39 typedef char CHAR;
40 typedef short SHORT;
41 #endif
42
43
44 #ifndef __USE_W32API
45
46 #ifdef i386
47 #define STDCALL __attribute__ ((stdcall))
48 #define CDECL __attribute__ ((cdecl))
49 #define CALLBACK WINAPI
50 #define PASCAL WINAPI
51 #else
52
53 #ifdef __GNUC__
54 #define STDCALL
55 #define CDECL
56 #define CALLBACK
57 #define PASCAL
58 #else
59 #define STDCALL __stdcall
60 #define CDECL __cdecl
61 #define CALLBACK
62 #define PASCAL
63 #endif /*__GNUC__*/
64
65 #endif /*i386*/
66
67 typedef INT32 INT, *PINT;
68 typedef LONG32 LONG, *PLONG;
69 typedef ULONG32 DWORD, *PDWORD;
70 typedef UINT32 UINT, *PUINT;
71 typedef ULONG32 ULONG, *PULONG;
72
73 #ifndef _WCHAR_T_
74 #define _WCHAR_T_
75 #define _WCHAR_T
76 #define _WCHAR_T_DEFINED
77 #ifndef __WCHAR_TYPE__
78 #define __WCHAR_TYPE__ short unsigned int
79 #endif
80
81 #ifndef __cplusplus
82 typedef __WCHAR_TYPE__ wchar_t;
83 #endif /* C++ */
84
85 #endif /* wchar_t not already defined */
86
87
88 //#ifndef __cplusplus
89 //#ifndef _WCHAR_T_DEFINED
90 //#define _WCHAR_T_DEFINED
91 //typedef unsigned short wchar_t;
92 //#endif
93 //#endif
94
95 typedef unsigned char UCHAR;
96 typedef unsigned short USHORT;
97 typedef wchar_t WCHAR;
98 typedef unsigned short WORD;
99 typedef int BOOL;
100 typedef unsigned char BOOLEAN;
101 typedef BOOLEAN* PBOOLEAN;
102 typedef wchar_t *LPWSTR;
103 typedef wchar_t *PWSTR;
104 typedef unsigned char *PUCHAR;
105 typedef unsigned short *PUSHORT;
106 typedef void *PVOID;
107 typedef unsigned char BYTE;
108 typedef void *LPVOID;
109 typedef float *PFLOAT;
110 typedef wchar_t *PWCH;
111 typedef unsigned short *PWORD;
112
113 #include <msvcrt/crttypes.h> // for definition of LONGLONG, PLONGLONG etc
114
115 typedef const void *LPCVOID;
116 typedef BYTE *LPBYTE, *PBYTE;
117 typedef BOOL *PBOOL;
118 typedef DWORD LCID;
119 typedef DWORD *PLCID;
120 typedef const char *LPCSTR;
121 typedef char *LPSTR;
122 typedef const wchar_t *LPCWSTR;
123 typedef CHAR *PCHAR;
124 typedef CHAR *PCH;
125 typedef void *HANDLE;
126 typedef HANDLE *PHANDLE;
127 typedef char CCHAR;
128 typedef CCHAR *PCCHAR;
129 typedef wchar_t *PWCHAR;
130 typedef ULONG WAIT_TYPE;
131 typedef USHORT CSHORT;
132 typedef const wchar_t *PCWSTR;
133 typedef char* PCSZ;
134
135 #ifdef __GNUC__
136 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
137 #else
138 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
139 #endif /*__GNUC__*/
140
141 typedef union _LARGE_INTEGER
142 {
143 struct
144 {
145 DWORD LowPart;
146 LONG HighPart;
147 } u;
148 #ifdef ANONYMOUSUNIONS
149 struct
150 {
151 DWORD LowPart;
152 LONG HighPart;
153 };
154 #endif /* ANONYMOUSUNIONS */
155 LONGLONG QuadPart;
156 } LARGE_INTEGER, *PLARGE_INTEGER;
157
158 typedef union _ULARGE_INTEGER
159 {
160 struct
161 {
162 DWORD LowPart;
163 DWORD HighPart;
164 } u;
165 #ifdef ANONYMOUSUNIONS
166 struct
167 {
168 DWORD LowPart;
169 DWORD HighPart;
170 };
171 #endif /* ANONYMOUSUNIONS */
172 ULONGLONG QuadPart;
173 } ULARGE_INTEGER, *PULARGE_INTEGER;
174
175 typedef struct _FILETIME
176 {
177 DWORD dwLowDateTime;
178 DWORD dwHighDateTime;
179 } FILETIME, *LPFILETIME, *PFILETIME;
180
181 typedef struct _LIST_ENTRY
182 {
183 struct _LIST_ENTRY *Flink;
184 struct _LIST_ENTRY *Blink;
185 } LIST_ENTRY, *PLIST_ENTRY;
186
187 typedef struct _SINGLE_LIST_ENTRY
188 {
189 struct _SINGLE_LIST_ENTRY *Next;
190 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
191
192 #define SLIST_ENTRY SINGLE_LIST_ENTRY
193 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
194
195 typedef struct _UNICODE_STRING
196 {
197 USHORT Length;
198 USHORT MaximumLength;
199 PWSTR Buffer;
200 } UNICODE_STRING, *PUNICODE_STRING;
201
202 typedef const UNICODE_STRING* PCUNICODE_STRING;
203
204 typedef struct _FLOATING_SAVE_AREA
205 {
206 DWORD ControlWord;
207 DWORD StatusWord;
208 DWORD TagWord;
209 DWORD ErrorOffset;
210 DWORD ErrorSelector;
211 DWORD DataOffset;
212 DWORD DataSelector;
213 BYTE RegisterArea[80];
214 DWORD Cr0NpxState;
215 } FLOATING_SAVE_AREA;
216
217 typedef unsigned short RTL_ATOM;
218 typedef unsigned short *PRTL_ATOM;
219
220 #else /* __USE_W32API */
221
222 #include <windows.h>
223
224 #endif /* __USE_W32API */
225
226 #ifndef FALSE
227 #define FALSE 0
228 #endif
229 #ifndef TRUE
230 #define TRUE 1
231 #endif
232
233 #ifndef NULL
234 #ifdef __cplusplus
235 #define NULL 0
236 #else
237 #define NULL ((void*)0)
238 #endif /* __cplusplus */
239 #endif /* NULL */
240
241 #define CONST const
242
243 #ifdef __PPC__
244 #define CONTEXT_CONTROL 1L
245 #define CONTEXT_FLOATING_POINT 2L
246 #define CONTEXT_INTEGER 4L
247 #define CONTEXT_DEBUG_REGISTERS 8L
248
249 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
250 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
251
252 #else /* x86 */
253
254 #define SIZE_OF_80387_REGISTERS 80
255
256 /* Values for contextflags */
257 #define CONTEXT_i386 0x10000
258
259 #ifndef __USE_W32API
260
261 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
262 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
263 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
264 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
265 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
266 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
267
268 #endif /* !__USE_W32API */
269
270 /* our own invention */
271 #define FLAG_TRACE_BIT 0x100
272 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
273
274 #endif
275
276 typedef struct _CONTEXT_X86
277 {
278 DWORD ContextFlags;
279
280 DWORD Dr0;
281 DWORD Dr1;
282 DWORD Dr2;
283 DWORD Dr3;
284 DWORD Dr6;
285 DWORD Dr7;
286
287 FLOATING_SAVE_AREA FloatSave;
288
289 DWORD SegGs;
290 DWORD SegFs;
291 DWORD SegEs;
292 DWORD SegDs;
293
294 DWORD Edi;
295 DWORD Esi;
296 DWORD Ebx;
297 DWORD Edx;
298 DWORD Ecx;
299 DWORD Eax;
300
301 DWORD Ebp;
302 DWORD Eip;
303 DWORD SegCs;
304 DWORD EFlags;
305 DWORD Esp;
306 DWORD SegSs;
307 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
308
309 typedef struct _CONTEXT_PPC
310 {
311 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
312 double Fpr0;
313 double Fpr1;
314 double Fpr2;
315 double Fpr3;
316 double Fpr4;
317 double Fpr5;
318 double Fpr6;
319 double Fpr7;
320 double Fpr8;
321 double Fpr9;
322 double Fpr10;
323 double Fpr11;
324 double Fpr12;
325 double Fpr13;
326 double Fpr14;
327 double Fpr15;
328 double Fpr16;
329 double Fpr17;
330 double Fpr18;
331 double Fpr19;
332 double Fpr20;
333 double Fpr21;
334 double Fpr22;
335 double Fpr23;
336 double Fpr24;
337 double Fpr25;
338 double Fpr26;
339 double Fpr27;
340 double Fpr28;
341 double Fpr29;
342 double Fpr30;
343 double Fpr31;
344 double Fpscr;
345
346 /* Integer registers returned when CONTEXT_INTEGER is set. */
347 DWORD Gpr0;
348 DWORD Gpr1;
349 DWORD Gpr2;
350 DWORD Gpr3;
351 DWORD Gpr4;
352 DWORD Gpr5;
353 DWORD Gpr6;
354 DWORD Gpr7;
355 DWORD Gpr8;
356 DWORD Gpr9;
357 DWORD Gpr10;
358 DWORD Gpr11;
359 DWORD Gpr12;
360 DWORD Gpr13;
361 DWORD Gpr14;
362 DWORD Gpr15;
363 DWORD Gpr16;
364 DWORD Gpr17;
365 DWORD Gpr18;
366 DWORD Gpr19;
367 DWORD Gpr20;
368 DWORD Gpr21;
369 DWORD Gpr22;
370 DWORD Gpr23;
371 DWORD Gpr24;
372 DWORD Gpr25;
373 DWORD Gpr26;
374 DWORD Gpr27;
375 DWORD Gpr28;
376 DWORD Gpr29;
377 DWORD Gpr30;
378 DWORD Gpr31;
379
380 DWORD Cr; /* Condition register */
381 DWORD Xer; /* Fixed point exception register */
382
383 /* The following are set when CONTEXT_CONTROL is set. */
384 DWORD Msr; /* Machine status register */
385 DWORD Iar; /* Instruction address register */
386 DWORD Lr; /* Link register */
387 DWORD Ctr; /* Control register */
388
389 /* Control which context values are returned */
390 DWORD ContextFlags;
391 DWORD Fill[3];
392
393 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
394 DWORD Dr0; /* Breakpoint Register 1 */
395 DWORD Dr1; /* Breakpoint Register 2 */
396 DWORD Dr2; /* Breakpoint Register 3 */
397 DWORD Dr3; /* Breakpoint Register 4 */
398 DWORD Dr4; /* Breakpoint Register 5 */
399 DWORD Dr5; /* Breakpoint Register 6 */
400 DWORD Dr6; /* Debug Status Register */
401 DWORD Dr7; /* Debug Control Register */
402 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
403
404 typedef struct value_ent
405 {
406 LPWSTR ve_valuename;
407 DWORD ve_valuelen;
408 DWORD ve_valueptr;
409 DWORD ve_type;
410 } WVALENT, *PWVALENT;
411
412 //#include "except.h"
413
414 #ifndef __USE_W32API
415
416 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
417
418 #ifdef __i386__
419
420 typedef CONTEXT_X86 CONTEXT;
421 typedef PCONTEXT_X86 PCONTEXT;
422 typedef LPCONTEXT_X86 LPCONTEXT;
423
424 #else /* __ppc__ */
425
426 typedef CONTEXT_PPC CONTEXT;
427 typedef PCONTEXT_PPC PCONTEXT;
428 typedef LPCONTEXT_PPC LPCONTEXT;
429
430 #endif
431
432 typedef WORD ATOM;
433
434 typedef struct _COORD
435 {
436 SHORT X;
437 SHORT Y;
438 } COORD;
439
440 typedef struct _SMALL_RECT
441 {
442 SHORT Left;
443 SHORT Top;
444 SHORT Right;
445 SHORT Bottom;
446 } SMALL_RECT, *PSMALL_RECT;
447
448
449 #ifdef __GNUC__
450 typedef VOID STDCALL
451 (*PTIMERAPCROUTINE)(
452 LPVOID lpArgToCompletionRoutine,
453 DWORD dwTimerLowValue,
454 DWORD dwTimerHighValue
455 );
456 #else
457 typedef VOID
458 (STDCALL *PTIMERAPCROUTINE)(
459 LPVOID lpArgToCompletionRoutine,
460 DWORD dwTimerLowValue,
461 DWORD dwTimerHighValue
462 );
463 #endif /*__GNUC__*/
464
465 #include "except.h"
466
467 #else /* __USE_W32API */
468
469 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
470
471 #include <ddk/ntapi.h>
472
473 #endif /* __USE_W32API */
474
475 typedef struct _ADDRESS_RANGE
476 {
477 ULONG BaseAddrLow;
478 ULONG BaseAddrHigh;
479 ULONG LengthLow;
480 ULONG LengthHigh;
481 ULONG Type;
482 } ADDRESS_RANGE, *PADDRESS_RANGE;
483
484 #define MB_FLAGS_MEM_INFO (0x1)
485 #define MB_FLAGS_BOOT_DEVICE (0x2)
486 #define MB_FLAGS_COMMAND_LINE (0x4)
487 #define MB_FLAGS_MODULE_INFO (0x8)
488 #define MB_FLAGS_AOUT_SYMS (0x10)
489 #define MB_FLAGS_ELF_SYMS (0x20)
490 #define MB_FLAGS_MMAP_INFO (0x40)
491 #define MB_FLAGS_DRIVES_INFO (0x80)
492 #define MB_FLAGS_CONFIG_TABLE (0x100)
493 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
494 #define MB_FLAGS_APM_TABLE (0x400)
495 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
496
497 typedef struct _LOADER_MODULE
498 {
499 ULONG ModStart;
500 ULONG ModEnd;
501 ULONG String;
502 ULONG Reserved;
503 } LOADER_MODULE, *PLOADER_MODULE;
504
505 typedef struct _LOADER_PARAMETER_BLOCK
506 {
507 ULONG Flags;
508 ULONG MemLower;
509 ULONG MemHigher;
510 ULONG BootDevice;
511 ULONG CommandLine;
512 ULONG ModsCount;
513 ULONG ModsAddr;
514 UCHAR Syms[12];
515 ULONG MmapLength;
516 ULONG MmapAddr;
517 ULONG DrivesCount;
518 ULONG DrivesAddr;
519 ULONG ConfigTable;
520 ULONG BootLoaderName;
521 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
522
523 typedef enum _KAPC_ENVIRONMENT
524 {
525 OriginalApcEnvironment,
526 AttachedApcEnvironment,
527 CurrentApcEnvironment
528 } KAPC_ENVIRONMENT;
529
530 /* FIXME: Are these official values ?? */
531 #define STATUS_FS_QUERY_REQUIRED ((NTSTATUS)0xC1000001)
532 #define STATUS_HANDLE_NOT_WAITABLE ((NTSTATUS)0xC1000002)
533 #define STATUS_OBJECT_FILE_MISMATCH ((NTSTATUS)0xC1000003)
534 #define STATUS_INVALID_PARAMETER_MAX ((NTSTATUS)0xC1000004)
535 #define STATUS_CONFLICTING_ADDRESS ((NTSTATUS)0xC1000005)
536 #define STATUS_NO_MEDIA_IN_DRIVE ((NTSTATUS)0xC1000006)
537
538 #define NTSTAT_SEVERITY_SHIFT 30
539 #define NTSTAT_SEVERITY_MASK 0x00000003
540 #define NTSTAT_FACILITY_SHIFT 16
541 #define NTSTAT_FACILITY_MASK 0x00000FFF
542 #define NTSTAT_CUSTOMER_MASK 0x20000000
543
544 #define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
545 #define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
546 #define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
547
548 #endif /* __INCLUDE_TYPES_H */