Define macros for LPC limits:
[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 #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_FUNC
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 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_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
278
279 #endif /* !__USE_W32API */
280
281 /* our own invention */
282 #define FLAG_TRACE_BIT 0x100
283 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
284
285 #endif
286
287 typedef struct _CONTEXT_X86
288 {
289 DWORD ContextFlags;
290
291 DWORD Dr0;
292 DWORD Dr1;
293 DWORD Dr2;
294 DWORD Dr3;
295 DWORD Dr6;
296 DWORD Dr7;
297
298 FLOATING_SAVE_AREA FloatSave;
299
300 DWORD SegGs;
301 DWORD SegFs;
302 DWORD SegEs;
303 DWORD SegDs;
304
305 DWORD Edi;
306 DWORD Esi;
307 DWORD Ebx;
308 DWORD Edx;
309 DWORD Ecx;
310 DWORD Eax;
311
312 DWORD Ebp;
313 DWORD Eip;
314 DWORD SegCs;
315 DWORD EFlags;
316 DWORD Esp;
317 DWORD SegSs;
318 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
319
320 typedef struct _CONTEXT_PPC
321 {
322 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
323 double Fpr0;
324 double Fpr1;
325 double Fpr2;
326 double Fpr3;
327 double Fpr4;
328 double Fpr5;
329 double Fpr6;
330 double Fpr7;
331 double Fpr8;
332 double Fpr9;
333 double Fpr10;
334 double Fpr11;
335 double Fpr12;
336 double Fpr13;
337 double Fpr14;
338 double Fpr15;
339 double Fpr16;
340 double Fpr17;
341 double Fpr18;
342 double Fpr19;
343 double Fpr20;
344 double Fpr21;
345 double Fpr22;
346 double Fpr23;
347 double Fpr24;
348 double Fpr25;
349 double Fpr26;
350 double Fpr27;
351 double Fpr28;
352 double Fpr29;
353 double Fpr30;
354 double Fpr31;
355 double Fpscr;
356
357 /* Integer registers returned when CONTEXT_INTEGER is set. */
358 DWORD Gpr0;
359 DWORD Gpr1;
360 DWORD Gpr2;
361 DWORD Gpr3;
362 DWORD Gpr4;
363 DWORD Gpr5;
364 DWORD Gpr6;
365 DWORD Gpr7;
366 DWORD Gpr8;
367 DWORD Gpr9;
368 DWORD Gpr10;
369 DWORD Gpr11;
370 DWORD Gpr12;
371 DWORD Gpr13;
372 DWORD Gpr14;
373 DWORD Gpr15;
374 DWORD Gpr16;
375 DWORD Gpr17;
376 DWORD Gpr18;
377 DWORD Gpr19;
378 DWORD Gpr20;
379 DWORD Gpr21;
380 DWORD Gpr22;
381 DWORD Gpr23;
382 DWORD Gpr24;
383 DWORD Gpr25;
384 DWORD Gpr26;
385 DWORD Gpr27;
386 DWORD Gpr28;
387 DWORD Gpr29;
388 DWORD Gpr30;
389 DWORD Gpr31;
390
391 DWORD Cr; /* Condition register */
392 DWORD Xer; /* Fixed point exception register */
393
394 /* The following are set when CONTEXT_CONTROL is set. */
395 DWORD Msr; /* Machine status register */
396 DWORD Iar; /* Instruction address register */
397 DWORD Lr; /* Link register */
398 DWORD Ctr; /* Control register */
399
400 /* Control which context values are returned */
401 DWORD ContextFlags;
402 DWORD Fill[3];
403
404 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
405 DWORD Dr0; /* Breakpoint Register 1 */
406 DWORD Dr1; /* Breakpoint Register 2 */
407 DWORD Dr2; /* Breakpoint Register 3 */
408 DWORD Dr3; /* Breakpoint Register 4 */
409 DWORD Dr4; /* Breakpoint Register 5 */
410 DWORD Dr5; /* Breakpoint Register 6 */
411 DWORD Dr6; /* Debug Status Register */
412 DWORD Dr7; /* Debug Control Register */
413 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
414
415 typedef struct value_ent
416 {
417 LPWSTR ve_valuename;
418 DWORD ve_valuelen;
419 DWORD ve_valueptr;
420 DWORD ve_type;
421 } WVALENT, *PWVALENT;
422
423 /* #include "except.h" */
424
425 #ifndef __USE_W32API
426
427 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
428
429 #ifdef __i386__
430
431 typedef CONTEXT_X86 CONTEXT;
432 typedef PCONTEXT_X86 PCONTEXT;
433 typedef LPCONTEXT_X86 LPCONTEXT;
434
435 #else /* __ppc__ */
436
437 typedef CONTEXT_PPC CONTEXT;
438 typedef PCONTEXT_PPC PCONTEXT;
439 typedef LPCONTEXT_PPC LPCONTEXT;
440
441 #endif
442
443 typedef WORD ATOM;
444
445 typedef struct _COORD
446 {
447 SHORT X;
448 SHORT Y;
449 } COORD;
450
451 typedef struct _SMALL_RECT
452 {
453 SHORT Left;
454 SHORT Top;
455 SHORT Right;
456 SHORT Bottom;
457 } SMALL_RECT, *PSMALL_RECT;
458
459
460 typedef VOID STDCALL_FUNC
461 (*PTIMERAPCROUTINE)(
462 LPVOID lpArgToCompletionRoutine,
463 DWORD dwTimerLowValue,
464 DWORD dwTimerHighValue
465 );
466
467 #include "except.h"
468
469 #else /* __USE_W32API */
470
471 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
472
473 #include <ddk/ntapi.h>
474
475 #endif /* __USE_W32API */
476
477 typedef struct _ADDRESS_RANGE
478 {
479 ULONG BaseAddrLow;
480 ULONG BaseAddrHigh;
481 ULONG LengthLow;
482 ULONG LengthHigh;
483 ULONG Type;
484 } ADDRESS_RANGE, *PADDRESS_RANGE;
485
486 #define MB_FLAGS_MEM_INFO (0x1)
487 #define MB_FLAGS_BOOT_DEVICE (0x2)
488 #define MB_FLAGS_COMMAND_LINE (0x4)
489 #define MB_FLAGS_MODULE_INFO (0x8)
490 #define MB_FLAGS_AOUT_SYMS (0x10)
491 #define MB_FLAGS_ELF_SYMS (0x20)
492 #define MB_FLAGS_MMAP_INFO (0x40)
493 #define MB_FLAGS_DRIVES_INFO (0x80)
494 #define MB_FLAGS_CONFIG_TABLE (0x100)
495 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
496 #define MB_FLAGS_APM_TABLE (0x400)
497 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
498
499 typedef struct _LOADER_MODULE
500 {
501 ULONG ModStart;
502 ULONG ModEnd;
503 ULONG String;
504 ULONG Reserved;
505 } LOADER_MODULE, *PLOADER_MODULE;
506
507 typedef struct _LOADER_PARAMETER_BLOCK
508 {
509 ULONG Flags;
510 ULONG MemLower;
511 ULONG MemHigher;
512 ULONG BootDevice;
513 ULONG CommandLine;
514 ULONG ModsCount;
515 ULONG ModsAddr;
516 UCHAR Syms[12];
517 ULONG MmapLength;
518 ULONG MmapAddr;
519 ULONG DrivesCount;
520 ULONG DrivesAddr;
521 ULONG ConfigTable;
522 ULONG BootLoaderName;
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 */