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 */
48 #define STDCALL __attribute__ ((stdcall))
49 #define CDECL __attribute__ ((cdecl))
51 #define STDCALL __stdcall
54 #define CALLBACK WINAPI
64 #define STDCALL __stdcall
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;
81 #define _WCHAR_T_DEFINED
82 #ifndef __WCHAR_TYPE__
83 #define __WCHAR_TYPE__ short unsigned int
87 typedef __WCHAR_TYPE__ wchar_t;
90 #endif /* wchar_t not already defined */
93 /* #ifndef __cplusplus
94 #ifndef _WCHAR_T_DEFINED
95 #define _WCHAR_T_DEFINED
96 typedef unsigned short wchar_t;
101 typedef unsigned char UCHAR;
102 typedef unsigned short USHORT;
103 typedef wchar_t WCHAR;
104 typedef unsigned short WORD;
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;
113 typedef unsigned char BYTE;
114 typedef void *LPVOID;
115 typedef float *PFLOAT;
116 typedef wchar_t *PWCH;
117 typedef unsigned short *PWORD;
119 #include <msvcrt/crttypes.h> /* for definition of LONGLONG, PLONGLONG etc */
121 typedef const void *LPCVOID;
122 typedef BYTE *LPBYTE, *PBYTE;
125 typedef DWORD *PLCID;
126 typedef const char *LPCSTR;
128 typedef const wchar_t *LPCWSTR;
131 typedef void *HANDLE;
132 typedef HANDLE *PHANDLE;
134 typedef CCHAR *PCCHAR;
135 typedef wchar_t *PWCHAR;
136 typedef ULONG WAIT_TYPE;
137 typedef USHORT CSHORT;
138 typedef const wchar_t *PCWSTR;
142 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
144 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
147 typedef union _LARGE_INTEGER
154 #ifdef ANONYMOUSUNIONS
160 #endif /* ANONYMOUSUNIONS */
162 } LARGE_INTEGER, *PLARGE_INTEGER;
164 typedef union _ULARGE_INTEGER
171 #ifdef ANONYMOUSUNIONS
177 #endif /* ANONYMOUSUNIONS */
179 } ULARGE_INTEGER, *PULARGE_INTEGER;
184 * typedef ULARGE_INTEGER TIME, *PTIME;
187 typedef struct _FILETIME
190 DWORD dwHighDateTime;
191 } FILETIME, *LPFILETIME, *PFILETIME;
193 typedef struct _LIST_ENTRY
195 struct _LIST_ENTRY *Flink;
196 struct _LIST_ENTRY *Blink;
197 } LIST_ENTRY, *PLIST_ENTRY;
199 typedef struct _SINGLE_LIST_ENTRY
201 struct _SINGLE_LIST_ENTRY *Next;
202 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
204 #define SLIST_ENTRY SINGLE_LIST_ENTRY
205 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
207 typedef struct _UNICODE_STRING
210 USHORT MaximumLength;
212 } UNICODE_STRING, *PUNICODE_STRING;
214 typedef const UNICODE_STRING* PCUNICODE_STRING;
216 #define UNICODE_NULL ((WCHAR)0)
218 typedef struct _FLOATING_SAVE_AREA
227 BYTE RegisterArea[80];
229 } FLOATING_SAVE_AREA;
231 typedef unsigned short RTL_ATOM;
232 typedef unsigned short *PRTL_ATOM;
234 #else /* __USE_W32API */
238 #endif /* __USE_W32API */
251 #define NULL ((void*)0)
252 #endif /* __cplusplus */
258 #define CONTEXT_CONTROL 1L
259 #define CONTEXT_FLOATING_POINT 2L
260 #define CONTEXT_INTEGER 4L
261 #define CONTEXT_DEBUG_REGISTERS 8L
263 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
264 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
268 #define SIZE_OF_80387_REGISTERS 80
270 /* Values for contextflags */
271 #define CONTEXT_i386 0x10000
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)
282 #endif /* !__USE_W32API */
284 /* our own invention */
285 #define FLAG_TRACE_BIT 0x100
286 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
290 typedef struct _CONTEXT_X86
301 FLOATING_SAVE_AREA FloatSave;
321 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
323 typedef struct _CONTEXT_PPC
325 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
360 /* Integer registers returned when CONTEXT_INTEGER is set. */
394 DWORD Cr; /* Condition register */
395 DWORD Xer; /* Fixed point exception register */
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 */
403 /* Control which context values are returned */
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;
418 typedef struct value_ent
424 } WVALENT, *PWVALENT;
426 /* #include "except.h" */
430 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
434 typedef CONTEXT_X86 CONTEXT;
435 typedef PCONTEXT_X86 PCONTEXT;
436 typedef LPCONTEXT_X86 LPCONTEXT;
440 typedef CONTEXT_PPC CONTEXT;
441 typedef PCONTEXT_PPC PCONTEXT;
442 typedef LPCONTEXT_PPC LPCONTEXT;
448 typedef struct _COORD
454 typedef struct _SMALL_RECT
460 } SMALL_RECT, *PSMALL_RECT;
466 LPVOID lpArgToCompletionRoutine,
467 DWORD dwTimerLowValue,
468 DWORD dwTimerHighValue
472 (STDCALL *PTIMERAPCROUTINE)(
473 LPVOID lpArgToCompletionRoutine,
474 DWORD dwTimerLowValue,
475 DWORD dwTimerHighValue
481 #else /* __USE_W32API */
483 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
485 #include <ddk/ntapi.h>
487 #endif /* __USE_W32API */
489 typedef struct _ADDRESS_RANGE
496 } ADDRESS_RANGE, *PADDRESS_RANGE;
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)
511 typedef struct _LOADER_MODULE
517 } LOADER_MODULE, *PLOADER_MODULE;
519 typedef struct _LOADER_PARAMETER_BLOCK
534 ULONG BootLoaderName;
535 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
537 typedef enum _KAPC_ENVIRONMENT
539 OriginalApcEnvironment,
540 AttachedApcEnvironment,
541 CurrentApcEnvironment
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)
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
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)
562 #endif /* __INCLUDE_TYPES_H */