From 384ac4257badb7fdef748f10a6fe942f8cc16479 Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <[email protected]>
Date: Sun, 29 May 2022 19:54:17 +0530
Subject: [PATCH] headers: Add missing APIs and symbols in winbase.h

Signed-off-by: Biswapriyo Nath <[email protected]>
---
 mingw-w64-headers/include/winbase.h | 106 ++++++++++++++++++++++++++--
 1 file changed, 102 insertions(+), 4 deletions(-)

diff --git a/mingw-w64-headers/include/winbase.h 
b/mingw-w64-headers/include/winbase.h
index cc29351..c37fdaa 100644
--- a/mingw-w64-headers/include/winbase.h
+++ b/mingw-w64-headers/include/winbase.h
@@ -1211,7 +1211,46 @@ extern "C" {
   WINBASEAPI LPVOID WINAPI CreateFiber (SIZE_T dwStackSize, 
LPFIBER_START_ROUTINE lpStartAddress, LPVOID lpParameter);
   WINBASEAPI LPVOID WINAPI ConvertThreadToFiber (LPVOID lpParameter);
 
-  /* TODO: Add RTL_UMS... to winnt.h header and add UMS-base API.  */
+#define UMS_VERSION RTL_UMS_VERSION
+
+  typedef void *PUMS_CONTEXT;
+  typedef void *PUMS_COMPLETION_LIST;
+  typedef enum _RTL_UMS_THREAD_INFO_CLASS UMS_THREAD_INFO_CLASS, 
*PUMS_THREAD_INFO_CLASS;
+  typedef enum _RTL_UMS_SCHEDULER_REASON UMS_SCHEDULER_REASON;
+  typedef PRTL_UMS_SCHEDULER_ENTRY_POINT PUMS_SCHEDULER_ENTRY_POINT;
+
+  typedef struct _UMS_SCHEDULER_STARTUP_INFO {
+    ULONG UmsVersion;
+    PUMS_COMPLETION_LIST CompletionList;
+    PUMS_SCHEDULER_ENTRY_POINT SchedulerProc;
+    PVOID SchedulerParam;
+  } UMS_SCHEDULER_STARTUP_INFO, *PUMS_SCHEDULER_STARTUP_INFO;
+
+  typedef struct _UMS_SYSTEM_THREAD_INFORMATION {
+    ULONG UmsVersion;
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            ULONG IsUmsSchedulerThread : 1;
+            ULONG IsUmsWorkerThread : 1;
+        };
+        ULONG ThreadUmsFlags;
+    };
+  } UMS_SYSTEM_THREAD_INFORMATION, *PUMS_SYSTEM_THREAD_INFORMATION;
+
+  WINBASEAPI WINBOOL WINAPI CreateUmsCompletionList(PUMS_COMPLETION_LIST 
*UmsCompletionList);
+  WINBASEAPI WINBOOL WINAPI DequeueUmsCompletionListItems(PUMS_COMPLETION_LIST 
UmsCompletionList, DWORD WaitTimeOut, PUMS_CONTEXT *UmsThreadList);
+  WINBASEAPI WINBOOL WINAPI GetUmsCompletionListEvent(PUMS_COMPLETION_LIST 
UmsCompletionList, PHANDLE UmsCompletionEvent);
+  WINBASEAPI WINBOOL WINAPI ExecuteUmsThread(PUMS_CONTEXT UmsThread);
+  WINBASEAPI WINBOOL WINAPI UmsThreadYield(PVOID SchedulerParam);
+  WINBASEAPI WINBOOL WINAPI DeleteUmsCompletionList(PUMS_COMPLETION_LIST 
UmsCompletionList);
+  WINBASEAPI PUMS_CONTEXT WINAPI GetCurrentUmsThread(VOID);
+  WINBASEAPI PUMS_CONTEXT WINAPI GetNextUmsListItem(PUMS_CONTEXT UmsContext);
+  WINBASEAPI WINBOOL WINAPI QueryUmsThreadInformation(PUMS_CONTEXT UmsThread, 
UMS_THREAD_INFO_CLASS UmsThreadInfoClass, PVOID UmsThreadInformation, ULONG 
UmsThreadInformationLength, PULONG ReturnLength);
+  WINBASEAPI WINBOOL WINAPI SetUmsThreadInformation(PUMS_CONTEXT UmsThread, 
UMS_THREAD_INFO_CLASS UmsThreadInfoClass, PVOID UmsThreadInformation, ULONG 
UmsThreadInformationLength);
+  WINBASEAPI WINBOOL WINAPI DeleteUmsThreadContext(PUMS_CONTEXT UmsThread);
+  WINBASEAPI WINBOOL WINAPI CreateUmsThreadContext(PUMS_CONTEXT *lpUmsThread);
+  WINBASEAPI WINBOOL WINAPI EnterUmsSchedulingMode(PUMS_SCHEDULER_STARTUP_INFO 
SchedulerStartupInfo);
+  WINBASEAPI WINBOOL WINAPI GetUmsSystemThreadInformation(HANDLE ThreadHandle, 
PUMS_SYSTEM_THREAD_INFORMATION SystemThreadInfo);
 
 #if _WIN32_WINNT >= 0x0602
   WINBASEAPI WINBOOL WINAPI GetThreadInformation (HANDLE hThread, 
THREAD_INFORMATION_CLASS ThreadInformationClass, LPVOID ThreadInformation, 
DWORD ThreadInformationSize);
@@ -1521,6 +1560,9 @@ extern "C" {
 #if WINVER >= 0x0600
 #define STARTF_UNTRUSTEDSOURCE 0x00008000
 #endif
+#if NTDDI_VERSION >= NTDDI_WIN10_FE
+#define STARTF_HOLOGRAPHIC 0x00040000
+#endif
 
 #if _WIN32_WINNT >= 0x0600
   typedef struct _STARTUPINFOEXA {
@@ -1663,6 +1705,11 @@ extern "C" {
 #endif
 #if NTDDI_VERSION >= NTDDI_WIN10_MN
     ,ProcThreadAttributeMitigationAuditPolicy = 24
+    ,ProcThreadAttributeMachineType = 25
+    ,ProcThreadAttributeComponentFilter = 26
+#endif
+#if NTDDI_VERSION >= NTDDI_WIN10_FE
+    ,ProcThreadAttributeEnableOptionalXStateFeatures = 27
 #endif
   } PROC_THREAD_ATTRIBUTE_NUM;
 #endif
@@ -1694,6 +1741,14 @@ extern "C" {
 #define PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE ProcThreadAttributeValue 
(ProcThreadAttributePseudoConsole, FALSE, TRUE, FALSE)
 #endif
 
+#if NTDDI_VERSION >= NTDDI_WIN10_MN
+#define PROC_THREAD_ATTRIBUTE_MACHINE_TYPE ProcThreadAttributeValue 
(ProcThreadAttributeMachineType, FALSE, TRUE, FALSE)
+#endif
+
+#if NTDDI_VERSION >= NTDDI_WIN10_FE
+#define PROC_THREAD_ATTRIBUTE_ENABLE_OPTIONAL_XSTATE_FEATURES 
ProcThreadAttributeValue (ProcThreadAttributeEnableOptionalXStateFeatures, 
TRUE, TRUE, FALSE)
+#endif
+
 #if _WIN32_WINNT >= _WIN32_WINNT_WIN7
 #define PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE 0x01
 #define PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE 0x02
@@ -1845,6 +1900,12 @@ extern "C" {
 #define PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_OFF 
(0x00000002ULL << 36)
 #define PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_NON_EHCONT 
(0x00000003ULL << 36)
 
+#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_MASK 
(0x00000003ui64 << 40)
+#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_DEFER 
(0x00000000ui64 << 40)
+#define 
PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_ON 
(0x00000001ui64 << 40)
+#define 
PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_OFF 
(0x00000002ui64 << 40)
+#define 
PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_RESERVED 
(0x00000003ui64 << 40)
+
 #define 
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_MASK 
(0x00000003ULL << 48)
 #define 
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_DEFER 
(0x00000000ULL << 48)
 #define 
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_ON 
(0x00000001ULL << 48)
@@ -1886,6 +1947,7 @@ extern "C" {
 
 #if (NTDDI_VERSION >= NTDDI_WIN10_MN)
 #define PROC_THREAD_ATTRIBUTE_MITIGATION_AUDIT_POLICY ProcThreadAttributeValue 
(ProcThreadAttributeMitigationAuditPolicy, FALSE, TRUE, FALSE)
+#define PROC_THREAD_ATTRIBUTE_COMPONENT_FILTER ProcThreadAttributeValue 
(ProcThreadAttributeComponentFilter, FALSE, TRUE, FALSE)
 
 #define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_CET_USER_SHADOW_STACKS_MASK 
(0x00000003ULL << 28)
 #define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_CET_USER_SHADOW_STACKS_DEFER 
(0x00000000ULL << 28)
@@ -1904,6 +1966,13 @@ extern "C" {
 #define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_ON 
(0x00000001ULL << 36)
 #define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_OFF 
(0x00000002ULL << 36)
 #define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_RESERVED 
(0x00000003ULL << 36)
+
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_MASK 
(0x00000003ui64 << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_DEFER 
(0x00000000ui64 << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_ON 
(0x00000001ui64 << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_OFF 
(0x00000002ui64 << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_RESERVED 
(0x00000003ui64 << 40)
+
 #endif /* NTDDI_WIN10_MN */
 
 #define ATOM_FLAG_GLOBAL 0x2
@@ -2273,6 +2342,26 @@ extern "C" {
     PVOID pvCallbackContext;
   } COPYFILE2_EXTENDED_PARAMETERS;
 
+#if NTDDI_VERSION >= NTDDI_WIN10_FE
+
+#define COPYFILE2_IO_CYCLE_SIZE_MIN 4096
+#define COPYFILE2_IO_CYCLE_SIZE_MAX 0x40000000
+#define COPYFILE2_IO_RATE_MIN 512
+
+  typedef struct COPYFILE2_EXTENDED_PARAMETERS_V2 {
+    DWORD dwSize;
+    DWORD dwCopyFlags;
+    WINBOOL *pfCancel;
+    PCOPYFILE2_PROGRESS_ROUTINE pProgressRoutine;
+    PVOID pvCallbackContext;
+    DWORD dwCopyFlagsV2;
+    ULONG ioDesiredSize;
+    ULONG ioDesiredRate;
+    PVOID reserved[8];
+  } COPYFILE2_EXTENDED_PARAMETERS_V2;
+
+#endif /* NTDDI_VERSION >= NTDDI_WIN10_FE */
+
   WINBASEAPI HRESULT WINAPI CopyFile2 (PCWSTR pwszExistingFileName, PCWSTR 
pwszNewFileName, COPYFILE2_EXTENDED_PARAMETERS *pExtendedParameters);
 #endif
 #endif
@@ -2458,6 +2547,10 @@ extern "C" {
   WINBASEAPI WINBOOL WINAPI ReadDirectoryChangesW (HANDLE hDirectory, LPVOID 
lpBuffer, DWORD nBufferLength, WINBOOL bWatchSubtree, DWORD dwNotifyFilter, 
LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped, 
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
 #endif
 
+#if NTDDI_VERSION >= NTDDI_WIN10_RS3
+WINBASEAPI WINBOOL WINAPI ReadDirectoryChangesExW (HANDLE hDirectory, LPVOID 
lpBuffer, DWORD nBufferLength, WINBOOL bWatchSubtree, DWORD dwNotifyFilter, 
LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped, 
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, 
READ_DIRECTORY_NOTIFY_INFORMATION_CLASS ReadDirectoryNotifyInformationClass);
+#endif
+
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 
   WINADVAPI WINBOOL WINAPI AccessCheckAndAuditAlarmA (LPCSTR SubsystemName, 
LPVOID HandleId, LPSTR ObjectTypeName, LPSTR ObjectName, PSECURITY_DESCRIPTOR 
SecurityDescriptor, DWORD DesiredAccess, PGENERIC_MAPPING GenericMapping, 
WINBOOL ObjectCreation, LPDWORD GrantedAccess, LPBOOL AccessStatus, LPBOOL 
pfGenerateOnClose);
@@ -2597,10 +2690,7 @@ extern "C" {
   WINBASEAPI WINBOOL WINAPI DeleteTimerQueue (HANDLE TimerQueue);
 
 #ifndef __WIDL__
-  /* Add Tp... API to winnt.h header and Threadpool-base-API. */
-
   WINBASEAPI WINBOOL WINAPI AddIntegrityLabelToBoundaryDescriptor (HANDLE 
*BoundaryDescriptor, PSID IntegrityLabel);
-
 #endif
 
 #define HW_PROFILE_GUIDLEN 39
@@ -3265,6 +3355,10 @@ extern "C" {
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 #if defined (__x86_64__) || defined (__i386__)
   WINBASEAPI WINBOOL WINAPI SetXStateFeaturesMask (PCONTEXT Context, DWORD64 
FeatureMask);
+#if NTDDI_VERSION >= NTDDI_WIN10_FE
+  WINBASEAPI DWORD64 WINAPI GetThreadEnabledXStateFeatures(VOID);
+  WINBASEAPI WINBOOL WINAPI EnableProcessOptionalXStateFeatures(DWORD64 
Features);
+#endif /* NTDDI_VERSION >= NTDDI_WIN10_FE */
 #endif
 #if _WIN32_WINNT >= 0x0601
   WINBASEAPI DWORD APIENTRY EnableThreadProfiling (HANDLE ThreadHandle, DWORD 
Flags, DWORD64 HardwareCounters, HANDLE *PerformanceDataHandle);
@@ -3309,6 +3403,10 @@ FORCEINLINE VOID 
DestroyThreadpoolEnvironment(PTP_CALLBACK_ENVIRON cbe) {
   TpDestroyCallbackEnviron(cbe);
 }
 
+FORCEINLINE VOID SetThreadpoolCallbackPersistent(PTP_CALLBACK_ENVIRON pcbe) {
+  TpSetCallbackPersistent(pcbe);
+}
+
 #endif /* !__WIDL__ */
 #endif /* _WIN32_WINNT >= 0x0600 */
 #endif /* WINAPI_PARTITION_APP */
-- 
2.36.1

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to