From: Eric Pouech epouech@codeweavers.com
--- include/winbase.h | 6 ++++++ include/winnt.h | 23 +++++++++++++++++------ include/winternl.h | 2 ++ 3 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/include/winbase.h b/include/winbase.h index c96f58a61b3..0213b40ef57 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1823,6 +1823,7 @@ WINADVAPI PVOID WINAPI FreeSid(PSID); WINADVAPI BOOL WINAPI GetAce(PACL,DWORD,LPVOID*); WINADVAPI BOOL WINAPI GetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS); WINBASEAPI DWORD WINAPI GetActiveProcessorCount(WORD); +WINBASEAPI WORD WINAPI GetActiveProcessorGroupCount(void); WINBASEAPI HRESULT WINAPI GetApplicationRestartSettings(HANDLE,WCHAR*,DWORD*,DWORD*); WINBASEAPI UINT WINAPI GetAtomNameA(ATOM,LPSTR,INT); WINBASEAPI UINT WINAPI GetAtomNameW(ATOM,LPWSTR,INT); @@ -1921,6 +1922,7 @@ WINBASEAPI DWORD WINAPI GetLongPathNameW(LPCWSTR,LPWSTR,DWORD); #define GetLongPathName WINELIB_NAME_AW(GetLongPathName) WINBASEAPI BOOL WINAPI GetMailslotInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD); WINBASEAPI DWORD WINAPI GetMaximumProcessorCount(WORD); +WINBASEAPI WORD WINAPI GetMaximumProcessorGroupCount(void); WINBASEAPI DWORD WINAPI GetModuleFileNameA(HMODULE,LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetModuleFileNameW(HMODULE,LPWSTR,DWORD); #define GetModuleFileName WINELIB_NAME_AW(GetModuleFileName) @@ -1969,6 +1971,7 @@ WINBASEAPI BOOL WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UI #define GetPrivateProfileStruct WINELIB_NAME_AW(GetPrivateProfileStruct) WINBASEAPI FARPROC WINAPI GetProcAddress(HMODULE,LPCSTR); WINBASEAPI BOOL WINAPI GetProcessAffinityMask(HANDLE,PDWORD_PTR,PDWORD_PTR); +WINBASEAPI BOOL WINAPI GetProcessGroupAffinity(HANDLE, PUSHORT, PUSHORT); WINBASEAPI DWORD WINAPI GetProcessHeaps(DWORD,PHANDLE); WINBASEAPI DWORD WINAPI GetProcessId(HANDLE); WINBASEAPI DWORD WINAPI GetProcessIdOfThread(HANDLE); @@ -2031,6 +2034,7 @@ WINBASEAPI DWORD WINAPI GetTempPathW(DWORD,LPWSTR); #define GetTempPath WINELIB_NAME_AW(GetTempPath) WINBASEAPI BOOL WINAPI GetThreadContext(HANDLE,CONTEXT *); WINBASEAPI DWORD WINAPI GetThreadErrorMode(void); +WINBASEAPI BOOL WINAPI GetThreadGroupAffinity(HANDLE, PGROUP_AFFINITY); WINBASEAPI DWORD WINAPI GetThreadId(HANDLE); WINBASEAPI BOOL WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL); WINBASEAPI INT WINAPI GetThreadPriority(HANDLE); @@ -2409,7 +2413,9 @@ WINBASEAPI DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE,DWORD_PTR); WINBASEAPI BOOL WINAPI SetThreadContext(HANDLE,const CONTEXT *); WINBASEAPI BOOL WINAPI SetThreadErrorMode(DWORD,LPDWORD); WINBASEAPI DWORD WINAPI SetThreadExecutionState(EXECUTION_STATE); +WINBASEAPI BOOL WINAPI SetThreadGroupAffinity(HANDLE, const GROUP_AFFINITY *, GROUP_AFFINITY *); WINBASEAPI DWORD WINAPI SetThreadIdealProcessor(HANDLE,DWORD); +WINBASEAPI BOOL WINAPI SetThreadIdealProcessorEx(HANDLE, PROCESSOR_NUMBER *, PROCESSOR_NUMBER *); WINBASEAPI BOOL WINAPI SetThreadPriority(HANDLE,INT); WINBASEAPI BOOL WINAPI SetThreadPriorityBoost(HANDLE,BOOL); WINADVAPI BOOL WINAPI SetThreadToken(PHANDLE,HANDLE); diff --git a/include/winnt.h b/include/winnt.h index d360f5d0178..e53446472d6 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -734,10 +734,11 @@ typedef DWORD FLONG; #define PROCESSOR_OPTIL 18767
#ifdef _WIN64 -#define MAXIMUM_PROCESSORS 64 +#define MAXIMUM_PROC_PER_GROUP 64 #else -#define MAXIMUM_PROCESSORS 32 +#define MAXIMUM_PROC_PER_GROUP 32 #endif +#define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
typedef struct _MEMORY_BASIC_INFORMATION { @@ -6666,8 +6667,13 @@ typedef struct _PROCESSOR_RELATIONSHIP typedef struct _NUMA_NODE_RELATIONSHIP { DWORD NodeNumber; - BYTE Reserved[20]; - GROUP_AFFINITY GroupMask; + BYTE Reserved[18]; + WORD GroupCount; + union + { + GROUP_AFFINITY GroupMask; + GROUP_AFFINITY GroupMasks[ANYSIZE_ARRAY]; + }; } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
typedef struct _CACHE_RELATIONSHIP @@ -6677,8 +6683,13 @@ typedef struct _CACHE_RELATIONSHIP WORD LineSize; DWORD CacheSize; PROCESSOR_CACHE_TYPE Type; - BYTE Reserved[20]; - GROUP_AFFINITY GroupMask; + BYTE Reserved[18]; + WORD GroupCount; + union + { + GROUP_AFFINITY GroupMask; + GROUP_AFFINITY GroupMasks[ANYSIZE_ARRAY]; + }; } CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
typedef struct _GROUP_RELATIONSHIP diff --git a/include/winternl.h b/include/winternl.h index 2c985465096..6ee4192bb64 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -4586,6 +4586,7 @@ NTSYSAPI NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG); NTSYSAPI NTSTATUS WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*); NTSYSAPI ULONG WINAPI NtGetCurrentProcessorNumber(void); +NTSYSAPI ULONG WINAPI NtGetCurrentProcessorNumberEx(PROCESSOR_NUMBER*); NTSYSAPI NTSTATUS WINAPI NtGetNextProcess(HANDLE,ACCESS_MASK,ULONG,ULONG,HANDLE*); NTSYSAPI NTSTATUS WINAPI NtGetNextThread(HANDLE,HANDLE,ACCESS_MASK,ULONG,ULONG,HANDLE*); NTSYSAPI NTSTATUS WINAPI NtGetNlsSectionPtr(ULONG,ULONG,void*,void**,SIZE_T*); @@ -4955,6 +4956,7 @@ NTSYSAPI NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT,PULONG,PULONG); NTSYSAPI NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD); NTSYSAPI ULONG WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR); NTSYSAPI PEB * WINAPI RtlGetCurrentPeb(void); +NTSYSAPI ULONG WINAPI RtlGetCurrentProcessorNumber(void); NTSYSAPI void WINAPI RtlGetCurrentProcessorNumberEx(PROCESSOR_NUMBER*); NTSYSAPI HANDLE WINAPI RtlGetCurrentTransaction(void); NTSYSAPI NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);