master
  1#ifndef _MINWINBASE_
  2#define _MINWINBASE_
  3
  4#ifdef __cplusplus
  5extern "C" {
  6#endif
  7
  8#define MoveMemory RtlMoveMemory
  9#define CopyMemory RtlCopyMemory
 10#define FillMemory RtlFillMemory
 11#define ZeroMemory RtlZeroMemory
 12
 13  typedef struct _SECURITY_ATTRIBUTES {
 14    DWORD nLength;
 15    LPVOID lpSecurityDescriptor;
 16    WINBOOL bInheritHandle;
 17  } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
 18
 19  typedef struct _OVERLAPPED {
 20    ULONG_PTR Internal;
 21    ULONG_PTR InternalHigh;
 22    __C89_NAMELESS union {
 23        struct {
 24            DWORD Offset;
 25            DWORD OffsetHigh;
 26        } DUMMYSTRUCTNAME;
 27        PVOID Pointer;
 28    } DUMMYUNIONNAME;
 29    HANDLE hEvent;
 30  } OVERLAPPED, *LPOVERLAPPED;
 31
 32  typedef struct _OVERLAPPED_ENTRY {
 33    ULONG_PTR lpCompletionKey;
 34    LPOVERLAPPED lpOverlapped;
 35    ULONG_PTR Internal;
 36    DWORD dwNumberOfBytesTransferred;
 37  } OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY;
 38
 39#ifndef _FILETIME_
 40#define _FILETIME_
 41  typedef struct _FILETIME {
 42    DWORD dwLowDateTime;
 43    DWORD dwHighDateTime;
 44  } FILETIME,*PFILETIME,*LPFILETIME;
 45#endif
 46
 47#ifndef _SYSTEMTIME_
 48#define _SYSTEMTIME_
 49  typedef struct _SYSTEMTIME {
 50    WORD wYear;
 51    WORD wMonth;
 52    WORD wDayOfWeek;
 53    WORD wDay;
 54    WORD wHour;
 55    WORD wMinute;
 56    WORD wSecond;
 57    WORD wMilliseconds;
 58  } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
 59#endif
 60
 61  typedef struct _WIN32_FIND_DATAA {
 62    DWORD dwFileAttributes;
 63    FILETIME ftCreationTime;
 64    FILETIME ftLastAccessTime;
 65    FILETIME ftLastWriteTime;
 66    DWORD nFileSizeHigh;
 67    DWORD nFileSizeLow;
 68    DWORD dwReserved0;
 69    DWORD dwReserved1;
 70    CHAR cFileName[MAX_PATH];
 71    CHAR cAlternateFileName[14];
 72#ifdef _MAC
 73    DWORD dwFileType;
 74    DWORD dwCreatorType;
 75    WORD  wFinderFlags;
 76#endif
 77  } WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
 78
 79  typedef struct _WIN32_FIND_DATAW {
 80    DWORD dwFileAttributes;
 81    FILETIME ftCreationTime;
 82    FILETIME ftLastAccessTime;
 83    FILETIME ftLastWriteTime;
 84    DWORD nFileSizeHigh;
 85    DWORD nFileSizeLow;
 86    DWORD dwReserved0;
 87    DWORD dwReserved1;
 88    WCHAR cFileName[MAX_PATH];
 89    WCHAR cAlternateFileName[14];
 90#ifdef _MAC
 91    DWORD dwFileType;
 92    DWORD dwCreatorType;
 93    WORD  wFinderFlags;
 94#endif
 95  } WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
 96
 97  __MINGW_TYPEDEF_AW(WIN32_FIND_DATA)
 98  __MINGW_TYPEDEF_AW(PWIN32_FIND_DATA)
 99  __MINGW_TYPEDEF_AW(LPWIN32_FIND_DATA)
100
101#if _WIN32_WINNT >= 0x0400
102  typedef enum _FINDEX_INFO_LEVELS {
103    FindExInfoStandard,
104    FindExInfoBasic,
105    FindExInfoMaxInfoLevel
106  } FINDEX_INFO_LEVELS;
107
108#define FIND_FIRST_EX_CASE_SENSITIVE 0x00000001
109#define FIND_FIRST_EX_LARGE_FETCH 0x00000002
110#if NTDDI_VERSION >= 0x0A000005
111#define FIND_FIRST_EX_ON_DISK_ENTRIES_ONLY  0x00000004
112#endif
113
114  typedef enum _FINDEX_SEARCH_OPS {
115    FindExSearchNameMatch,
116    FindExSearchLimitToDirectories,
117    FindExSearchLimitToDevices,
118    FindExSearchMaxSearchOp
119  } FINDEX_SEARCH_OPS;
120#endif
121
122#if _WIN32_WINNT >= 0x0400
123#if NTDDI_VERSION >= NTDDI_WIN10_RS3
124  typedef enum _READ_DIRECTORY_NOTIFY_INFORMATION_CLASS {
125    ReadDirectoryNotifyInformation = 1,
126    ReadDirectoryNotifyExtendedInformation = 2
127#if NTDDI_VERSION >= NTDDI_WIN10_NI
128    ,ReadDirectoryNotifyFullInformation
129#endif
130    ,ReadDirectoryNotifyMaximumInformation
131  } READ_DIRECTORY_NOTIFY_INFORMATION_CLASS, *PREAD_DIRECTORY_NOTIFY_INFORMATION_CLASS;
132#endif
133#endif /* _WIN32_WINNT >= 0x0400 */
134
135  typedef enum _GET_FILEEX_INFO_LEVELS {
136    GetFileExInfoStandard,
137    GetFileExMaxInfoLevel
138  } GET_FILEEX_INFO_LEVELS;
139
140#if _WIN32_WINNT >= 0x0600
141  typedef enum _FILE_INFO_BY_HANDLE_CLASS {
142    FileBasicInfo /* is zero? */,
143    FileStandardInfo,
144    FileNameInfo,
145    FileRenameInfo,
146    FileDispositionInfo,
147    FileAllocationInfo,
148    FileEndOfFileInfo,
149    FileStreamInfo,
150    FileCompressionInfo,
151    FileAttributeTagInfo,
152    FileIdBothDirectoryInfo,
153    FileIdBothDirectoryRestartInfo,
154    FileIoPriorityHintInfo,
155    FileRemoteProtocolInfo,
156    FileFullDirectoryInfo,
157    FileFullDirectoryRestartInfo,
158#if _WIN32_WINNT >= 0x0602
159    FileStorageInfo,
160    FileAlignmentInfo,
161    FileIdInfo,
162    FileIdExtdDirectoryInfo,
163    FileIdExtdDirectoryRestartInfo,
164#endif
165#if NTDDI_VERSION >= 0x0A000002
166    FileDispositionInfoEx,
167    FileRenameInfoEx,
168#endif
169#if NTDDI_VERSION >= 0x0A000007
170    FileCaseSensitiveInfo,
171    FileNormalizedNameInfo,
172#endif
173    MaximumFileInfoByHandleClass
174  } FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
175#endif
176
177#if NTDDI_VERSION >= NTDDI_WIN11_ZN
178  typedef enum _FILE_INFO_BY_NAME_CLASS {
179    FileStatByNameInfo,
180    FileStatLxByNameInfo,
181    FileCaseSensitiveByNameInfo,
182    FileStatBasicByNameInfo,
183    MaximumFileInfoByNameClass
184  } FILE_INFO_BY_NAME_CLASS, *PFILE_INFO_BY_NAME_CLASS;
185#endif
186
187  typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
188  typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
189  typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
190  typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
191  typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
192  typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
193
194  typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE) (DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped);
195
196#define LOCKFILE_FAIL_IMMEDIATELY 0x1
197#define LOCKFILE_EXCLUSIVE_LOCK 0x2
198
199  typedef struct _PROCESS_HEAP_ENTRY {
200    PVOID lpData;
201    DWORD cbData;
202    BYTE cbOverhead;
203    BYTE iRegionIndex;
204    WORD wFlags;
205    __C89_NAMELESS union {
206        struct {
207            HANDLE hMem;
208            DWORD dwReserved[3];
209        } Block;
210        struct {
211            DWORD dwCommittedSize;
212            DWORD dwUnCommittedSize;
213            LPVOID lpFirstBlock;
214            LPVOID lpLastBlock;
215        } Region;
216    } DUMMYUNIONNAME;
217  } PROCESS_HEAP_ENTRY,*LPPROCESS_HEAP_ENTRY,*PPROCESS_HEAP_ENTRY;
218
219#define PROCESS_HEAP_REGION 0x1
220#define PROCESS_HEAP_UNCOMMITTED_RANGE 0x2
221#define PROCESS_HEAP_ENTRY_BUSY 0x4
222#define PROCESS_HEAP_SEG_ALLOC 0x8
223#define PROCESS_HEAP_ENTRY_MOVEABLE 0x10
224#define PROCESS_HEAP_ENTRY_DDESHARE 0x20
225
226  typedef struct _REASON_CONTEXT {
227    ULONG Version;
228    DWORD Flags;
229    union {
230        struct {
231            HMODULE LocalizedReasonModule;
232            ULONG LocalizedReasonId;
233            ULONG ReasonStringCount;
234            LPWSTR *ReasonStrings;
235        } Detailed;
236        LPWSTR SimpleReasonString;
237    } Reason;
238  } REASON_CONTEXT, *PREASON_CONTEXT;
239
240#define EXCEPTION_DEBUG_EVENT 1
241#define CREATE_THREAD_DEBUG_EVENT 2
242#define CREATE_PROCESS_DEBUG_EVENT 3
243#define EXIT_THREAD_DEBUG_EVENT 4
244#define EXIT_PROCESS_DEBUG_EVENT 5
245#define LOAD_DLL_DEBUG_EVENT 6
246#define UNLOAD_DLL_DEBUG_EVENT 7
247#define OUTPUT_DEBUG_STRING_EVENT 8
248#define RIP_EVENT 9
249
250  typedef DWORD (WINAPI *PTHREAD_START_ROUTINE) (LPVOID lpThreadParameter);
251  typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
252
253  typedef LPVOID (WINAPI *PENCLAVE_ROUTINE) (LPVOID lpThreadParameter);
254  typedef PENCLAVE_ROUTINE LPENCLAVE_ROUTINE;
255
256  typedef struct _EXCEPTION_DEBUG_INFO {
257    EXCEPTION_RECORD ExceptionRecord;
258    DWORD dwFirstChance;
259  } EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
260
261  typedef struct _CREATE_THREAD_DEBUG_INFO {
262    HANDLE hThread;
263    LPVOID lpThreadLocalBase;
264    LPTHREAD_START_ROUTINE lpStartAddress;
265  } CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
266
267  typedef struct _CREATE_PROCESS_DEBUG_INFO {
268    HANDLE hFile;
269    HANDLE hProcess;
270    HANDLE hThread;
271    LPVOID lpBaseOfImage;
272    DWORD dwDebugInfoFileOffset;
273    DWORD nDebugInfoSize;
274    LPVOID lpThreadLocalBase;
275    LPTHREAD_START_ROUTINE lpStartAddress;
276    LPVOID lpImageName;
277    WORD fUnicode;
278  } CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
279
280  typedef struct _EXIT_THREAD_DEBUG_INFO {
281    DWORD dwExitCode;
282  } EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
283
284  typedef struct _EXIT_PROCESS_DEBUG_INFO {
285    DWORD dwExitCode;
286  } EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
287
288  typedef struct _LOAD_DLL_DEBUG_INFO {
289    HANDLE hFile;
290    LPVOID lpBaseOfDll;
291    DWORD dwDebugInfoFileOffset;
292    DWORD nDebugInfoSize;
293    LPVOID lpImageName;
294    WORD fUnicode;
295  } LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
296
297  typedef struct _UNLOAD_DLL_DEBUG_INFO {
298    LPVOID lpBaseOfDll;
299  } UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
300
301  typedef struct _OUTPUT_DEBUG_STRING_INFO {
302    LPSTR lpDebugStringData;
303    WORD fUnicode;
304    WORD nDebugStringLength;
305  } OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
306
307  typedef struct _RIP_INFO {
308    DWORD dwError;
309    DWORD dwType;
310  } RIP_INFO, *LPRIP_INFO;
311
312  typedef struct _DEBUG_EVENT {
313    DWORD dwDebugEventCode;
314    DWORD dwProcessId;
315    DWORD dwThreadId;
316    union {
317      EXCEPTION_DEBUG_INFO Exception;
318      CREATE_THREAD_DEBUG_INFO CreateThread;
319      CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
320      EXIT_THREAD_DEBUG_INFO ExitThread;
321      EXIT_PROCESS_DEBUG_INFO ExitProcess;
322      LOAD_DLL_DEBUG_INFO LoadDll;
323      UNLOAD_DLL_DEBUG_INFO UnloadDll;
324      OUTPUT_DEBUG_STRING_INFO DebugString;
325      RIP_INFO RipInfo;
326    } u;
327  } DEBUG_EVENT, *LPDEBUG_EVENT;
328
329#ifndef __WIDL__
330  typedef PCONTEXT LPCONTEXT;
331#endif
332
333#define STILL_ACTIVE STATUS_PENDING
334#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
335#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
336#define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT
337#define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP
338#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
339#define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND
340#define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO
341#define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT
342#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
343#define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW
344#define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK
345#define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW
346#define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO
347#define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW
348#define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION
349#define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR
350#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION
351#define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
352#define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW
353#define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION
354#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION
355#define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE
356#define EXCEPTION_POSSIBLE_DEADLOCK STATUS_POSSIBLE_DEADLOCK
357#define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT
358
359#define LMEM_FIXED 0x0
360#define LMEM_MOVEABLE 0x2
361#define LMEM_NOCOMPACT 0x10
362#define LMEM_NODISCARD 0x20
363#define LMEM_ZEROINIT 0x40
364#define LMEM_MODIFY 0x80
365#define LMEM_DISCARDABLE 0xf00
366#define LMEM_VALID_FLAGS 0xf72
367#define LMEM_INVALID_HANDLE 0x8000
368
369#define LHND (LMEM_MOVEABLE | LMEM_ZEROINIT)
370#define LPTR (LMEM_FIXED | LMEM_ZEROINIT)
371
372#define NONZEROLHND (LMEM_MOVEABLE)
373#define NONZEROLPTR (LMEM_FIXED)
374
375#define LocalDiscard(h) LocalReAlloc ((h), 0, LMEM_MOVEABLE)
376
377#define LMEM_DISCARDED 0x4000
378#define LMEM_LOCKCOUNT 0xff
379
380#define NUMA_NO_PREFERRED_NODE ((DWORD) -1)
381
382#ifdef __cplusplus
383}
384#endif
385#endif