[*] Windows Vista, UWP, and Windows 11: Move Windows 7 and 8 SetThreadGroupAffinity symbol from the IAT to AuProcAddresses.NT.[c/h]pps object

[*] Update the READMEs support table
This commit is contained in:
Reece Wilson 2023-07-14 16:31:47 +01:00
parent 654cc8fe04
commit 788dde684b
4 changed files with 25 additions and 7 deletions

View File

@ -59,6 +59,8 @@ Discord: [Invite](https://discord.gg/XYjCGWWa4J)
| Platform | Support | | Platform | Support |
| ----------- | ------- | | ----------- | ------- |
| NT/XP | ❌ | | NT/XP | ❌ |
| NT/Vista | ⚠️⚠️️ |
| NT/Server 2008 | ⚠️⚠️ |
| NT/Win7 | ⚠️ | | NT/Win7 | ⚠️ |
| NT/Win8.1+ | ⚠️ | | NT/Win8.1+ | ⚠️ |
| NT/Win10 RS4+ | ✅ | | NT/Win10 RS4+ | ✅ |
@ -73,7 +75,9 @@ Discord: [Invite](https://discord.gg/XYjCGWWa4J)
Win7/8: memory management (AuProcess) is limited. \ Win7/8: memory management (AuProcess) is limited. \
Applications that don't need ::mmap-like functionality **with pre-reserved address allocations** should put your minimum requirements into the Vista era of NTs. \ Applications that don't need ::mmap-like functionality **with pre-reserved address allocations** should put your minimum requirements into the Vista era of NTs. \
See: [Windows 7 defects](https://gitea.reece.sx/AuroraSupport/AuroraRuntime/src/branch/master/Media/Windows%207%20Defects.txt) See: [Windows 7 defects](https://gitea.reece.sx/AuroraSupport/AuroraRuntime/src/branch/master/Media/Windows%207%20Defects.txt) \
Earlier NT revisions could be supported; however, there is creep across various subsystems and libraries for XP to not work. In addition, anything older than a fully patched Windows 7 system is untested.
## Performance ## Performance
Performance of each system should ideally be that of the best implementation on the platform, Performance of each system should ideally be that of the best implementation on the platform,

View File

@ -79,6 +79,7 @@ namespace Aurora
ADD_GET_PROC(Kernel32, SetThreadInformation) ADD_GET_PROC(Kernel32, SetThreadInformation)
ADD_GET_PROC(Kernel32, SetThreadSelectedCpuSets) ADD_GET_PROC(Kernel32, SetThreadSelectedCpuSets)
ADD_GET_PROC(Kernel32, PrefetchVirtualMemory) ADD_GET_PROC(Kernel32, PrefetchVirtualMemory)
ADD_GET_PROC(Kernel32, SetThreadGroupAffinity)
ADD_GET_PROC(Sync, WaitOnAddress) ADD_GET_PROC(Sync, WaitOnAddress)
ADD_GET_PROC(Sync, WakeByAddressSingle) ADD_GET_PROC(Sync, WakeByAddressSingle)

View File

@ -153,6 +153,14 @@ namespace Aurora
ULONG CpuSetIdCount ULONG CpuSetIdCount
); );
#if defined(AURORA_PLATFORM_WIN32)
inline BOOL(__stdcall *pSetThreadGroupAffinity)(
HANDLE hThread,
GROUP_AFFINITY * GroupAffinity,
PGROUP_AFFINITY PreviousGroupAffinity
);
#endif
inline INT(__stdcall *pGetAddrInfoExCancel)( inline INT(__stdcall *pGetAddrInfoExCancel)(
LPHANDLE lpHandle LPHANDLE lpHandle
); );

View File

@ -980,12 +980,17 @@ namespace Aurora::Threading::Threads
} }
#if defined(AURORA_PLATFORM_WIN32) #if defined(AURORA_PLATFORM_WIN32)
GROUP_AFFINITY affinityGroup {0}; if (pSetThreadGroupAffinity)
mask.ToMsWin7GroupAffinity(&affinityGroup);
if (SetThreadGroupAffinity(this->handle_, &affinityGroup, nullptr))
{ {
return; GROUP_AFFINITY affinityGroup { 0 };
mask.ToMsWin7GroupAffinity(&affinityGroup);
if (pSetThreadGroupAffinity(this->handle_, &affinityGroup, nullptr))
{
return;
}
} }
SetThreadAffinityMask(this->handle_, mask.lower);
#endif #endif
SysPushErrorUnavailableError("Couldn't set thread affinity"); SysPushErrorUnavailableError("Couldn't set thread affinity");