FreeLdr Patch. Now fully loads ntoskrnl using a PE Loader, supports /3gb dynamically...
[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 #ifndef STDCALL_FUNC
23 #define STDCALL_FUNC(a) (STDCALL a)
24 #endif
25
26 /* Fixed precision types */
27 typedef signed char INT8, *PINT8;
28 typedef unsigned char UINT8, *PUINT8;
29
30 #ifndef __USE_W32API
31 typedef signed short INT16, *PINT16;
32 typedef unsigned short UINT16, *PUINT16;
33 #endif
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 STDCALL
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 unsigned long DWORD, *PDWORD;
75 typedef UINT32 UINT, *PUINT;
76 typedef unsigned long 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 typedef DWORD STDCALL_FUNC (*PTHREAD_START_ROUTINE) (LPVOID);
142
143
144 typedef union _LARGE_INTEGER
145 {
146 struct
147 {
148 DWORD LowPart;
149 LONG HighPart;
150 } u;
151 #ifdef ANONYMOUSUNIONS
152 struct
153 {
154 DWORD LowPart;
155 LONG HighPart;
156 };
157 #endif /* ANONYMOUSUNIONS */
158 LONGLONG QuadPart;
159 } LARGE_INTEGER, *PLARGE_INTEGER;
160
161 typedef union _ULARGE_INTEGER
162 {
163 struct
164 {
165 DWORD LowPart;
166 DWORD HighPart;
167 } u;
168 #ifdef ANONYMOUSUNIONS
169 struct
170 {
171 DWORD LowPart;
172 DWORD HighPart;
173 };
174 #endif /* ANONYMOUSUNIONS */
175 ULONGLONG QuadPart;
176 } ULARGE_INTEGER, *PULARGE_INTEGER;
177
178
179 /*
180 * Moved here by AG
181 * typedef ULARGE_INTEGER TIME, *PTIME;
182 */
183
184 typedef struct _FILETIME
185 {
186 DWORD dwLowDateTime;
187 DWORD dwHighDateTime;
188 } FILETIME, *LPFILETIME, *PFILETIME;
189
190 typedef struct _LIST_ENTRY
191 {
192 struct _LIST_ENTRY *Flink;
193 struct _LIST_ENTRY *Blink;
194 } LIST_ENTRY, *PLIST_ENTRY;
195
196 typedef struct _SINGLE_LIST_ENTRY
197 {
198 struct _SINGLE_LIST_ENTRY *Next;
199 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
200
201 #define SLIST_ENTRY SINGLE_LIST_ENTRY
202 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
203
204 typedef struct _UNICODE_STRING
205 {
206 USHORT Length;
207 USHORT MaximumLength;
208 PWSTR Buffer;
209 } UNICODE_STRING, *PUNICODE_STRING;
210
211 typedef const UNICODE_STRING* PCUNICODE_STRING;
212
213 #define UNICODE_NULL ((WCHAR)0)
214
215 typedef struct _FLOATING_SAVE_AREA
216 {
217 DWORD ControlWord;
218 DWORD StatusWord;
219 DWORD TagWord;
220 DWORD ErrorOffset;
221 DWORD ErrorSelector;
222 DWORD DataOffset;
223 DWORD DataSelector;
224 BYTE RegisterArea[80];
225 DWORD Cr0NpxState;
226 } FLOATING_SAVE_AREA;
227
228 typedef unsigned short RTL_ATOM;
229 typedef unsigned short *PRTL_ATOM;
230
231 #else /* __USE_W32API */
232
233 #include <windows.h>
234
235 #endif /* __USE_W32API */
236
237 #ifndef FALSE
238 #define FALSE 0
239 #endif
240 #ifndef TRUE
241 #define TRUE 1
242 #endif
243
244 #ifndef NULL
245 #ifdef __cplusplus
246 #define NULL 0
247 #else
248 #define NULL ((void*)0)
249 #endif /* __cplusplus */
250 #endif /* NULL */
251
252 #define CONST const
253
254 #ifdef __PPC__
255 #define CONTEXT_CONTROL 1L
256 #define CONTEXT_FLOATING_POINT 2L
257 #define CONTEXT_INTEGER 4L
258 #define CONTEXT_DEBUG_REGISTERS 8L
259
260 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
261 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
262
263 #else /* x86 */
264
265 #define SIZE_OF_80387_REGISTERS 80
266
267 /* Values for contextflags */
268 #define CONTEXT_i386 0x10000
269
270 #ifndef __USE_W32API
271
272 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
273 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
274 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
275 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
276 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
277 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x20)
278 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
279
280 #define MAXIMUM_SUPPORTED_EXTENSION 512
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
322 BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
323 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
324
325 typedef struct _CONTEXT_PPC
326 {
327 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
328 double Fpr0;
329 double Fpr1;
330 double Fpr2;
331 double Fpr3;
332 double Fpr4;
333 double Fpr5;
334 double Fpr6;
335 double Fpr7;
336 double Fpr8;
337 double Fpr9;
338 double Fpr10;
339 double Fpr11;
340 double Fpr12;
341 double Fpr13;
342 double Fpr14;
343 double Fpr15;
344 double Fpr16;
345 double Fpr17;
346 double Fpr18;
347 double Fpr19;
348 double Fpr20;
349 double Fpr21;
350 double Fpr22;
351 double Fpr23;
352 double Fpr24;
353 double Fpr25;
354 double Fpr26;
355 double Fpr27;
356 double Fpr28;
357 double Fpr29;
358 double Fpr30;
359 double Fpr31;
360 double Fpscr;
361
362 /* Integer registers returned when CONTEXT_INTEGER is set. */
363 DWORD Gpr0;
364 DWORD Gpr1;
365 DWORD Gpr2;
366 DWORD Gpr3;
367 DWORD Gpr4;
368 DWORD Gpr5;
369 DWORD Gpr6;
370 DWORD Gpr7;
371 DWORD Gpr8;
372 DWORD Gpr9;
373 DWORD Gpr10;
374 DWORD Gpr11;
375 DWORD Gpr12;
376 DWORD Gpr13;
377 DWORD Gpr14;
378 DWORD Gpr15;
379 DWORD Gpr16;
380 DWORD Gpr17;
381 DWORD Gpr18;
382 DWORD Gpr19;
383 DWORD Gpr20;
384 DWORD Gpr21;
385 DWORD Gpr22;
386 DWORD Gpr23;
387 DWORD Gpr24;
388 DWORD Gpr25;
389 DWORD Gpr26;
390 DWORD Gpr27;
391 DWORD Gpr28;
392 DWORD Gpr29;
393 DWORD Gpr30;
394 DWORD Gpr31;
395
396 DWORD Cr; /* Condition register */
397 DWORD Xer; /* Fixed point exception register */
398
399 /* The following are set when CONTEXT_CONTROL is set. */
400 DWORD Msr; /* Machine status register */
401 DWORD Iar; /* Instruction address register */
402 DWORD Lr; /* Link register */
403 DWORD Ctr; /* Control register */
404
405 /* Control which context values are returned */
406 DWORD ContextFlags;
407 DWORD Fill[3];
408
409 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
410 DWORD Dr0; /* Breakpoint Register 1 */
411 DWORD Dr1; /* Breakpoint Register 2 */
412 DWORD Dr2; /* Breakpoint Register 3 */
413 DWORD Dr3; /* Breakpoint Register 4 */
414 DWORD Dr4; /* Breakpoint Register 5 */
415 DWORD Dr5; /* Breakpoint Register 6 */
416 DWORD Dr6; /* Debug Status Register */
417 DWORD Dr7; /* Debug Control Register */
418 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
419
420 typedef struct value_ent
421 {
422 LPWSTR ve_valuename;
423 DWORD ve_valuelen;
424 DWORD ve_valueptr;
425 DWORD ve_type;
426 } WVALENT, *PWVALENT;
427
428 /* #include "except.h" */
429
430 #ifndef __USE_W32API
431
432 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
433
434 #ifdef __i386__
435
436 typedef CONTEXT_X86 CONTEXT;
437 typedef PCONTEXT_X86 PCONTEXT;
438 typedef LPCONTEXT_X86 LPCONTEXT;
439
440 #else /* __ppc__ */
441
442 typedef CONTEXT_PPC CONTEXT;
443 typedef PCONTEXT_PPC PCONTEXT;
444 typedef LPCONTEXT_PPC LPCONTEXT;
445
446 #endif
447
448 typedef WORD ATOM;
449
450 typedef struct _COORD
451 {
452 SHORT X;
453 SHORT Y;
454 } COORD;
455
456 typedef struct _SMALL_RECT
457 {
458 SHORT Left;
459 SHORT Top;
460 SHORT Right;
461 SHORT Bottom;
462 } SMALL_RECT, *PSMALL_RECT;
463
464 #include "except.h"
465
466 #else /* __USE_W32API */
467
468 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
469
470 #include <ddk/ntapi.h>
471
472 #endif /* __USE_W32API */
473
474 typedef struct _ADDRESS_RANGE
475 {
476 ULONG BaseAddrLow;
477 ULONG BaseAddrHigh;
478 ULONG LengthLow;
479 ULONG LengthHigh;
480 ULONG Type;
481 } ADDRESS_RANGE, *PADDRESS_RANGE;
482
483 #define MB_FLAGS_MEM_INFO (0x1)
484 #define MB_FLAGS_BOOT_DEVICE (0x2)
485 #define MB_FLAGS_COMMAND_LINE (0x4)
486 #define MB_FLAGS_MODULE_INFO (0x8)
487 #define MB_FLAGS_AOUT_SYMS (0x10)
488 #define MB_FLAGS_ELF_SYMS (0x20)
489 #define MB_FLAGS_MMAP_INFO (0x40)
490 #define MB_FLAGS_DRIVES_INFO (0x80)
491 #define MB_FLAGS_CONFIG_TABLE (0x100)
492 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
493 #define MB_FLAGS_APM_TABLE (0x400)
494 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
495
496 typedef struct _LOADER_MODULE
497 {
498 ULONG ModStart;
499 ULONG ModEnd;
500 ULONG String;
501 ULONG Reserved;
502 } LOADER_MODULE, *PLOADER_MODULE;
503
504 typedef struct _LOADER_PARAMETER_BLOCK
505 {
506 ULONG Flags;
507 ULONG MemLower;
508 ULONG MemHigher;
509 ULONG BootDevice;
510 ULONG CommandLine;
511 ULONG ModsCount;
512 ULONG ModsAddr;
513 UCHAR Syms[12];
514 ULONG MmapLength;
515 ULONG MmapAddr;
516 ULONG DrivesCount;
517 ULONG DrivesAddr;
518 ULONG ConfigTable;
519 ULONG BootLoaderName;
520 ULONG PageDirectoryStart;
521 ULONG PageDirectoryEnd;
522 ULONG KernelBase;
523 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
524
525 typedef enum _KAPC_ENVIRONMENT
526 {
527 OriginalApcEnvironment,
528 AttachedApcEnvironment,
529 CurrentApcEnvironment
530 } KAPC_ENVIRONMENT;
531
532 /* FIXME: Are these official values ?? */
533 #define STATUS_FS_QUERY_REQUIRED ((NTSTATUS)0xC1000001)
534 #define STATUS_HANDLE_NOT_WAITABLE ((NTSTATUS)0xC1000002)
535 #define STATUS_OBJECT_FILE_MISMATCH ((NTSTATUS)0xC1000003)
536 #define STATUS_INVALID_PARAMETER_MAX ((NTSTATUS)0xC1000004)
537 #define STATUS_CONFLICTING_ADDRESS ((NTSTATUS)0xC1000005)
538 #define STATUS_NO_MEDIA_IN_DRIVE ((NTSTATUS)0xC1000006)
539
540 #define NTSTAT_SEVERITY_SHIFT 30
541 #define NTSTAT_SEVERITY_MASK 0x00000003
542 #define NTSTAT_FACILITY_SHIFT 16
543 #define NTSTAT_FACILITY_MASK 0x00000FFF
544 #define NTSTAT_CUSTOMER_MASK 0x20000000
545
546 #define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
547 #define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
548 #define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
549
550 #endif /* __INCLUDE_TYPES_H */