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 */
47 #define STDCALL __attribute__ ((stdcall))
48 #define CDECL __attribute__ ((cdecl))
49 #define CALLBACK WINAPI
59 #define STDCALL __stdcall
67 typedef INT32 INT
, *PINT
;
68 typedef LONG32 LONG
, *PLONG
;
69 typedef ULONG32 DWORD
, *PDWORD
;
70 typedef UINT32 UINT
, *PUINT
;
71 typedef ULONG32 ULONG
, *PULONG
;
76 #define _WCHAR_T_DEFINED
77 #ifndef __WCHAR_TYPE__
78 #define __WCHAR_TYPE__ short unsigned int
82 typedef __WCHAR_TYPE__
wchar_t;
85 #endif /* wchar_t not already defined */
89 //#ifndef _WCHAR_T_DEFINED
90 //#define _WCHAR_T_DEFINED
91 //typedef unsigned short wchar_t;
95 typedef unsigned char UCHAR
;
96 typedef unsigned short USHORT
;
97 typedef wchar_t WCHAR
;
98 typedef unsigned short WORD
;
100 typedef unsigned char BOOLEAN
;
101 typedef BOOLEAN
* PBOOLEAN
;
102 typedef wchar_t *LPWSTR
;
103 typedef wchar_t *PWSTR
;
104 typedef unsigned char *PUCHAR
;
105 typedef unsigned short *PUSHORT
;
107 typedef unsigned char BYTE
;
108 typedef void *LPVOID
;
109 typedef float *PFLOAT
;
110 typedef wchar_t *PWCH
;
111 typedef unsigned short *PWORD
;
113 #include <msvcrt/crttypes.h> // for definition of LONGLONG, PLONGLONG etc
115 typedef const void *LPCVOID
;
116 typedef BYTE
*LPBYTE
, *PBYTE
;
119 typedef DWORD
*PLCID
;
120 typedef const char *LPCSTR
;
122 typedef const wchar_t *LPCWSTR
;
125 typedef void *HANDLE
;
126 typedef HANDLE
*PHANDLE
;
128 typedef CCHAR
*PCCHAR
;
129 typedef wchar_t *PWCHAR
;
130 typedef ULONG WAIT_TYPE
;
131 typedef USHORT CSHORT
;
132 typedef const wchar_t *PCWSTR
;
136 typedef DWORD
STDCALL (*PTHREAD_START_ROUTINE
) (LPVOID
);
138 typedef DWORD (STDCALL
*PTHREAD_START_ROUTINE
) (LPVOID
);
141 typedef union _LARGE_INTEGER
148 #ifdef ANONYMOUSUNIONS
154 #endif /* ANONYMOUSUNIONS */
156 } LARGE_INTEGER
, *PLARGE_INTEGER
;
158 typedef union _ULARGE_INTEGER
165 #ifdef ANONYMOUSUNIONS
171 #endif /* ANONYMOUSUNIONS */
173 } ULARGE_INTEGER
, *PULARGE_INTEGER
;
175 typedef struct _FILETIME
178 DWORD dwHighDateTime
;
179 } FILETIME
, *LPFILETIME
, *PFILETIME
;
181 typedef struct _LIST_ENTRY
183 struct _LIST_ENTRY
*Flink
;
184 struct _LIST_ENTRY
*Blink
;
185 } LIST_ENTRY
, *PLIST_ENTRY
;
187 typedef struct _SINGLE_LIST_ENTRY
189 struct _SINGLE_LIST_ENTRY
*Next
;
190 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
192 #define SLIST_ENTRY SINGLE_LIST_ENTRY
193 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
195 typedef struct _UNICODE_STRING
198 USHORT MaximumLength
;
200 } UNICODE_STRING
, *PUNICODE_STRING
;
202 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
204 typedef struct _FLOATING_SAVE_AREA
213 BYTE RegisterArea
[80];
215 } FLOATING_SAVE_AREA
;
217 typedef unsigned short RTL_ATOM
;
218 typedef unsigned short *PRTL_ATOM
;
220 #else /* __USE_W32API */
224 #endif /* __USE_W32API */
237 #define NULL ((void*)0)
238 #endif /* __cplusplus */
244 #define CONTEXT_CONTROL 1L
245 #define CONTEXT_FLOATING_POINT 2L
246 #define CONTEXT_INTEGER 4L
247 #define CONTEXT_DEBUG_REGISTERS 8L
249 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
250 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
254 #define SIZE_OF_80387_REGISTERS 80
256 /* Values for contextflags */
257 #define CONTEXT_i386 0x10000
261 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
262 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
263 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
264 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
265 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
266 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
268 #endif /* !__USE_W32API */
270 /* our own invention */
271 #define FLAG_TRACE_BIT 0x100
272 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
276 typedef struct _CONTEXT_X86
287 FLOATING_SAVE_AREA FloatSave
;
307 } CONTEXT_X86
, *PCONTEXT_X86
, *LPCONTEXT_X86
;
309 typedef struct _CONTEXT_PPC
311 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
346 /* Integer registers returned when CONTEXT_INTEGER is set. */
380 DWORD Cr
; /* Condition register */
381 DWORD Xer
; /* Fixed point exception register */
383 /* The following are set when CONTEXT_CONTROL is set. */
384 DWORD Msr
; /* Machine status register */
385 DWORD Iar
; /* Instruction address register */
386 DWORD Lr
; /* Link register */
387 DWORD Ctr
; /* Control register */
389 /* Control which context values are returned */
393 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
394 DWORD Dr0
; /* Breakpoint Register 1 */
395 DWORD Dr1
; /* Breakpoint Register 2 */
396 DWORD Dr2
; /* Breakpoint Register 3 */
397 DWORD Dr3
; /* Breakpoint Register 4 */
398 DWORD Dr4
; /* Breakpoint Register 5 */
399 DWORD Dr5
; /* Breakpoint Register 6 */
400 DWORD Dr6
; /* Debug Status Register */
401 DWORD Dr7
; /* Debug Control Register */
402 } CONTEXT_PPC
, *PCONTEXT_PPC
, *LPCONTEXT_PPC
;
404 typedef struct value_ent
410 } WVALENT
, *PWVALENT
;
412 //#include "except.h"
416 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE
;
420 typedef CONTEXT_X86 CONTEXT
;
421 typedef PCONTEXT_X86 PCONTEXT
;
422 typedef LPCONTEXT_X86 LPCONTEXT
;
426 typedef CONTEXT_PPC CONTEXT
;
427 typedef PCONTEXT_PPC PCONTEXT
;
428 typedef LPCONTEXT_PPC LPCONTEXT
;
434 typedef struct _COORD
440 typedef struct _SMALL_RECT
446 } SMALL_RECT
, *PSMALL_RECT
;
452 LPVOID lpArgToCompletionRoutine
,
453 DWORD dwTimerLowValue
,
454 DWORD dwTimerHighValue
458 (STDCALL
*PTIMERAPCROUTINE
)(
459 LPVOID lpArgToCompletionRoutine
,
460 DWORD dwTimerLowValue
,
461 DWORD dwTimerHighValue
467 #else /* __USE_W32API */
469 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE
;
471 #include <ddk/ntapi.h>
473 #endif /* __USE_W32API */
475 typedef struct _ADDRESS_RANGE
482 } ADDRESS_RANGE
, *PADDRESS_RANGE
;
484 #define MB_FLAGS_MEM_INFO (0x1)
485 #define MB_FLAGS_BOOT_DEVICE (0x2)
486 #define MB_FLAGS_COMMAND_LINE (0x4)
487 #define MB_FLAGS_MODULE_INFO (0x8)
488 #define MB_FLAGS_AOUT_SYMS (0x10)
489 #define MB_FLAGS_ELF_SYMS (0x20)
490 #define MB_FLAGS_MMAP_INFO (0x40)
491 #define MB_FLAGS_DRIVES_INFO (0x80)
492 #define MB_FLAGS_CONFIG_TABLE (0x100)
493 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
494 #define MB_FLAGS_APM_TABLE (0x400)
495 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
497 typedef struct _LOADER_MODULE
503 } LOADER_MODULE
, *PLOADER_MODULE
;
505 typedef struct _LOADER_PARAMETER_BLOCK
520 ULONG BootLoaderName
;
521 } LOADER_PARAMETER_BLOCK
, *PLOADER_PARAMETER_BLOCK
;
523 typedef enum _KAPC_ENVIRONMENT
525 OriginalApcEnvironment
,
526 AttachedApcEnvironment
,
527 CurrentApcEnvironment
530 /* FIXME: Are these official values ?? */
531 #define STATUS_FS_QUERY_REQUIRED ((NTSTATUS)0xC1000001)
532 #define STATUS_HANDLE_NOT_WAITABLE ((NTSTATUS)0xC1000002)
533 #define STATUS_OBJECT_FILE_MISMATCH ((NTSTATUS)0xC1000003)
534 #define STATUS_INVALID_PARAMETER_MAX ((NTSTATUS)0xC1000004)
535 #define STATUS_CONFLICTING_ADDRESS ((NTSTATUS)0xC1000005)
536 #define STATUS_NO_MEDIA_IN_DRIVE ((NTSTATUS)0xC1000006)
538 #define NTSTAT_SEVERITY_SHIFT 30
539 #define NTSTAT_SEVERITY_MASK 0x00000003
540 #define NTSTAT_FACILITY_SHIFT 16
541 #define NTSTAT_FACILITY_MASK 0x00000FFF
542 #define NTSTAT_CUSTOMER_MASK 0x20000000
544 #define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
545 #define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
546 #define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
548 #endif /* __INCLUDE_TYPES_H */