Thanks for the review. I have attached the updated patch file.
From 8a591f3fc09b2290dd8282932fee398fd3f20885 Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <[email protected]>
Date: Thu, 2 Jun 2022 18:51:33 +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 | 158 ++++++++++++++++++++++++++--
 1 file changed, 151 insertions(+), 7 deletions(-)

diff --git a/mingw-w64-headers/include/winbase.h 
b/mingw-w64-headers/include/winbase.h
index cc29351..9a09a9d 100644
--- a/mingw-w64-headers/include/winbase.h
+++ b/mingw-w64-headers/include/winbase.h
@@ -93,9 +93,23 @@ extern "C" {
 #define FILE_FLAG_OPEN_REPARSE_POINT 0x200000
 #define FILE_FLAG_OPEN_NO_RECALL 0x100000
 #define FILE_FLAG_FIRST_PIPE_INSTANCE 0x80000
-#if _WIN32_WINNT >= 0x0602
+#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
 #define FILE_FLAG_OPEN_REQUIRING_OPLOCK 0x40000
 #endif
+#if NTDDI_VERSION >= NTDDI_WIN10_NI
+  typedef enum FILE_WRITE_FLAGS {
+    FILE_WRITE_FLAGS_NONE = 0,
+    FILE_WRITE_FLAGS_WRITE_THROUGH = 0x000000001
+  } FILE_WRITE_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(FILE_WRITE_FLAGS)
+
+typedef enum FILE_FLUSH_MODE {
+    FILE_FLUSH_DEFAULT = 0,
+    FILE_FLUSH_DATA,
+    FILE_FLUSH_MIN_METADATA,
+    FILE_FLUSH_NO_SYNC
+  } FILE_FLUSH_MODE;
+#endif
 
 #define PROGRESS_CONTINUE 0
 #define PROGRESS_CANCEL 1
@@ -131,6 +145,9 @@ extern "C" {
 #define COPY_FILE_DISABLE_PRE_ALLOCATION 0x04000000
 #define COPY_FILE_ENABLE_LOW_FREE_SPACE_MODE 0x08000000
 #endif
+#if NTDDI_VERSION >= NTDDI_WIN10_NI
+#define COPY_FILE_ENABLE_SPARSE_COPY 0x20000000
+#endif
 
 #define REPLACEFILE_WRITE_THROUGH 0x1
 #define REPLACEFILE_IGNORE_MERGE_ERRORS 0x2
@@ -1211,7 +1228,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 RTL_UMS_THREAD_INFO_CLASS UMS_THREAD_INFO_CLASS, 
*PUMS_THREAD_INFO_CLASS;
+  typedef 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 +1577,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 +1722,14 @@ 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
+#if NTDDI_VERSION >= NTDDI_WIN10_NI
+    ,ProcThreadAttributeTrustedApp = 29
 #endif
   } PROC_THREAD_ATTRIBUTE_NUM;
 #endif
@@ -1694,6 +1761,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
@@ -1701,8 +1776,6 @@ extern "C" {
 #endif
 
 #if _WIN32_WINNT >= _WIN32_WINNT_WIN8
-#define PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES ProcThreadAttributeValue 
(ProcThreadAttributeSecurityCapabilities, FALSE, TRUE, FALSE)
-
 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_MASK 
(0x00000003 << 8)
 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_DEFER 
(0x00000000 << 8)
 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON 
(0x00000001 << 8)
@@ -1845,12 +1918,30 @@ 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 
(0x00000003ULL << 40)
+#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_DEFER 
(0x00000000ULL << 40)
+#define 
PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_ON 
(0x00000001ULL << 40)
+#define 
PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_OFF 
(0x00000002ULL << 40)
+#define 
PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_RESERVED 
(0x00000003ULL << 40)
+
+#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_MASK 
(0x00000003ULL << 44)
+#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_DEFER 
(0x00000000ULL << 44)
+#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_ALWAYS_ON 
(0x00000001ULL << 44)
+#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_ALWAYS_OFF 
(0x00000002ULL << 44)
+#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_RESERVED 
(0x00000003ULL << 44)
+
 #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)
 #define 
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_OFF
 (0x00000002ULL << 48)
 #define 
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_RESERVED 
(0x00000003ULL << 48)
 
+#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_MASK 
(0x00000003ULL << 52)
+#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_DEFER 
(0x00000000ULL << 52)
+#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_ALWAYS_ON 
(0x00000001ULL << 52)
+#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_ALWAYS_OFF 
(0x00000002ULL << 52)
+#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_RESERVED 
(0x00000003ULL << 52)
+
 #endif /* _WIN32_WINNT_WINTHRESHOLD */
 #endif /* _WIN32_WINNT_WINBLUE */
 #endif /* _WIN32_WINNT_WIN8 */
@@ -1886,6 +1977,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,8 +1996,19 @@ 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 
(0x00000003ULL << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_DEFER 
(0x00000000ULL << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_ON 
(0x00000001ULL << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_OFF 
(0x00000002ULL << 40)
+#define 
PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_RESERVED 
(0x00000003ULL << 40)
+
 #endif /* NTDDI_WIN10_MN */
 
+#if NTDDI_VERSION >= NTDDI_WIN10_NI
+#define PROC_THREAD_ATTRIBUTE_TRUSTED_APP ProcThreadAttributeValue 
(ProcThreadAttributeTrustedApp, FALSE, TRUE, FALSE)
+#endif
+
 #define ATOM_FLAG_GLOBAL 0x2
 
   WINBASEAPI WINBOOL WINAPI GetProcessShutdownParameters (LPDWORD lpdwLevel, 
LPDWORD lpdwFlags);
@@ -2273,6 +2376,31 @@ 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;
+
+#if NTDDI_VERSION >= NTDDI_WIN10_NI
+#define COPY_FILE2_V2_DONT_COPY_JUNCTIONS 0x00000001
+#define COPY_FILE2_V2_VALID_FLAGS COPY_FILE2_V2_DONT_COPY_JUNCTIONS
+#endif
+
+#endif /* NTDDI_VERSION >= NTDDI_WIN10_FE */
+
   WINBASEAPI HRESULT WINAPI CopyFile2 (PCWSTR pwszExistingFileName, PCWSTR 
pwszNewFileName, COPYFILE2_EXTENDED_PARAMETERS *pExtendedParameters);
 #endif
 #endif
@@ -2458,6 +2586,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 +2729,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
@@ -3163,6 +3292,9 @@ extern "C" {
 #define RPI_SMB2_FLAG_SERVERCAP_DIRECTORY_LEASING 0x00000020
 #endif
 
+#define RPI_SMB2_SHAREFLAG_ENCRYPT_DATA 0x00000001
+#define RPI_SMB2_SHAREFLAG_COMPRESS_DATA 0x00000002
+
   typedef struct _FILE_REMOTE_PROTOCOL_INFO {
     USHORT StructureVersion;
     USHORT StructureSize;
@@ -3187,7 +3319,11 @@ extern "C" {
     } Server;
     struct {
       ULONG Capabilities;
+#if NTDDI_VERSION >= NTDDI_WIN10_NI
+      ULONG ShareFlags;
+#else
       ULONG CachingFlags;
+#endif
     } Share;
       } Smb2;
       ULONG Reserved[16];
@@ -3265,6 +3401,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 +3449,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