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;
116 /* Prevent: warning: dereferencing type-punned pointer will break strict-aliasing rules
117 * As PVOID is usually used for untyped generalized casts.
119 typedef void __attribute__((__may_alias__)) *PVOID;
120 typedef unsigned char BYTE;
121 typedef void *LPVOID;
122 typedef float *PFLOAT;
123 typedef wchar_t *PWCH;
124 typedef unsigned short *PWORD;
126 #include <msvcrt/crttypes.h> /* for definition of LONGLONG, PLONGLONG etc */
128 typedef const void *LPCVOID;
129 typedef BYTE *LPBYTE, *PBYTE;
132 typedef DWORD *PLCID;
133 typedef const char *LPCSTR;
135 typedef const wchar_t *LPCWSTR;
138 typedef void *HANDLE;
139 typedef HANDLE *PHANDLE;
141 typedef CCHAR *PCCHAR;
142 typedef wchar_t *PWCHAR;
143 typedef ULONG WAIT_TYPE;
144 typedef USHORT CSHORT;
145 typedef const wchar_t *PCWSTR;
146 typedef const char* PCSZ;
149 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
151 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
154 typedef union _LARGE_INTEGER
161 #ifdef ANONYMOUSUNIONS
167 #endif /* ANONYMOUSUNIONS */
169 } LARGE_INTEGER, *PLARGE_INTEGER;
171 typedef union _ULARGE_INTEGER
178 #ifdef ANONYMOUSUNIONS
184 #endif /* ANONYMOUSUNIONS */
186 } ULARGE_INTEGER, *PULARGE_INTEGER;
191 * typedef ULARGE_INTEGER TIME, *PTIME;
194 typedef struct _FILETIME
197 DWORD dwHighDateTime;
198 } FILETIME, *LPFILETIME, *PFILETIME;
200 typedef struct _LIST_ENTRY
202 struct _LIST_ENTRY *Flink;
203 struct _LIST_ENTRY *Blink;
204 } LIST_ENTRY, *PLIST_ENTRY;
206 typedef struct _SINGLE_LIST_ENTRY
208 struct _SINGLE_LIST_ENTRY *Next;
209 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
211 #define SLIST_ENTRY SINGLE_LIST_ENTRY
212 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
213 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
215 typedef struct _UNICODE_STRING
218 USHORT MaximumLength;
220 } UNICODE_STRING, *PUNICODE_STRING;
222 typedef const UNICODE_STRING* PCUNICODE_STRING;
224 #define UNICODE_NULL ((WCHAR)0)
226 typedef struct _FLOATING_SAVE_AREA
235 BYTE RegisterArea[80];
237 } FLOATING_SAVE_AREA;
239 typedef unsigned short RTL_ATOM;
240 typedef unsigned short *PRTL_ATOM;
242 #else /* __USE_W32API */
246 #endif /* __USE_W32API */
259 #define NULL ((void*)0)
260 #endif /* __cplusplus */
266 #define CONTEXT_CONTROL 1L
267 #define CONTEXT_FLOATING_POINT 2L
268 #define CONTEXT_INTEGER 4L
269 #define CONTEXT_DEBUG_REGISTERS 8L
271 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
272 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
276 #define SIZE_OF_80387_REGISTERS 80
278 /* Values for contextflags */
279 #define CONTEXT_i386 0x10000
283 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
284 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
285 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
286 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
287 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
288 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
290 #endif /* !__USE_W32API */
292 /* our own invention */
293 #define FLAG_TRACE_BIT 0x100
294 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
298 typedef struct _CONTEXT_X86
309 FLOATING_SAVE_AREA FloatSave;
329 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
331 typedef struct _CONTEXT_PPC
333 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
368 /* Integer registers returned when CONTEXT_INTEGER is set. */
402 DWORD Cr; /* Condition register */
403 DWORD Xer; /* Fixed point exception register */
405 /* The following are set when CONTEXT_CONTROL is set. */
406 DWORD Msr; /* Machine status register */
407 DWORD Iar; /* Instruction address register */
408 DWORD Lr; /* Link register */
409 DWORD Ctr; /* Control register */
411 /* Control which context values are returned */
415 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
416 DWORD Dr0; /* Breakpoint Register 1 */
417 DWORD Dr1; /* Breakpoint Register 2 */
418 DWORD Dr2; /* Breakpoint Register 3 */
419 DWORD Dr3; /* Breakpoint Register 4 */
420 DWORD Dr4; /* Breakpoint Register 5 */
421 DWORD Dr5; /* Breakpoint Register 6 */
422 DWORD Dr6; /* Debug Status Register */
423 DWORD Dr7; /* Debug Control Register */
424 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
426 typedef struct value_ent
432 } WVALENT, *PWVALENT;
434 /* #include "except.h" */
438 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
442 typedef CONTEXT_X86 CONTEXT;
443 typedef PCONTEXT_X86 PCONTEXT;
444 typedef LPCONTEXT_X86 LPCONTEXT;
448 typedef CONTEXT_PPC CONTEXT;
449 typedef PCONTEXT_PPC PCONTEXT;
450 typedef LPCONTEXT_PPC LPCONTEXT;
456 typedef struct _COORD
462 typedef struct _SMALL_RECT
468 } SMALL_RECT, *PSMALL_RECT;
474 LPVOID lpArgToCompletionRoutine,
475 DWORD dwTimerLowValue,
476 DWORD dwTimerHighValue
480 (STDCALL *PTIMERAPCROUTINE)(
481 LPVOID lpArgToCompletionRoutine,
482 DWORD dwTimerLowValue,
483 DWORD dwTimerHighValue
489 #else /* __USE_W32API */
491 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
493 #include <ddk/ntapi.h>
495 #endif /* __USE_W32API */
497 typedef struct _ADDRESS_RANGE
504 } ADDRESS_RANGE, *PADDRESS_RANGE;
506 #define MB_FLAGS_MEM_INFO (0x1)
507 #define MB_FLAGS_BOOT_DEVICE (0x2)
508 #define MB_FLAGS_COMMAND_LINE (0x4)
509 #define MB_FLAGS_MODULE_INFO (0x8)
510 #define MB_FLAGS_AOUT_SYMS (0x10)
511 #define MB_FLAGS_ELF_SYMS (0x20)
512 #define MB_FLAGS_MMAP_INFO (0x40)
513 #define MB_FLAGS_DRIVES_INFO (0x80)
514 #define MB_FLAGS_CONFIG_TABLE (0x100)
515 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
516 #define MB_FLAGS_APM_TABLE (0x400)
517 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
519 typedef struct _LOADER_MODULE
525 } LOADER_MODULE, *PLOADER_MODULE;
527 typedef struct _LOADER_PARAMETER_BLOCK
542 ULONG BootLoaderName;
543 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
545 typedef enum _KAPC_ENVIRONMENT
547 OriginalApcEnvironment,
548 AttachedApcEnvironment,
549 CurrentApcEnvironment
552 /* FIXME: Are these official values ?? */
553 #define STATUS_FS_QUERY_REQUIRED ((NTSTATUS)0xC1000001)
554 #define STATUS_HANDLE_NOT_WAITABLE ((NTSTATUS)0xC1000002)
555 #define STATUS_OBJECT_FILE_MISMATCH ((NTSTATUS)0xC1000003)
556 #define STATUS_INVALID_PARAMETER_MAX ((NTSTATUS)0xC1000004)
557 #define STATUS_CONFLICTING_ADDRESS ((NTSTATUS)0xC1000005)
558 #define STATUS_NO_MEDIA_IN_DRIVE ((NTSTATUS)0xC1000006)
560 #define NTSTAT_SEVERITY_SHIFT 30
561 #define NTSTAT_SEVERITY_MASK 0x00000003
562 #define NTSTAT_FACILITY_SHIFT 16
563 #define NTSTAT_FACILITY_MASK 0x00000FFF
564 #define NTSTAT_CUSTOMER_MASK 0x20000000
566 #define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
567 #define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
568 #define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
570 #endif /* __INCLUDE_TYPES_H */