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(a) (STDCALL a)
26 /* Fixed precision types */
27 typedef signed char INT8
, *PINT8
;
28 typedef unsigned char UINT8
, *PUINT8
;
31 typedef signed short INT16
, *PINT16
;
32 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 STDCALL
64 #define STDCALL __stdcall
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
;
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
;
141 typedef DWORD
STDCALL_FUNC (*PTHREAD_START_ROUTINE
) (LPVOID
);
144 typedef union _LARGE_INTEGER
151 #ifdef ANONYMOUSUNIONS
157 #endif /* ANONYMOUSUNIONS */
159 } LARGE_INTEGER
, *PLARGE_INTEGER
;
161 typedef union _ULARGE_INTEGER
168 #ifdef ANONYMOUSUNIONS
174 #endif /* ANONYMOUSUNIONS */
176 } ULARGE_INTEGER
, *PULARGE_INTEGER
;
181 * typedef ULARGE_INTEGER TIME, *PTIME;
184 typedef struct _FILETIME
187 DWORD dwHighDateTime
;
188 } FILETIME
, *LPFILETIME
, *PFILETIME
;
190 typedef struct _LIST_ENTRY
192 struct _LIST_ENTRY
*Flink
;
193 struct _LIST_ENTRY
*Blink
;
194 } LIST_ENTRY
, *PLIST_ENTRY
;
196 typedef struct _SINGLE_LIST_ENTRY
198 struct _SINGLE_LIST_ENTRY
*Next
;
199 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
201 #define SLIST_ENTRY SINGLE_LIST_ENTRY
202 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
204 typedef struct _UNICODE_STRING
207 USHORT MaximumLength
;
209 } UNICODE_STRING
, *PUNICODE_STRING
;
211 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
213 #define UNICODE_NULL ((WCHAR)0)
215 typedef struct _FLOATING_SAVE_AREA
224 BYTE RegisterArea
[80];
226 } FLOATING_SAVE_AREA
;
228 typedef unsigned short RTL_ATOM
;
229 typedef unsigned short *PRTL_ATOM
;
231 #else /* __USE_W32API */
235 #endif /* __USE_W32API */
248 #define NULL ((void*)0)
249 #endif /* __cplusplus */
255 #define CONTEXT_CONTROL 1L
256 #define CONTEXT_FLOATING_POINT 2L
257 #define CONTEXT_INTEGER 4L
258 #define CONTEXT_DEBUG_REGISTERS 8L
260 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
261 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
265 #define SIZE_OF_80387_REGISTERS 80
267 /* Values for contextflags */
268 #define CONTEXT_i386 0x10000
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)
280 #define MAXIMUM_SUPPORTED_EXTENSION 512
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
;
322 BYTE ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
323 } CONTEXT_X86
, *PCONTEXT_X86
, *LPCONTEXT_X86
;
325 typedef struct _CONTEXT_PPC
327 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
362 /* Integer registers returned when CONTEXT_INTEGER is set. */
396 DWORD Cr
; /* Condition register */
397 DWORD Xer
; /* Fixed point exception register */
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 */
405 /* Control which context values are returned */
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
;
420 typedef struct value_ent
426 } WVALENT
, *PWVALENT
;
428 /* #include "except.h" */
432 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE
;
436 typedef CONTEXT_X86 CONTEXT
;
437 typedef PCONTEXT_X86 PCONTEXT
;
438 typedef LPCONTEXT_X86 LPCONTEXT
;
442 typedef CONTEXT_PPC CONTEXT
;
443 typedef PCONTEXT_PPC PCONTEXT
;
444 typedef LPCONTEXT_PPC LPCONTEXT
;
450 typedef struct _COORD
456 typedef struct _SMALL_RECT
462 } SMALL_RECT
, *PSMALL_RECT
;
466 #else /* __USE_W32API */
468 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE
;
470 #include <ddk/ntapi.h>
472 #endif /* __USE_W32API */
474 typedef struct _ADDRESS_RANGE
481 } ADDRESS_RANGE
, *PADDRESS_RANGE
;
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)
496 typedef struct _LOADER_MODULE
502 } LOADER_MODULE
, *PLOADER_MODULE
;
504 typedef struct _LOADER_PARAMETER_BLOCK
519 ULONG BootLoaderName
;
520 ULONG PageDirectoryStart
;
521 ULONG PageDirectoryEnd
;
523 } LOADER_PARAMETER_BLOCK
, *PLOADER_PARAMETER_BLOCK
;
525 typedef enum _KAPC_ENVIRONMENT
527 OriginalApcEnvironment
,
528 AttachedApcEnvironment
,
529 CurrentApcEnvironment
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)
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
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)
550 #endif /* __INCLUDE_TYPES_H */