ReactOS  r74244
typedefs.h
Go to the documentation of this file.
1 /*
2  PROJECT: ReactOS
3  LICENSE: GPL v2 or any later version
4  FILE: include/host/typedefs.h
5  PURPOSE: Type definitions and useful macros for host tools
6  COPYRIGHT: Copyright 2007 Hervé Poussineau
7  Copyright 2007 Colin Finck <mail@colinfinck.de>
8 */
9 
10 #ifndef _TYPEDEFS_HOST_H
11 #define _TYPEDEFS_HOST_H
12 
13 #include <assert.h>
14 #include <stdlib.h>
15 #include <limits.h>
16 #include <stdint.h>
17 
18 /* Function attributes for GCC */
19 #if !defined(_MSC_VER) && !defined(__fastcall)
20 #define __fastcall __attribute__((fastcall))
21 #endif
22 #if !defined(_MSC_VER) && !defined(__cdecl)
23 #define __cdecl __attribute__((cdecl))
24 #endif
25 #if !defined(_MSC_VER) && !defined(__stdcall)
26 #define __stdcall __attribute__((stdcall))
27 #endif
28 
29 /* Basic definitions */
30 #define UNIMPLEMENTED { printf("%s unimplemented\n", __FUNCTION__); exit(1); }
31 #define ASSERT(x) assert(x)
32 #define ASSERTMSG(m, x) assert(x)
33 #define DPRINT if (0) printf
34 #define DPRINT1 printf
35 
36 #define NTAPI
37 #define WINAPI
38 
39 #define IN
40 #define OUT
41 #define OPTIONAL
42 
43 #define FALSE 0
44 #define TRUE 1
45 
46 #define ANYSIZE_ARRAY 1
47 
48 /* Basic types
49  Emulate a LLP64 memory model using a LP64 compiler */
50 typedef void VOID, *PVOID, *LPVOID;
51 typedef char CHAR, CCHAR, *PCHAR, *PSTR, *LPSTR;
52 typedef const char *PCSTR, *LPCSTR;
53 typedef unsigned char UCHAR, *PUCHAR, BYTE, *LPBYTE, BOOLEAN, *PBOOLEAN;
54 typedef int16_t SHORT, *PSHORT;
56 typedef const uint16_t *PCWSTR, *LPCWSTR;
59 #if defined(_LP64) || defined(_WIN64)
62 #else
65 #endif
68 typedef float FLOAT;
69 typedef double DOUBLE;
70 
71 /* Derived types */
72 typedef PVOID HANDLE;
73 #ifndef _HAVE_HKEY
74 typedef HANDLE HKEY, *PHKEY;
75 #endif
78 typedef LONG HRESULT;
80 typedef WORD LANGID;
81 
82 #define MAXUSHORT USHRT_MAX
83 
84 /* Widely used structures */
85 #include <pshpack4.h>
86 #ifndef _HAVE_RTL_BITMAP
87 typedef struct _RTL_BITMAP
88 {
92 
93 typedef struct _RTL_BITMAP_RUN
94 {
98 #endif
99 
100 #ifndef _HAVE_LARGE_INTEGER
101 typedef union _LARGE_INTEGER
102 {
103  struct
104  {
107  };
108  struct
109  {
110  ULONG LowPart;
111  LONG HighPart;
112  } u;
115 #endif
116 
117 #ifndef _HAVE_LIST_ENTRY
118 typedef struct _LIST_ENTRY
119 {
123 #endif
124 
125 #ifndef _HAVE_ANSI_STRING
126 typedef struct _ANSI_STRING
127 {
128  USHORT Length;
130  PSTR Buffer;
132 
133 typedef struct _UNICODE_STRING
134 {
135  USHORT Length;
137  PWSTR Buffer;
139 #endif
140 
141 #include <poppack.h>
142 
143 #ifndef _HAVE_LIST_ENTRY
144 /* List Functions */
145 static __inline
146 VOID
148  IN PLIST_ENTRY ListHead
149  )
150 {
151  ListHead->Flink = ListHead->Blink = ListHead;
152 }
153 
154 static __inline
155 VOID
157  IN PLIST_ENTRY ListHead,
158  IN PLIST_ENTRY Entry
159  )
160 {
161  PLIST_ENTRY OldFlink;
162  OldFlink = ListHead->Flink;
163  Entry->Flink = OldFlink;
164  Entry->Blink = ListHead;
165  OldFlink->Blink = Entry;
166  ListHead->Flink = Entry;
167 }
168 
169 static __inline
170 VOID
172  IN PLIST_ENTRY ListHead,
173  IN PLIST_ENTRY Entry
174  )
175 {
176  PLIST_ENTRY OldBlink;
177  OldBlink = ListHead->Blink;
178  Entry->Flink = ListHead;
179  Entry->Blink = OldBlink;
180  OldBlink->Flink = Entry;
181  ListHead->Blink = Entry;
182 }
183 
184 static __inline
185 BOOLEAN
187  IN const LIST_ENTRY * ListHead
188  )
189 {
190  return (BOOLEAN)(ListHead->Flink == ListHead);
191 }
192 
193 static __inline
194 BOOLEAN
196  IN PLIST_ENTRY Entry)
197 {
198  PLIST_ENTRY OldFlink;
199  PLIST_ENTRY OldBlink;
200 
201  OldFlink = Entry->Flink;
202  OldBlink = Entry->Blink;
203  OldFlink->Blink = OldBlink;
204  OldBlink->Flink = OldFlink;
205  return (BOOLEAN)(OldFlink == OldBlink);
206 }
207 
208 static __inline
209 PLIST_ENTRY
211  IN PLIST_ENTRY ListHead)
212 {
213  PLIST_ENTRY Flink;
214  PLIST_ENTRY Entry;
215 
216  Entry = ListHead->Flink;
217  Flink = Entry->Flink;
218  ListHead->Flink = Flink;
219  Flink->Blink = ListHead;
220  return Entry;
221 }
222 
223 static __inline
224 PLIST_ENTRY
226  IN PLIST_ENTRY ListHead)
227 {
228  PLIST_ENTRY Blink;
229  PLIST_ENTRY Entry;
230 
231  Entry = ListHead->Blink;
232  Blink = Entry->Blink;
233  ListHead->Blink = Blink;
234  Blink->Flink = ListHead;
235  return Entry;
236 }
237 #endif
238 
239 #ifndef _HAVE_ANSI_STRING
241 #endif
242 
243 /* Widely used macros */
244 #define LOBYTE(w) ((BYTE)(w))
245 #define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
246 #define LOWORD(l) ((WORD)((DWORD_PTR)(l)))
247 #define HIWORD(l) ((WORD)(((DWORD_PTR)(l)>>16)&0xFFFF))
248 #define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
249 #define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
250 
251 #define MAXULONG 0xFFFFFFFF
252 
253 #define NT_SUCCESS(x) ((x)>=0)
254 #if !defined(__GNUC__)
255 #define FIELD_OFFSET(t,f) ((LONG)(LONG_PTR)&(((t*) 0)->f))
256 #else
257 #define FIELD_OFFSET(t,f) ((LONG)__builtin_offsetof(t,f))
258 #endif
259 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
260 #define CONTAINING_RECORD(address, type, field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
261 
262 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
263 #define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
264 #define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
265 
266 #define MAKELANGID(p,s) ((((WORD)(s))<<10)|(WORD)(p))
267 #define PRIMARYLANGID(l) ((WORD)(l)&0x3ff)
268 #define SUBLANGID(l) ((WORD)(l)>>10)
269 #define SUBLANG_NEUTRAL 0x00
270 
271 /* Prevent inclusion of some other headers */
272 #define __INTERNAL_DEBUG
273 #define RTL_H
274 
275 #endif
276 
struct _LIST_ENTRY * PLIST_ENTRY
DWORD *typedef PVOID
Definition: winlogon.h:52
char * PSTR
Definition: typedefs.h:51
PULONG Buffer
Definition: typedefs.h:90
int32_t * PLONG
Definition: typedefs.h:57
const uint16_t * PCWSTR
Definition: typedefs.h:56
#define IN
Definition: typedefs.h:39
static __inline VOID InsertTailList(IN PLIST_ENTRY ListHead, IN PLIST_ENTRY Entry)
Definition: typedefs.h:171
unsigned short WORD
Definition: ntddk_ex.h:93
uint32_t UINT32
Definition: typedefs.h:58
int32_t BOOL
Definition: typedefs.h:57
unsigned int uint32_t
Definition: acefiex.h:55
struct _RTL_BITMAP RTL_BITMAP
struct _Entry Entry
Definition: kefuncs.h:640
struct _UNICODE_STRING * PUNICODE_STRING
uint32_t UINT
Definition: typedefs.h:58
USHORT MaximumLength
Definition: env_spec_w32.h:370
struct _LIST_ENTRY LIST_ENTRY
void VOID
Definition: typedefs.h:50
uint32_t DWORD
Definition: typedefs.h:58
struct _LIST_ENTRY * Blink
Definition: typedefs.h:121
uint32_t * PULONG
Definition: typedefs.h:58
const char * PCSTR
Definition: typedefs.h:52
int16_t SHORT
Definition: typedefs.h:54
unsigned char * LPBYTE
Definition: typedefs.h:53
struct _RTL_BITMAP_RUN RTL_BITMAP_RUN
uint16_t * PWORD
Definition: typedefs.h:55
HANDLE * PHKEY
Definition: typedefs.h:74
PVOID *typedef PWSTR
Definition: winlogon.h:57
char CHAR
Definition: typedefs.h:51
uint32_t * LPUINT
Definition: typedefs.h:58
int32_t * PLONG_PTR
Definition: typedefs.h:63
struct _LARGE_INTEGER::@1855 u
static __inline PLIST_ENTRY RemoveHeadList(IN PLIST_ENTRY ListHead)
Definition: typedefs.h:210
unsigned char BOOLEAN
Definition: typedefs.h:53
WORD LANGID
Definition: typedefs.h:80
uint16_t * PWCHAR
Definition: typedefs.h:55
unsigned short int uint16_t
Definition: acefiex.h:54
int32_t INT_PTR
Definition: typedefs.h:63
char * PCHAR
Definition: typedefs.h:51
uint16_t * LPWSTR
Definition: typedefs.h:55
int32_t LONG
Definition: typedefs.h:57
uint16_t WCHAR
Definition: typedefs.h:55
struct _RTL_BITMAP_RUN * PRTL_BITMAP_RUN
int32_t INT
Definition: typedefs.h:57
COMPILER_DEPENDENT_UINT64 uint64_t
Definition: acefiex.h:57
uint32_t ULONG_PTR
Definition: typedefs.h:64
static __inline VOID InsertHeadList(IN PLIST_ENTRY ListHead, IN PLIST_ENTRY Entry)
Definition: typedefs.h:156
struct _UNICODE_STRING UNICODE_STRING
uint16_t UINT16
Definition: typedefs.h:55
uint16_t * PUSHORT
Definition: typedefs.h:55
ULONG_PTR * PSIZE_T
Definition: typedefs.h:79
unsigned char * PUCHAR
Definition: typedefs.h:53
long LONG
Definition: pedump.c:60
uint32_t * PUINT_PTR
Definition: typedefs.h:64
uint64_t ULONG64
Definition: typedefs.h:66
const char * LPCSTR
Definition: typedefs.h:52
void * PVOID
Definition: typedefs.h:50
void * LPVOID
Definition: typedefs.h:50
USHORT MaximumLength
Definition: env_spec_w32.h:377
int64_t LONGLONG
Definition: typedefs.h:67
unsigned char UCHAR
Definition: typedefs.h:53
struct _LIST_ENTRY * Flink
Definition: typedefs.h:120
int64_t LONG64
Definition: typedefs.h:67
unsigned char BOOLEAN
short int int16_t
Definition: acefiex.h:51
static __inline BOOLEAN IsListEmpty(IN const LIST_ENTRY *ListHead)
Definition: typedefs.h:186
int32_t WINBOOL
Definition: typedefs.h:57
LONG HRESULT
Definition: typedefs.h:78
char CCHAR
Definition: typedefs.h:51
INT POOL_TYPE
Definition: typedefs.h:77
uint64_t UINT64
Definition: typedefs.h:66
uint64_t ULONGLONG
Definition: typedefs.h:66
int16_t * PSHORT
Definition: typedefs.h:54
ULONG NumberOfBits
Definition: typedefs.h:96
HANDLE HINSTANCE
Definition: typedefs.h:76
union _LARGE_INTEGER LARGE_INTEGER
uint32_t * PUINT
Definition: typedefs.h:58
uint16_t WORD
Definition: typedefs.h:55
INT NTSTATUS
Definition: typedefs.h:77
ULONG SizeOfBitMap
Definition: typedefs.h:89
ULONG LowPart
Definition: typedefs.h:105
Definition: typedefs.h:118
uint32_t DWORD_PTR
Definition: typedefs.h:64
unsigned char * PBOOLEAN
Definition: typedefs.h:53
ULONG StartingIndex
Definition: typedefs.h:95
uint16_t * LPWORD
Definition: typedefs.h:55
ULONG_PTR SIZE_T
Definition: typedefs.h:79
uint32_t UINT_PTR
Definition: typedefs.h:64
int32_t * LPLONG
Definition: typedefs.h:57
DWORD *typedef HANDLE
Definition: winlogon.h:52
PVOID HANDLE
Definition: typedefs.h:72
uint64_t DWORD64
Definition: typedefs.h:66
struct _ANSI_STRING * PANSI_STRING
unsigned short USHORT
Definition: pedump.c:61
signed char * PSTR
Definition: retypes.h:7
uint16_t * PWSTR
Definition: typedefs.h:55
static __inline PLIST_ENTRY RemoveTailList(IN PLIST_ENTRY ListHead)
Definition: typedefs.h:225
unsigned int * PULONG
Definition: retypes.h:1
struct _RTL_BITMAP * PRTL_BITMAP
const uint16_t * LPCWSTR
Definition: typedefs.h:56
COMPILER_DEPENDENT_INT64 int64_t
Definition: acefiex.h:56
struct _ANSI_STRING ANSI_STRING
HANDLE HMODULE
Definition: typedefs.h:76
unsigned char BYTE
Definition: typedefs.h:53
const UNICODE_STRING * PCUNICODE_STRING
Definition: typedefs.h:240
static __inline VOID InitializeListHead(IN PLIST_ENTRY ListHead)
Definition: typedefs.h:147
float FLOAT
Definition: typedefs.h:68
uint32_t * LPDWORD
Definition: typedefs.h:58
uint32_t * PDWORD
Definition: typedefs.h:58
unsigned int ULONG
Definition: retypes.h:1
static __inline BOOLEAN RemoveEntryList(IN PLIST_ENTRY Entry)
Definition: typedefs.h:195
uint64_t * PDWORD64
Definition: typedefs.h:66
double DOUBLE
Definition: typedefs.h:69
HANDLE HKEY
Definition: typedefs.h:74
uint32_t * PULONG_PTR
Definition: typedefs.h:64
uint32_t ULONG
Definition: typedefs.h:58
int32_t LONG_PTR
Definition: typedefs.h:63
union _LARGE_INTEGER * PLARGE_INTEGER
Definition: file.c:82
base of all file and directory entries
Definition: entries.h:82
uint16_t USHORT
Definition: typedefs.h:55
int int32_t
Definition: acefiex.h:52
int32_t * PINT_PTR
Definition: typedefs.h:63
LONGLONG QuadPart
Definition: typedefs.h:113
char * LPSTR
Definition: typedefs.h:51