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)
11 * 01/05/01: Portabillity changes
14 #ifndef __INCLUDE_TYPES_H
15 #define __INCLUDE_TYPES_H
17 #define EXPORTED __declspec(dllexport)
18 #define IMPORTED __declspec(dllimport)
23 #define STDCALL_FUNC STDCALL
25 #define STDCALL_FUNC(a) (__stdcall a )
28 /* Fixed precision types */
29 typedef signed char INT8, *PINT8;
30 typedef signed short INT16, *PINT16;
32 typedef unsigned char UINT8, *PUINT8;
33 typedef unsigned short UINT16, *PUINT16;
36 /* Check VOID before defining CHAR, SHORT */
49 #define STDCALL __attribute__ ((stdcall))
52 #define CDECL __attribute__ ((cdecl))
55 #define STDCALL __stdcall
58 #define CALLBACK WINAPI
68 #define STDCALL __stdcall
76 typedef INT32 INT, *PINT;
77 typedef LONG32 LONG, *PLONG;
78 typedef ULONG32 DWORD, *PDWORD;
79 typedef UINT32 UINT, *PUINT;
80 typedef ULONG32 ULONG, *PULONG;
85 #define _WCHAR_T_DEFINED
86 #ifndef __WCHAR_TYPE__
87 #define __WCHAR_TYPE__ short unsigned int
91 typedef __WCHAR_TYPE__ wchar_t;
94 #endif /* wchar_t not already defined */
97 /* #ifndef __cplusplus
98 #ifndef _WCHAR_T_DEFINED
99 #define _WCHAR_T_DEFINED
100 typedef unsigned short wchar_t;
105 typedef unsigned char UCHAR;
106 typedef unsigned short USHORT;
107 typedef wchar_t WCHAR;
108 typedef unsigned short WORD;
110 typedef unsigned char BOOLEAN;
111 typedef BOOLEAN* PBOOLEAN;
112 typedef wchar_t *LPWSTR;
113 typedef wchar_t *PWSTR;
114 typedef unsigned char *PUCHAR;
115 typedef unsigned short *PUSHORT;
117 typedef unsigned char BYTE;
118 typedef void *LPVOID;
119 typedef float *PFLOAT;
120 typedef wchar_t *PWCH;
121 typedef unsigned short *PWORD;
123 #include <msvcrt/crttypes.h> /* for definition of LONGLONG, PLONGLONG etc */
125 typedef const void *LPCVOID;
126 typedef BYTE *LPBYTE, *PBYTE;
129 typedef DWORD *PLCID;
130 typedef const char *LPCSTR;
132 typedef const wchar_t *LPCWSTR;
135 typedef void *HANDLE;
136 typedef HANDLE *PHANDLE;
138 typedef CCHAR *PCCHAR;
139 typedef wchar_t *PWCHAR;
140 typedef ULONG WAIT_TYPE;
141 typedef USHORT CSHORT;
142 typedef const wchar_t *PCWSTR;
143 typedef const char* PCSZ;
146 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
148 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
151 typedef union _LARGE_INTEGER
158 #ifdef ANONYMOUSUNIONS
164 #endif /* ANONYMOUSUNIONS */
166 } LARGE_INTEGER, *PLARGE_INTEGER;
168 typedef union _ULARGE_INTEGER
175 #ifdef ANONYMOUSUNIONS
181 #endif /* ANONYMOUSUNIONS */
183 } ULARGE_INTEGER, *PULARGE_INTEGER;
188 * typedef ULARGE_INTEGER TIME, *PTIME;
191 typedef struct _FILETIME
194 DWORD dwHighDateTime;
195 } FILETIME, *LPFILETIME, *PFILETIME;
197 typedef struct _LIST_ENTRY
199 struct _LIST_ENTRY *Flink;
200 struct _LIST_ENTRY *Blink;
201 } LIST_ENTRY, *PLIST_ENTRY;
203 typedef struct _SINGLE_LIST_ENTRY
205 struct _SINGLE_LIST_ENTRY *Next;
206 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
208 #define SLIST_ENTRY SINGLE_LIST_ENTRY
209 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
210 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
212 typedef struct _UNICODE_STRING
215 USHORT MaximumLength;
217 } UNICODE_STRING, *PUNICODE_STRING;
219 typedef const UNICODE_STRING* PCUNICODE_STRING;
221 #define UNICODE_NULL ((WCHAR)0)
223 typedef struct _FLOATING_SAVE_AREA
232 BYTE RegisterArea[80];
234 } FLOATING_SAVE_AREA;
236 typedef unsigned short RTL_ATOM;
237 typedef unsigned short *PRTL_ATOM;
239 #else /* __USE_W32API */
243 #endif /* __USE_W32API */
256 #define NULL ((void*)0)
257 #endif /* __cplusplus */
263 #define CONTEXT_CONTROL 1L
264 #define CONTEXT_FLOATING_POINT 2L
265 #define CONTEXT_INTEGER 4L
266 #define CONTEXT_DEBUG_REGISTERS 8L
268 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
269 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
273 #define SIZE_OF_80387_REGISTERS 80
275 /* Values for contextflags */
276 #define CONTEXT_i386 0x10000
280 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
281 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
282 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
283 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
284 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
285 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
287 #endif /* !__USE_W32API */
289 /* our own invention */
290 #define FLAG_TRACE_BIT 0x100
291 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
295 typedef struct _CONTEXT_X86
306 FLOATING_SAVE_AREA FloatSave;
326 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
328 typedef struct _CONTEXT_PPC
330 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
365 /* Integer registers returned when CONTEXT_INTEGER is set. */
399 DWORD Cr; /* Condition register */
400 DWORD Xer; /* Fixed point exception register */
402 /* The following are set when CONTEXT_CONTROL is set. */
403 DWORD Msr; /* Machine status register */
404 DWORD Iar; /* Instruction address register */
405 DWORD Lr; /* Link register */
406 DWORD Ctr; /* Control register */
408 /* Control which context values are returned */
412 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
413 DWORD Dr0; /* Breakpoint Register 1 */
414 DWORD Dr1; /* Breakpoint Register 2 */
415 DWORD Dr2; /* Breakpoint Register 3 */
416 DWORD Dr3; /* Breakpoint Register 4 */
417 DWORD Dr4; /* Breakpoint Register 5 */
418 DWORD Dr5; /* Breakpoint Register 6 */
419 DWORD Dr6; /* Debug Status Register */
420 DWORD Dr7; /* Debug Control Register */
421 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
423 typedef struct value_ent
429 } WVALENT, *PWVALENT;
431 /* #include "except.h" */
435 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
439 typedef CONTEXT_X86 CONTEXT;
440 typedef PCONTEXT_X86 PCONTEXT;
441 typedef LPCONTEXT_X86 LPCONTEXT;
445 typedef CONTEXT_PPC CONTEXT;
446 typedef PCONTEXT_PPC PCONTEXT;
447 typedef LPCONTEXT_PPC LPCONTEXT;
453 typedef struct _COORD
459 typedef struct _SMALL_RECT
465 } SMALL_RECT, *PSMALL_RECT;
471 LPVOID lpArgToCompletionRoutine,
472 DWORD dwTimerLowValue,
473 DWORD dwTimerHighValue
477 (STDCALL *PTIMERAPCROUTINE)(
478 LPVOID lpArgToCompletionRoutine,
479 DWORD dwTimerLowValue,
480 DWORD dwTimerHighValue
486 #else /* __USE_W32API */
488 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
490 #include <ddk/ntapi.h>
492 #endif /* __USE_W32API */
494 typedef struct _ADDRESS_RANGE
501 } ADDRESS_RANGE, *PADDRESS_RANGE;
503 #define MB_FLAGS_MEM_INFO (0x1)
504 #define MB_FLAGS_BOOT_DEVICE (0x2)
505 #define MB_FLAGS_COMMAND_LINE (0x4)
506 #define MB_FLAGS_MODULE_INFO (0x8)
507 #define MB_FLAGS_AOUT_SYMS (0x10)
508 #define MB_FLAGS_ELF_SYMS (0x20)
509 #define MB_FLAGS_MMAP_INFO (0x40)
510 #define MB_FLAGS_DRIVES_INFO (0x80)
511 #define MB_FLAGS_CONFIG_TABLE (0x100)
512 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
513 #define MB_FLAGS_APM_TABLE (0x400)
514 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
516 typedef struct _LOADER_MODULE
522 } LOADER_MODULE, *PLOADER_MODULE;
524 typedef struct _LOADER_PARAMETER_BLOCK
539 ULONG BootLoaderName;
540 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
542 typedef enum _KAPC_ENVIRONMENT
544 OriginalApcEnvironment,
545 AttachedApcEnvironment,
546 CurrentApcEnvironment
549 /* FIXME: Are these official values ?? */
550 #define STATUS_FS_QUERY_REQUIRED ((NTSTATUS)0xC1000001)
551 #define STATUS_HANDLE_NOT_WAITABLE ((NTSTATUS)0xC1000002)
552 #define STATUS_OBJECT_FILE_MISMATCH ((NTSTATUS)0xC1000003)
553 #define STATUS_INVALID_PARAMETER_MAX ((NTSTATUS)0xC1000004)
554 #define STATUS_CONFLICTING_ADDRESS ((NTSTATUS)0xC1000005)
555 #define STATUS_NO_MEDIA_IN_DRIVE ((NTSTATUS)0xC1000006)
557 #define NTSTAT_SEVERITY_SHIFT 30
558 #define NTSTAT_SEVERITY_MASK 0x00000003
559 #define NTSTAT_FACILITY_SHIFT 16
560 #define NTSTAT_FACILITY_MASK 0x00000FFF
561 #define NTSTAT_CUSTOMER_MASK 0x20000000
563 #define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
564 #define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
565 #define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
567 #endif /* __INCLUDE_TYPES_H */