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