Reactos
1/*
2 * minwinbase.h
3 *
4 * Basic Win-API definitions
5 *
6 * This file is part of the ReactOS SDK.
7 *
8 * Contributors:
9 * Created by Timo Kreuzer <timo.kreuzer@reactos.org>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23#ifndef _MINWINBASE_
24#define _MINWINBASE_
25
26#pragma once
27
28#define MoveMemory RtlMoveMemory
29#define CopyMemory RtlCopyMemory
30#define FillMemory RtlFillMemory
31#define ZeroMemory RtlZeroMemory
32
33#define EXCEPTION_DEBUG_EVENT 1
34#define CREATE_THREAD_DEBUG_EVENT 2
35#define CREATE_PROCESS_DEBUG_EVENT 3
36#define EXIT_THREAD_DEBUG_EVENT 4
37#define EXIT_PROCESS_DEBUG_EVENT 5
38#define LOAD_DLL_DEBUG_EVENT 6
39#define UNLOAD_DLL_DEBUG_EVENT 7
40#define OUTPUT_DEBUG_STRING_EVENT 8
41#define RIP_EVENT 9
42
43#define STILL_ACTIVE STATUS_PENDING
44#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
45#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
46#define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT
47#define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP
48#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
49#define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND
50#define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO
51#define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT
52#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
53#define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW
54#define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK
55#define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW
56#define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO
57#define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW
58#define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION
59#define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR
60#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION
61#define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
62#define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW
63#define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION
64#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION
65#define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE
66#define EXCEPTION_POSSIBLE_DEADLOCK STATUS_POSSIBLE_DEADLOCK
67#define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT
68
69#define FIND_FIRST_EX_CASE_SENSITIVE 1
70#define FIND_FIRST_EX_LARGE_FETCH 2
71#if (NTDDI_VERSION >= NTDDI_WIN10_RS4)
72#define FIND_FIRST_EX_ON_DISK_ENTRIES_ONLY 0x00000004
73#endif // (NTDDI_VERSION >= NTDDI_WIN10_RS4)
74
75#define PROCESS_HEAP_REGION 1
76#define PROCESS_HEAP_UNCOMMITTED_RANGE 2
77#define PROCESS_HEAP_ENTRY_BUSY 4
78#define PROCESS_HEAP_ENTRY_MOVEABLE 16
79#define PROCESS_HEAP_ENTRY_DDESHARE 32
80
81#define LMEM_FIXED 0x0000
82#define LMEM_MOVEABLE 0x0002
83#define LMEM_NOCOMPACT 0x0010
84#define LMEM_NODISCARD 0x0020
85#define LMEM_ZEROINIT 0x0040
86#define LMEM_MODIFY 0x0080
87#define LMEM_DISCARDABLE 0x0F00
88#define LMEM_DISCARDED 0x4000
89#define LMEM_INVALID_HANDLE 0x8000
90#define LMEM_LOCKCOUNT 0x00FF
91#define LMEM_VALID_FLAGS 0x0F72
92
93#define LPTR (LMEM_FIXED | LMEM_ZEROINIT)
94#define LHND (LMEM_MOVEABLE | LMEM_ZEROINIT)
95#define NONZEROLPTR LMEM_FIXED
96#define NONZEROLHND LMEM_MOVEABLE
97
98#define LocalDiscard(m) LocalReAlloc((m), 0, LMEM_MOVEABLE)
99
100#define LOCKFILE_FAIL_IMMEDIATELY 1
101#define LOCKFILE_EXCLUSIVE_LOCK 2
102
103#define NUMA_NO_PREFERRED_NODE ((DWORD)-1)
104
105#ifndef _WINNT_ // FIXME this is in winnt.h, but shouldn't be there!
106typedef struct _SECURITY_ATTRIBUTES
107{
108 DWORD nLength;
109 LPVOID lpSecurityDescriptor;
110 BOOL bInheritHandle;
111} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
112#endif
113
114#ifndef _FILETIME_
115#define _FILETIME_
116typedef struct _FILETIME
117{
118 DWORD dwLowDateTime;
119 DWORD dwHighDateTime;
120} FILETIME, *PFILETIME, *LPFILETIME;
121#endif
122
123typedef DWORD (WINAPI *PTHREAD_START_ROUTINE)(LPVOID lpThreadParameter);
124typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
125
126typedef LPVOID (WINAPI *PENCLAVE_ROUTINE)(LPVOID lpThreadParameter);
127typedef PENCLAVE_ROUTINE LPENCLAVE_ROUTINE;
128
129typedef struct _CREATE_PROCESS_DEBUG_INFO
130{
131 HANDLE hFile;
132 HANDLE hProcess;
133 HANDLE hThread;
134 LPVOID lpBaseOfImage;
135 DWORD dwDebugInfoFileOffset;
136 DWORD nDebugInfoSize;
137 LPVOID lpThreadLocalBase;
138 LPTHREAD_START_ROUTINE lpStartAddress;
139 LPVOID lpImageName;
140 WORD fUnicode;
141} CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
142
143typedef struct _CREATE_THREAD_DEBUG_INFO
144{
145 HANDLE hThread;
146 LPVOID lpThreadLocalBase;
147 LPTHREAD_START_ROUTINE lpStartAddress;
148} CREATE_THREAD_DEBUG_INFO,*LPCREATE_THREAD_DEBUG_INFO;
149
150typedef struct _EXCEPTION_DEBUG_INFO
151{
152 EXCEPTION_RECORD ExceptionRecord;
153 DWORD dwFirstChance;
154} EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
155
156typedef struct _EXIT_THREAD_DEBUG_INFO
157{
158 DWORD dwExitCode;
159} EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
160
161typedef struct _EXIT_PROCESS_DEBUG_INFO
162{
163 DWORD dwExitCode;
164} EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
165
166typedef struct _LOAD_DLL_DEBUG_INFO
167{
168 HANDLE hFile;
169 LPVOID lpBaseOfDll;
170 DWORD dwDebugInfoFileOffset;
171 DWORD nDebugInfoSize;
172 LPVOID lpImageName;
173 WORD fUnicode;
174} LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
175
176typedef struct _UNLOAD_DLL_DEBUG_INFO
177{
178 LPVOID lpBaseOfDll;
179} UNLOAD_DLL_DEBUG_INFO,*LPUNLOAD_DLL_DEBUG_INFO;
180
181typedef struct _OUTPUT_DEBUG_STRING_INFO
182{
183 LPSTR lpDebugStringData;
184 WORD fUnicode;
185 WORD nDebugStringLength;
186} OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
187
188typedef struct _RIP_INFO
189{
190 DWORD dwError;
191 DWORD dwType;
192} RIP_INFO, *LPRIP_INFO;
193
194typedef struct _DEBUG_EVENT
195{
196 DWORD dwDebugEventCode;
197 DWORD dwProcessId;
198 DWORD dwThreadId;
199 union
200 {
201 EXCEPTION_DEBUG_INFO Exception;
202 CREATE_THREAD_DEBUG_INFO CreateThread;
203 CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
204 EXIT_THREAD_DEBUG_INFO ExitThread;
205 EXIT_PROCESS_DEBUG_INFO ExitProcess;
206 LOAD_DLL_DEBUG_INFO LoadDll;
207 UNLOAD_DLL_DEBUG_INFO UnloadDll;
208 OUTPUT_DEBUG_STRING_INFO DebugString;
209 RIP_INFO RipInfo;
210 } u;
211} DEBUG_EVENT, *LPDEBUG_EVENT;
212
213#ifndef MIDL_PASS
214typedef PCONTEXT LPCONTEXT;
215#endif
216
217typedef struct _OVERLAPPED
218{
219 ULONG_PTR Internal;
220 ULONG_PTR InternalHigh;
221 union
222 {
223 struct
224 {
225 DWORD Offset;
226 DWORD OffsetHigh;
227 } DUMMYSTRUCTNAME;
228 PVOID Pointer;
229 } DUMMYUNIONNAME;
230 HANDLE hEvent;
231} OVERLAPPED, *POVERLAPPED, *LPOVERLAPPED;
232
233typedef struct _OVERLAPPED_ENTRY
234{
235 ULONG_PTR lpCompletionKey;
236 LPOVERLAPPED lpOverlapped;
237 ULONG_PTR Internal;
238 DWORD dwNumberOfBytesTransferred;
239} OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY;
240
241typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
242typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
243typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
244typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
245typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
246typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
247
248#if (_WIN32_WINNT >= 0x0403)
249#define CRITICAL_SECTION_NO_DEBUG_INFO RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO
250#endif
251
252#ifndef _SYSTEMTIME_ // FIXME
253#define _SYSTEMTIME_
254typedef struct _SYSTEMTIME
255{
256 WORD wYear;
257 WORD wMonth;
258 WORD wDayOfWeek;
259 WORD wDay;
260 WORD wHour;
261 WORD wMinute;
262 WORD wSecond;
263 WORD wMilliseconds;
264} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
265#endif /* _SYSTEMTIME_ */
266
267typedef struct _WIN32_FIND_DATAA
268{
269 DWORD dwFileAttributes;
270 FILETIME ftCreationTime;
271 FILETIME ftLastAccessTime;
272 FILETIME ftLastWriteTime;
273 DWORD nFileSizeHigh;
274 DWORD nFileSizeLow;
275 DWORD dwReserved0;
276 DWORD dwReserved1;
277 _Field_z_ CHAR cFileName[MAX_PATH];
278 _Field_z_ CHAR cAlternateFileName[14];
279} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
280
281typedef struct _WIN32_FIND_DATAW
282{
283 DWORD dwFileAttributes;
284 FILETIME ftCreationTime;
285 FILETIME ftLastAccessTime;
286 FILETIME ftLastWriteTime;
287 DWORD nFileSizeHigh;
288 DWORD nFileSizeLow;
289 DWORD dwReserved0;
290 DWORD dwReserved1;
291 _Field_z_ WCHAR cFileName[MAX_PATH];
292 _Field_z_ WCHAR cAlternateFileName[14];
293} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
294
295#ifdef UNICODE
296typedef WIN32_FIND_DATAW WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
297#else
298typedef WIN32_FIND_DATAA WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
299#endif
300
301#if (NTDDI_VERSION >= NTDDI_LONGHORN) || defined(__REACTOS__)
302typedef enum _FILE_INFO_BY_HANDLE_CLASS
303{
304 FileBasicInfo,
305 FileStandardInfo,
306 FileNameInfo,
307 FileRenameInfo,
308 FileDispositionInfo,
309 FileAllocationInfo,
310 FileEndOfFileInfo,
311 FileStreamInfo,
312 FileCompressionInfo,
313 FileAttributeTagInfo,
314 FileIdBothDirectoryInfo,
315 FileIdBothDirectoryRestartInfo,
316 FileIoPriorityHintInfo,
317 FileRemoteProtocolInfo,
318 FileFullDirectoryInfo,
319 FileFullDirectoryRestartInfo,
320#if (NTDDI_VERSION >= NTDDI_WIN8) || defined(__REACTOS__)
321 FileStorageInfo,
322 FileAlignmentInfo,
323 FileIdInfo,
324 FileIdExtdDirectoryInfo,
325 FileIdExtdDirectoryRestartInfo,
326#endif
327#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) || defined(__REACTOS__)
328 FileDispositionInfoEx,
329 FileRenameInfoEx,
330#endif
331#if (NTDDI_VERSION >= NTDDI_WIN10_19H1) || defined(__REACTOS__)
332 FileCaseSensitiveInfo,
333 FileNormalizedNameInfo,
334#endif
335 MaximumFileInfoByHandleClass
336} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
337#endif
338
339typedef enum _FINDEX_INFO_LEVELS
340{
341 FindExInfoStandard,
342 FindExInfoBasic,
343 FindExInfoMaxInfoLevel
344} FINDEX_INFO_LEVELS;
345
346typedef enum _FINDEX_SEARCH_OPS
347{
348 FindExSearchNameMatch,
349 FindExSearchLimitToDirectories,
350 FindExSearchLimitToDevices,
351 FindExSearchMaxSearchOp
352} FINDEX_SEARCH_OPS;
353
354typedef enum _GET_FILEEX_INFO_LEVELS
355{
356 GetFileExInfoStandard,
357 GetFileExMaxInfoLevel
358} GET_FILEEX_INFO_LEVELS;
359
360typedef struct _PROCESS_HEAP_ENTRY
361{
362 PVOID lpData;
363 DWORD cbData;
364 BYTE cbOverhead;
365 BYTE iRegionIndex;
366 WORD wFlags;
367 _ANONYMOUS_UNION union
368 {
369 struct
370 {
371 HANDLE hMem;
372 DWORD dwReserved[3];
373 } Block;
374 struct
375 {
376 DWORD dwCommittedSize;
377 DWORD dwUnCommittedSize;
378 LPVOID lpFirstBlock;
379 LPVOID lpLastBlock;
380 } Region;
381 } DUMMYUNIONNAME;
382} PROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY;
383
384typedef
385VOID
386(WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE)(
387 _In_ DWORD dwErrorCode,
388 _In_ DWORD dwNumberOfBytesTransfered,
389 _Inout_ LPOVERLAPPED lpOverlapped);
390
391typedef struct _REASON_CONTEXT
392{
393 ULONG Version;
394 DWORD Flags;
395 union
396 {
397 struct
398 {
399 HMODULE LocalizedReasonModule;
400 ULONG LocalizedReasonId;
401 ULONG ReasonStringCount;
402 LPWSTR *ReasonStrings;
403 } Detailed;
404 LPWSTR SimpleReasonString;
405 } Reason;
406} REASON_CONTEXT, *PREASON_CONTEXT;
407
408#if (NTDDI_VERSION >= NTDDI_WIN10_RS3)
409typedef enum _READ_DIRECTORY_NOTIFY_INFORMATION_CLASS
410{
411 ReadDirectoryNotifyInformation = 1,
412 ReadDirectoryNotifyExtendedInformation,
413#if (NTDDI_VERSION >= NTDDI_WIN10_NI)
414 ReadDirectoryNotifyFullInformation,
415#endif
416 ReadDirectoryNotifyMaximumInformation
417} READ_DIRECTORY_NOTIFY_INFORMATION_CLASS, *PREAD_DIRECTORY_NOTIFY_INFORMATION_CLASS;
418#endif // (NTDDI_VERSION >= NTDDI_WIN10_RS3)
419
420#if (NTDDI_VERSION >= NTDDI_WIN11_ZN)
421typedef enum _FILE_INFO_BY_NAME_CLASS
422{
423 FileStatByNameInfo,
424 FileStatLxByNameInfo,
425 FileCaseSensitiveByNameInfo,
426 FileStatBasicByNameInfo,
427 MaximumFileInfoByNameClass
428} FILE_INFO_BY_NAME_CLASS, *PFILE_INFO_BY_NAME_CLASS;
429#endif // (NTDDI_VERSION >= NTDDI_WIN11_ZN)
430
431#endif // _MINWINBASE_