此表展示了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。 |