Skip to content

Latest commit

 

History

History
240 lines (237 loc) · 41.7 KB

ThunksList.md

File metadata and controls

240 lines (237 loc) · 41.7 KB

YY-Thunks Thunks 清单

此表展示了YY-Thunks(鸭船)可以解决的函数不存在问题,欢迎大家扩充!

开头带*的函数并不建议使用,仅用于编译通过处理,如果使用可能导致老版本系统无法充分发挥性能。

函数 Fallback
DecodePointer 不存在时,返回指针本身。
EncodePointer 不存在时,返回指针本身。
RegDeleteKeyExW(A) 不存在时,调用RegDeleteKeyW(A)。
Wow64DisableWow64FsRedirection 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
Wow64RevertWow64FsRedirection 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
Wow64EnableWow64FsRedirection 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
IsWow64Process 不存在时,返回TRUE,并设置 *Wow64Process = FALSE
IsWow64Message 不存在时,返回FALSE。
RegSetKeyValueW(A) 调用RegCreateKeyExW(A)以及RegSetValueExW(A)。
RegDeleteKeyValueW(A) 调用RegOpenKeyExW(A)以及RegDeleteValueW(A)。
RegDeleteTreeW(A) 调用SHDeleteKeyW(A)。
RegGetValueW(A) 不存在时,调用RegQueryValueExW(A)。
RegCopyTreeW(A) 不存在时,调用SHCopyKeyW(A)。
IsWow64Process2 不存在时,调用IsWow64Process。
IsWow64GuestMachineSupported 不存在时,调用GetNativeSystemInfo。
GetTickCount64 不存在时,调用GetTickCount。
GetSystemTimePreciseAsFileTime 不存在时,调用GetSystemTimeAsFileTime。
InitializeCriticalSectionEx 不存在时,调用InitializeCriticalSectionAndSpinCount。
InitOnceInitialize 初始化为 INIT_ONCE_STATIC_INIT。
InitOnceBeginInitialize 不存在时,调用NtWaitForKeyedEvent。
InitOnceComplete 不存在时,调用NtReleaseKeyedEvent。
InitOnceExecuteOnce 不存在时,调用NtWaitForKeyedEvent以及NtReleaseKeyedEvent。
LocaleNameToLCID 不存在时,查LocaleNameToLcidTable。
LCIDToLocaleName 不存在时,查LcidToLocaleNameTable。
GetLocaleInfoEx 不存在时,调用GetLocaleInfoW。
GetDateFormatEx 不存在时,调用GetDateFormatW。
GetTimeFormatEx 不存在时,调用GetTimeFormatW。
GetNumberFormatEx 不存在时,调用GetNumberFormatW。
GetCurrencyFormatEx 不存在时,调用GetCurrencyFormatW。
GetUserDefaultLocaleName 不存在时,调用LCIDToLocaleName。
GetSystemDefaultLocaleName 不存在时,调用LCIDToLocaleName。
EnumCalendarInfoExEx 不存在时,调用EnumCalendarInfoExW。
EnumDateFormatsExEx 不存在时,调用EnumDateFormatsExW。
LCMapStringEx 不存在时,调用LCMapStringW。
GetFileInformationByHandleEx 不存在时,调用NtQueryInformationFile 或者 NtQueryDirectoryFile。
SetFileInformationByHandle 不存在时,调用NtSetInformationFile。
GetFinalPathNameByHandleW(A) 不存在时,调用NtQueryObject以及NtQueryInformationFile。
GetLogicalProcessorInformation 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
GetLogicalProcessorInformationEx 不存在时,调用GetLogicalProcessorInformation。
InetPtonW(inet_pton) 不存在时,类似于sscanf手工分析字符串。
InetNtopW(inet_ntop) 不存在时,类似于sprintf手工生成字符串。
WSAPoll 不存在时,调用select。
GetNumaHighestNodeNumber 不存在时,返回0。
RaiseFailFastException 不存在时,调用TerminateProcess。
GetThreadId 不存在时,调用NtQueryInformationThread。
GetProcessIdOfThread 不存在时,调用NtQueryInformationThread。
GetProcessId 不存在时,调用NtQueryInformationProcess。
QueryThreadCycleTime 不存在时,调用GetThreadTimes。
QueryProcessCycleTime 不存在时,调用GetProcessTimes。
K32EnumProcessModules 调用EnumProcessModules。
K32EnumProcessModulesEx 调用EnumProcessModulesEx。
K32GetModuleBaseNameW(A) 调用GetModuleBaseNameW(A)。
K32GetModuleFileNameExW(A) 调用K32GetModuleFileNameExW(A)。
K32EmptyWorkingSet 调用EmptyWorkingSet。
K32QueryWorkingSet 调用QueryWorkingSet。
K32QueryWorkingSetEx 调用QueryWorkingSetEx。
K32InitializeProcessForWsWatch 调用InitializeProcessForWsWatch。
K32GetWsChanges 调用GetWsChanges。
K32GetWsChangesEx 调用GetWsChangesEx。
K32GetMappedFileNameW(A) 调用GetMappedFileNameW(A)。
K32EnumDeviceDrivers 调用EnumDeviceDrivers。
K32GetDeviceDriverBaseNameW(A) 调用GetDeviceDriverBaseNameW(A)。
K32GetDeviceDriverFileNameW(A) 调用GetDeviceDriverFileNameW(A)。
K32GetPerformanceInfo 调用GetPerformanceInfo。
K32EnumPageFilesW(A) 调用EnumPageFilesW(A)。
K32GetProcessImageFileNameW(A) 调用GetProcessImageFileNameW(A)。
EnumProcessModulesEx 不存在时,调用EnumProcessModules。
GetWsChangesEx 不存在时,调用GetWsChanges。
QueryFullProcessImageNameW(A) 不存在时,调用GetProcessImageFileNameW(A) 或者 GetModuleFileNameExW(A)。
CreateFile2 不存在时,调用CreateFileW。
CreateEventExW(A) 不存在时,调用CreateEventW(A)。
CreateMutexExW(A) 不存在时,调用CreateMutexW(A)。
CreateSemaphoreExW 不存在时,调用CreateSemaphoreW。
CreateWaitableTimerExW 不存在时,调用CreateWaitableTimerW。
GetFileVersionInfoExW(A) 不存在时,调用GetFileVersionInfoW(A)。
GetFileVersionInfoSizeExW(A) 不存在时,调用GetFileVersionInfoSizeW(A)。
InterlockedCompareExchange64 调用内部函数_InterlockedCompareExchange64。
SetThreadErrorMode 不存在时,调用SetErrorMode。
GetThreadErrorMode 不存在时,调用GetErrorMode。
GetErrorMode 不存在时,调用NtQueryInformationProcess。
InitializeSRWLock 初始化为 RTL_SRWLOCK_INIT。
AcquireSRWLockExclusive 不存在时,调用NtWaitForKeyedEvent。
TryAcquireSRWLockExclusive 不存在时,调用InterlockedBitTestAndSet(64)。
ReleaseSRWLockExclusive 不存在时,调用NtReleaseKeyedEvent。
AcquireSRWLockShared 不存在时,调用NtWaitForKeyedEvent。
TryAcquireSRWLockShared 不存在时,调用InterlockedCompareExchange。
ReleaseSRWLockShared 不存在时,调用NtReleaseKeyedEvent。
InitializeConditionVariable 初始化为 CONDITION_VARIABLE_INIT。
SleepConditionVariableCS 不存在时,调用NtWaitForKeyedEvent。
SleepConditionVariableSRW 不存在时,调用NtWaitForKeyedEvent。
WakeConditionVariable 不存在时,调用NtReleaseKeyedEvent。
WakeAllConditionVariable 不存在时,调用NtReleaseKeyedEvent。
InitializeSynchronizationBarrier 不存在时,调用CreateEvent。
EnterSynchronizationBarrier 不存在时,调用WaitForSingleObject。
DeleteSynchronizationBarrier 不存在时,调用CloseHandle。
WaitOnAddress 不存在时,调用NtWaitForKeyedEvent。警告,此函数请勿跨模块使用!!!
WakeByAddressSingle 不存在时,调用NtReleaseKeyedEvent。警告,此函数请勿跨模块使用!!!
WakeByAddressAll 不存在时,调用NtReleaseKeyedEvent。警告,此函数请勿跨模块使用!!!
*GetCurrentProcessorNumber 不存在时,返回0。
*GetCurrentProcessorNumberEx 不存在时,调用GetCurrentProcessorNumber。
*GetNumaNodeProcessorMask 不存在时,假定所有CPU都在当前Numa。
*GetNumaNodeProcessorMaskEx 不存在时,调用GetNumaNodeProcessorMask。
*SetThreadGroupAffinity 不存在时,调用SetThreadAffinityMask。
*CancelIoEx 不存在时,调用CancelIo(会把此句柄的所有IO操作取消掉!)。
*QueryWorkingSetEx 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
SHGetKnownFolderPath 不存在时,调用SHGetFolderPathW。
SHSetKnownFolderPath 不存在时,调用SHSetFolderPathW。
SHGetKnownFolderIDList 不存在时,调用SHGetFolderLocation。
SHBindToFolderIDListParent 不存在时,调用IShellFolder。
SHBindToFolderIDListParentEx 不存在时,调用IShellFolder。
SHBindToObject 不存在时,调用IShellFolder。
SHCreateItemFromIDList 不存在时,调用IShellItem。
SHCreateItemWithParent 不存在时,调用IShellItem。
SHCreateItemFromRelativeName 不存在时,调用IShellItem。
SHGetNameFromIDList 不存在时,调用IShellItem。
SHCreateShellItem 不存在时,调用IShellItem。
OpenFileById 不存在时,调用NtCreateFile。
CreateSymbolicLinkW(A) 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
ReOpenFile 不存在时,调用NtCreateFile。
CompareStringEx 不存在时,调用CompareStringW。
CompareStringOrdinal 不存在时,使用内置UnicodeCaseTableData实现。
SetFilePointerEx 不存在时,调用SetFilePointer。
GetModuleHandleExW(A) 不存在时,调用GetModuleHandleW(A)。
WTSGetActiveConsoleSessionId 不存在时,直接返回 0。
StrToInt64ExW(A) 不存在时,手工解析字符串。
GetNativeSystemInfo 不存在时,调用GetSystemInfo。
InitializeSListHead 直接初始化为 0。
InterlockedFlushSList 不存在时,调用lock cmpxchg8b指令。
QueryDepthSList 不存在时,直接返回Depth。
InterlockedPushEntrySList 不存在时,调用lock cmpxchg8b指令。
InterlockedPopEntrySList 不存在时,调用lock cmpxchg8b指令。
SetupDiGetDevicePropertyW 不存在时,调用SetupDiGetDeviceRegistryPropertyW。
SetupDiSetDevicePropertyW 不存在时,调用SetupDiSetDeviceRegistryPropertyW。
SetupDiGetClassPropertyW 不存在时,调用SetupDiGetClassRegistryPropertyW。
SetupDiGetClassPropertyExW 不存在时,调用SetupDiGetClassRegistryPropertyW。
SetupDiSetClassPropertyW 不存在时,调用SetupDiSetClassRegistryPropertyW。
SetupDiSetClassPropertyExW 不存在时,调用SetupDiSetClassRegistryPropertyW。
GetDpiForMonitor 不存在时,调用GetDeviceCaps。
SetProcessDpiAwareness 不存在时,调用SetProcessDPIAware。
SetProcessDPIAware 不存在时,直接返回 TRUE。
SetProcessDpiAwarenessContext 不存在时,调用SetProcessDpiAwareness。
GetDpiForSystem 不存在时,调用GetDeviceCaps。
GetDpiForWindow 不存在时,调用GetDpiForMonitor。
GetSystemMetricsForDpi 不存在时,调用GetSystemMetrics。
AdjustWindowRectExForDpi 不存在时,调用AdjustWindowRectEx。
SystemParametersInfoForDpi 不存在时,调用SystemParametersInfoW。
PathIsUNCEx 内部实现。
PathCchIsRoot 内部实现。
PathCchAddBackslashEx 内部实现。
PathCchAddBackslash 调用PathCchAddBackslashEx。
PathCchRemoveBackslashEx 内部实现。
PathCchRemoveBackslash 调用PathCchRemoveBackslashEx。
PathCchSkipRoot 内部实现。
PathCchStripToRoot 内部实现。
PathCchRemoveFileSpec 内部实现。
PathCchFindExtension 内部实现。
PathCchAddExtension 调用PathCchFindExtension。
PathCchRenameExtension 调用PathCchFindExtension。
PathCchRemoveExtension 调用PathCchFindExtension。
PathCchCanonicalizeEx 不存在时,内部实现。
PathCchCanonicalize 调用PathCchCanonicalizeEx。
PathCchCombineEx 内部实现。
PathCchCombine 调用PathCchCombineEx。
PathCchAppendEx 调用PathCchCombineEx。
PathCchAppend 调用PathCchAppendEx。
PathCchStripPrefix 内部实现。
PathAllocCombine 不存在时,调用PathCchCombineEx。
PathAllocCanonicalize 不存在时,调用PathCchCanonicalizeEx。
GetNumaProximityNodeEx 不存在时,调用GetNumaProximityNode。
GetNumaProcessorNode 不存在时,假定所有CPU都在节点 0。
GetNumaNodeNumberFromHandle 不存在时,假定所有CPU都在节点 0。
GetNumaProcessorNodeEx 不存在时,调用 GetNumaProcessorNode 。
GetNumaAvailableMemoryNode 不存在时,假定所有内存都属于节点0 。
GetNumaAvailableMemoryNodeEx 不存在时,调用 GetNumaAvailableMemoryNode 。
GetNumaProximityNode 不存在时,假定都是节点0 。
MapViewOfFileExNuma 不存在时,调用 MapViewOfFileEx。
AllocateUserPhysicalPagesNuma 不存在时,调用 AllocateUserPhysicalPages 。
VirtualAllocExNuma 不存在时,调用 VirtualAllocEx 。
CreateFileMappingNumaW(A) 不存在时,调用 CreateFileMappingW(A) 。
GetMaximumProcessorCount 不存在时,调用 GetSystemInfo 。
GetActiveProcessorCount 不存在时,调用 GetSystemInfo 。
GetActiveProcessorGroupCount 不存在时,假定为1 。
GetMaximumProcessorGroupCount 不存在时,假定为1 。
GetMemoryErrorHandlingCapabilities 不存在时,直接报告不支持任何特性。
VirtualAllocFromApp 不存在时,调用 VirtualAlloc 。
VirtualAlloc2 不存在时,调用 VirtualAllocExNuma 以及 VirtualAllocEx 。
VirtualAlloc2FromApp 不存在时,调用 VirtualAllocExNuma 以及 VirtualAllocEx 。
CreateFileMappingFromApp 不存在时,调用 CreateFileMappingW 。
CreateFileMapping2 不存在时,调用 CreateFileMappingNumaW 以及 CreateFileMappingW 。
MapViewOfFileFromApp 不存在时,调用 MapViewOfFile 。
UnmapViewOfFileEx 不存在时,调用 UnmapViewOfFile 。
VirtualProtectFromApp 不存在时,调用 VirtualProtect 。
OpenFileMappingFromApp 不存在时,调用 OpenFileMappingW 。
CreateThreadpoolWork 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
CloseThreadpoolWork 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
SubmitThreadpoolWork 不存在时,调用QueueUserWorkItem。警告,此函数请勿跨模块使用!!!
WaitForThreadpoolWorkCallbacks 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
CreateThreadpoolTimer 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
CloseThreadpoolTimer 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
SetThreadpoolTimer 不存在时,调用QueueTimer。警告,此函数请勿跨模块使用!!!
SetEventWhenCallbackReturns 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
ReleaseSemaphoreWhenCallbackReturns 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
ReleaseMutexWhenCallbackReturns 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
LeaveCriticalSectionWhenCallbackReturns 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
FreeLibraryWhenCallbackReturns 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
WaitForThreadpoolTimerCallbacks 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
TrySubmitThreadpoolCallback 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
CreateThreadpoolWait 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
CloseThreadpoolWait 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
SetThreadpoolWait 不存在时,调用RegisterWaitForSingleObject。警告,此函数请勿跨模块使用!!!
WaitForThreadpoolWaitCallbacks 不存在时,内部实现。警告,此函数请勿跨模块使用!!!
FlushProcessWriteBuffers 不存在时,调用VirtualProtect。
FlsAlloc 不存在时,使用Tls实现。警告,此函数请勿跨模块使用!!!
FlsFree 不存在时,使用Tls实现。警告,此函数请勿跨模块使用!!!
FlsGetValue 不存在时,使用Tls实现。警告,此函数请勿跨模块使用!!!
FlsSetValue 不存在时,使用Tls实现。警告,此函数请勿跨模块使用!!!
IsThreadAFiber 不存在时,调用 GetCurrentFiber。
ConvertThreadToFiberEx 不存在时,调用 ConvertThreadToFiber。
RoInitialize 不存在时,调用 CoInitializeEx。
RoUninitialize 不存在时,调用 CoUninitialize。
GetDynamicTimeZoneInformation 不存在时,调用 GetTimeZoneInformation。
SetDynamicTimeZoneInformation 不存在时,调用 SetTimeZoneInformation。
GetProductInfo 不存在时,调用 GetVersionExW。
EnumSystemLocalesEx 不存在时,调用 EnumSystemLocalesW。
GetThreadPreferredUILanguages 不存在时,调用 GetThreadLocale、GetUserDefaultLangID以及GetSystemDefaultLangID。
GetThreadUILanguage 不存在时,调用 GetThreadLocale。
ResolveLocaleName 不存在时,调用 LocaleNameToLCID以及LCIDToLocaleName。
InitializeProcThreadAttributeList 不存在时,内部实现。
DeleteProcThreadAttributeList 不存在时,内部实现。
UpdateProcThreadAttribute 不存在时,内部实现。PROC_THREAD_ATTRIBUTE_PARENT_PROCESS与PROC_THREAD_ATTRIBUTE_HANDLE_LIST特性会被忽略处理。
GetLargePageMinimum 不存在时,假定为0 。
SHCreateItemFromParsingName 不存在时,调用SHParseDisplayName。