张洋 vor 1 Jahr
Ursprung
Commit
8e44f3960c

BIN
bin/Win32/Release/setup/zhipuzi_pos_windows_setup_1.0.2.0.exe


+ 1 - 1
bin/Win32/Release/setup/智铺子收银系统安装脚本.nsi

@@ -2,7 +2,7 @@
 
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "智铺子收银系统"
-!define PRODUCT_VERSION "1.0.2.0"
+!define PRODUCT_VERSION "1.0.2.1"
 !define PRODUCT_PUBLISHER "深圳市迅享智慧云科技有限公司"
 !define PRODUCT_WEB_SITE "https://www.zhipuzi.com"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"

+ 21 - 0
lib/YY-Thunks-1.0.9-Binary/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Chuyu-Team
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 80 - 0
lib/YY-Thunks-1.0.9-Binary/ReadMe.md

@@ -0,0 +1,80 @@
+# YY-Thunks - 让兼容 Windows 更轻松
+![license](https://img.shields.io/github/license/Chuyu-Team/YY-Thunks)
+![downloads](https://img.shields.io/github/downloads/Chuyu-Team/YY-Thunks/total)
+![contributors](https://img.shields.io/github/contributors-anon/Chuyu-Team/YY-Thunks)
+![release](https://img.shields.io/github/v/release/Chuyu-Team/YY-Thunks?include_prereleases)
+![nuget](https://img.shields.io/nuget/vpre/YY-Thunks)
+[![Build&Test](https://github.com/Chuyu-Team/YY-Thunks/actions/workflows/Build&Test.yml/badge.svg)](https://github.com/Chuyu-Team/YY-Thunks/actions/workflows/Build&Test.yml)
+
+## 关于 YY-Thunks
+
+众所周知,从 Windows 的每次更新又会新增大量 API,这使得兼容不同版本的 Windows 
+需要花费很大精力。导致现在大量开源项目已经不再兼容一些早期的 Windows 版本,比如
+Windows XP RTM。
+
+难道就没有一种快速高效的方案解决无法定位程序输入点的问题吗?
+
+YY-Thunks(鸭船),存在的目的就是抹平不同系统的差异,编译时单纯添加一个 obj 
+即可自动解决这些兼容性问题。让你兼容旧版本 Windows 更轻松!
+
+[ [鸭船交流群 633710173](https://shang.qq.com/wpa/qunwpa?idkey=21d51d8ad1d77b99ea9544b399e080ec347ca6a1bc04267fb59cebf22644a42a) ]
+
+### 原理
+
+使用 `LoadLibrary` 以及 `GetProcAddress` 动态加载 API,不存在时做出补偿措施,
+最大限度模拟原始 API 行为,让你的程序正常运行。
+
+### 亮点
+
+* 更快!更安全!`鸭船`内建2级缓存以及按需加载机制,同时自动加密所有函数指针,
+  防止内存爆破攻击。最大程度减少不需要和不必要的 `LoadLibrary` 以及 
+  `GetProcAddress` 调用以及潜在安全风险。
+* 轻松兼容 Windows XP,让你安心专注于业务逻辑。
+* 完全开源且广泛接受用户意见,希望大家能踊跃的创建 PR,为`鸭船`添砖加瓦。
+
+## 使用方法
+
+大家可以在以下方案中任选一种,但是我们优先推荐 NuGet 方案。
+
+### NuGet(推荐)
+
+1. 项目右键 “管理 NuGet 程序包”。
+2. NuGet搜索框中输入:`YY-Thunks`,搜索后点击安装。
+3. 项目右键 - 属性 - YY-Thunks 中,自行调整YY-Thunks等级,允许 Windows 2000, 
+   Windows XP 以及 Windows Vista(默认)。
+4. 重新编译代码
+
+### 手工配置
+
+1. 下载 [YY-Thunks-Binary](https://github.com/Chuyu-Team/YY-Thunks/releases),
+   然后解压到你的工程目录。
+2. 【链接器】-【输入】-【附加依赖项】,添加 
+   `objs\$(PlatformShortName)\YY_Thunks_for_WinXP.obj`。
+3. 重新编译代码。
+
+> 温馨提示:如果需要兼容 Vista,请选择 
+  `objs\$(PlatformShortName)\YY_Thunks_for_Vista.obj`。
+
+## 兼容性
+
+### 支持的编译器
+
+全平台ABI兼容。
+
+* 所有Visual Studio版本均支持
+  (比如:VC6.0、VS2008、VS2010、VS2015、VS2017、VS2019等等)。
+* 所有运行库模式均支持(比如:`/MD`、`/MT`、`/MDd`、`/MTd`)。
+
+### SDK版本要求
+至少需要SDK 6.0(VS2008默认附带)
+
+> 温馨提示:VC6.0、VS2005用户请注意,由于这些编译器默认附带的SDK版本太低。请先将SDK升级到6.0或者更高版本,然后再使用YY-Thunks,否则将发生链接失败!
+高版本的SDK不影响对老系统的兼容性,请坐和放宽,安心升级。
+
+### Thunks 清单
+
+请参阅 [ThunksList.md](ThunksList.md)
+
+## 更新日志
+
+请参阅 [Changelog.md](https://github.com/Chuyu-Team/YY-Thunks/wiki)

+ 426 - 0
lib/YY-Thunks-1.0.9-Binary/ThunksList.md

@@ -0,0 +1,426 @@
+# YY-Thunks Thunks 清单
+
+此表展示了YY-Thunks(鸭船)可以解决的函数不存在问题,欢迎大家扩充!
+
+> 开头带`*`的函数并不建议使用,仅用于编译通过处理,如果使用可能导致老版本系统无法充分发挥性能。
+
+## api-ms-win-core-path-l1-1-0.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| 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。
+
+## api-ms-win-core-winrt-l1-1-0.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| RoInitialize                               | 不存在时,调用 CoInitializeEx。
+| RoUninitialize                             | 不存在时,调用 CoUninitialize。
+| RoActivateInstance                         | 不存在时,返回 E_NOTIMPL。
+| RoRegisterActivationFactories              | 不存在时,返回 E_NOTIMPL。
+| RoRevokeActivationFactories                | 不存在时,什么也不做。
+| RoGetActivationFactory                     | 不存在时,返回 E_NOTIMPL。
+| RoRegisterForApartmentShutdown             | 不存在时,返回 E_NOTIMPL。
+| RoUnregisterForApartmentShutdown           | 不存在时,返回 E_NOTIMPL。
+| RoGetApartmentIdentifier                   | 不存在时,返回 E_NOTIMPL。
+
+## api-ms-win-core-winrt-error-l1-1-0.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| RoOriginateError                           | 不存在时,返回 FALSE.
+| RoOriginateErrorW                          | 不存在时,返回 FALSE.
+
+## api-ms-win-core-winrt-string-l1-1-0.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| WindowsCreateString                        | 不存在时,返回 E_NOTIMPL。
+| WindowsCreateStringReference               | 不存在时,返回 E_NOTIMPL。
+| WindowsDeleteString                        | 不存在时,返回 E_NOTIMPL。
+| WindowsDuplicateString                     | 不存在时,返回 E_NOTIMPL。
+| WindowsGetStringLen                        | 不存在时,返回 E_NOTIMPL。
+| WindowsGetStringRawBuffer                  | 不存在时,返回 E_NOTIMPL。
+| WindowsIsStringEmpty                       | 不存在时,返回 E_NOTIMPL。
+| WindowsStringHasEmbeddedNull               | 不存在时,返回 E_NOTIMPL。
+| WindowsCompareStringOrdinal                | 不存在时,返回 E_NOTIMPL。
+
+## advapi32.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| RegDeleteKeyExW(A)                         | 不存在时,调用RegDeleteKeyW(A)。
+| RegSetKeyValueW(A)                         | 调用RegCreateKeyExW(A)以及RegSetValueExW(A)。
+| RegDeleteKeyValueW(A)                      | 调用RegOpenKeyExW(A)以及RegDeleteValueW(A)。
+| RegDeleteTreeW(A)                          | 调用SHDeleteKeyW(A)。
+| RegGetValueW(A)                            | 不存在时,调用RegQueryValueExW(A)。
+| RegCopyTreeW(A)                            | 不存在时,调用SHCopyKeyW(A)。
+| EventSetInformation                        | 不存在时,返回ERROR_NOT_SUPPORTED。
+
+## bcrypt.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| BCryptOpenAlgorithmProvider                | 内部实现。
+| BCryptCloseAlgorithmProvider               | 内部实现。
+| BCryptGenRandom                            | 不存在时调用,RtlGenRandom。
+
+## bluetoothapis.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| BluetoothGATTGetCharacteristicValue        | 不存在时,返回ERROR_NOT_SUPPORTED。
+| BluetoothGATTGetCharacteristics            | 不存在时,返回ERROR_NOT_SUPPORTED。
+| BluetoothGATTGetDescriptors                | 不存在时,返回ERROR_NOT_SUPPORTED。
+| BluetoothGATTGetServices                   | 不存在时,返回ERROR_NOT_SUPPORTED。
+| BluetoothGATTRegisterEvent                 | 不存在时,返回ERROR_NOT_SUPPORTED。
+| BluetoothGATTSetCharacteristicValue        | 不存在时,返回ERROR_NOT_SUPPORTED。
+| BluetoothGATTSetDescriptorValue            | 不存在时,返回ERROR_NOT_SUPPORTED。
+
+## dwmapi.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| DwmEnableBlurBehindWindow                  | 不存在时,返回 `DWM_E_COMPOSITIONDISABLED`(表示DWM已禁用)。
+
+## iphlpapi.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| GetIfTable2                                | 不存在时调用,GetIfTable,并使用HeapAlloc申请内存。
+| GetIfTable2Ex                              | 不存在时调用,GetIfTable,并使用HeapAlloc申请内存。
+| GetIfEntry2                                | 不存在时调用,GetIfEntry。
+| GetIfEntry2Ex                              | 不存在时调用,GetIfEntry2。
+| FreeMibTable                               | 不存在时调用,HeapFree。
+
+## kernel32.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| DecodePointer                              | 不存在时,返回指针本身。
+| EncodePointer                              | 不存在时,返回指针本身。
+| Wow64DisableWow64FsRedirection             | 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
+| Wow64RevertWow64FsRedirection              | 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
+| Wow64EnableWow64FsRedirection              | 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
+| 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。
+| 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)。
+| QueryFullProcessImageNameW(A)              | 不存在时,调用GetProcessImageFileNameW(A) 或者 GetModuleFileNameExW(A)。
+| CreateFile2                                | 不存在时,调用CreateFileW。
+| CreateEventExW(A)                          | 不存在时,调用CreateEventW(A)。
+| CreateMutexExW(A)                          | 不存在时,调用CreateMutexW(A)。
+| CreateSemaphoreExW                         | 不存在时,调用CreateSemaphoreW。
+| CreateWaitableTimerExW                     | 不存在时,调用CreateWaitableTimerW。
+| 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。
+| *GetThreadGroupAffinity                    | 不存在时,调用NtQueryInformationThread。
+| *SetThreadGroupAffinity                    | 不存在时,调用SetThreadAffinityMask。
+| *CancelIoEx                                | 不存在时,调用CancelIo(会把此句柄的所有IO操作取消掉!)。
+| *CancelSynchronousIo                       | 不存在时,仅返回失败。
+| OpenFileById                               | 不存在时,调用NtCreateFile。
+| CreateSymbolicLinkW(A)                     | 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
+| ReOpenFile                                 | 不存在时,调用NtCreateFile。
+| CompareStringEx                            | 不存在时,调用CompareStringW。
+| CompareStringOrdinal                       | 不存在时,使用内置UnicodeCaseTableData实现。
+| SetFilePointerEx                           | 不存在时,调用SetFilePointer。
+| GetModuleHandleExW(A)                      | 不存在时,调用GetModuleHandleW(A)。
+| WTSGetActiveConsoleSessionId               | 不存在时,直接返回 0。
+| GetNativeSystemInfo                        | 不存在时,调用GetSystemInfo。
+| InitializeSListHead                        | 直接初始化为 0。
+| InterlockedFlushSList                      | 不存在时,调用lock cmpxchg8b指令。
+| QueryDepthSList                            | 不存在时,直接返回Depth。
+| InterlockedPushEntrySList                  | 不存在时,调用lock cmpxchg8b指令。
+| InterlockedPopEntrySList                   | 不存在时,调用lock cmpxchg8b指令。
+| GetNumaProximityNodeEx                     | 不存在时,调用GetNumaProximityNode。
+| GetNumaProcessorNode                       | 不存在时,假定所有CPU都在节点 0。
+| GetNumaNodeNumberFromHandle                | 不存在时,假定所有CPU都在节点 0。
+| GetNumaProcessorNodeEx                     | 不存在时,调用 GetNumaProcessorNode 。
+| GetNumaAvailableMemoryNode                 | 不存在时,假定所有内存都属于节点0 。
+| GetNumaAvailableMemoryNodeEx               | 不存在时,调用 GetNumaAvailableMemoryNode 。
+| GetNumaProximityNode                       | 不存在时,假定都是节点0 。
+| AllocateUserPhysicalPagesNuma              | 不存在时,调用 AllocateUserPhysicalPages 。
+| MapViewOfFileExNuma                        | 不存在时,调用 MapViewOfFileEx。
+| 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。
+| 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 。
+| SetThreadStackGuarantee                    | 不存在时,调用VirtualAlloc。
+| SetCoalescableTimer                        | 不存在时,调用SetTimer。
+| SetWaitableTimerEx                         | 不存在时,调用SetWaitableTimer。
+| EnumResourceLanguagesExW(A)                | 不存在时,调用EnumResourceLanguagesW(A)。
+| DiscardVirtualMemory                       | 不存在时,调用VirtualAlloc MEM_RESET。
+| OfferVirtualMemory                         | 不存在时,返回ERROR_SUCCESS。
+| ReclaimVirtualMemory                       | 不存在时,返回ERROR_SUCCESS。
+| PrefetchVirtualMemory                      | 不存在时,返回ERROR_SUCCESS。
+| GetProcessMitigationPolicy                 | 不存在时,调用NtQueryInformationProcess。
+| SetProcessMitigationPolicy                 | 不存在时,调用NtSetInformationProcess。
+| SetProcessInformation                      | 不存在时,调用NtSetInformationProcess。
+| GetThreadInformation                       | 不存在时,调用NtQueryInformationThread。
+| SetThreadInformation                       | 不存在时,调用NtSetInformationThread。
+| PowerCreateRequest                         | 不存在时,内部实现。
+| PowerSetRequest                            | 不存在时,调用 SetThreadExecutionState。
+| PowerClearRequest                          | 不存在时,调用 SetThreadExecutionState。
+| TzSpecificLocalTimeToSystemTime            | 不存在时,内部实现。
+| TzSpecificLocalTimeToSystemTimeEx          | 不存在时,内部实现。
+| GetFirmwareType                            | 不存在时,调用NtQuerySystemInformation。
+| IsNativeVhdBoot                            | 不存在时,调用NtQuerySystemInformation。
+| RtlCaptureStackBackTrace                   | 调用ntdll.RtlCaptureStackBackTrace。
+| SetFileCompletionNotificationModes         | 不存在时,什么也不做。
+| GetQueuedCompletionStatusEx                | 不存在时,调用 GetQueuedCompletionStatus。
+| FindFirstFileEx(W/A)                       | Windows XP、Vista兼容 FIND_FIRST_EX_LARGE_FETCH、FindExInfoStandard参数。
+
+## mfplat.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| MFCreateDXGIDeviceManager                  | 不存在时,返回E_NOTIMPL。
+| MFCreateDXGISurfaceBuffer                  | 不存在时,返回E_NOTIMPL。
+| MFLockDXGIDeviceManager                    | 不存在时,返回E_NOTIMPL。
+| MFUnlockDXGIDeviceManager                  | 不存在时,返回E_NOTIMPL。
+
+## netapi32.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| NetGetAadJoinInformation                   | 不存在时,始终认为没有加入 Azure AD 帐户 账号。
+| NetFreeAadJoinInformation                  | 不存在时,什么也不做。
+
+## ntdll.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| NtCancelIoFileEx                           | 不存在时,调用 NtCancelIoFile。注意:将取消此文件的所有IO请求。
+
+## ole32.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| CoGetApartmentType                         | 不存在时,调用IComThreadingInfo。
+
+## pdh.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| PdhAddEnglishCounterW(A)                   | 不存在时,调用PdhAddCounterW(A)。
+
+## powrprof.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| PowerDeterminePlatformRole                 | 不存在时,返回PlatformRoleDesktop。
+| PowerDeterminePlatformRoleEx               | 不存在时,调用PlatformRoleDesktop。
+| PowerRegisterSuspendResumeNotification     | 不存在时,使用窗口模拟。
+| PowerUnregisterSuspendResumeNotification   | 内部实现。
+
+## psapi.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| EnumProcessModulesEx                       | 不存在时,调用EnumProcessModules。
+| GetWsChangesEx                             | 不存在时,调用GetWsChanges。
+| *QueryWorkingSetEx                         | 不存在时,返回FALSE,并设置 LastError = ERROR_INVALID_FUNCTION。
+
+## setupapi.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| SetupDiGetDevicePropertyW                  | 不存在时,调用SetupDiGetDeviceRegistryPropertyW。
+| SetupDiSetDevicePropertyW                  | 不存在时,调用SetupDiSetDeviceRegistryPropertyW。
+| SetupDiGetClassPropertyW                   | 不存在时,调用SetupDiGetClassRegistryPropertyW。
+| SetupDiGetClassPropertyExW                 | 不存在时,调用SetupDiGetClassRegistryPropertyW。
+| SetupDiSetClassPropertyW                   | 不存在时,调用SetupDiSetClassRegistryPropertyW。
+| SetupDiSetClassPropertyExW                 | 不存在时,调用SetupDiSetClassRegistryPropertyW。
+
+## shcore.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| GetDpiForMonitor                           | 不存在时,调用GetDeviceCaps。
+| SetProcessDpiAwareness                     | 不存在时,调用SetProcessDPIAware。
+| SetProcessDPIAware                         | 不存在时,直接返回 TRUE。
+
+## shell32.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| SHGetKnownFolderPath                       | 不存在时,调用SHGetFolderPathW。
+| SHSetKnownFolderPath                       | 不存在时,调用SHSetFolderPathW。
+| SHGetKnownFolderIDList                     | 不存在时,调用SHGetFolderLocation。
+| SHBindToFolderIDListParent                 | 不存在时,调用IShellFolder。
+| SHBindToFolderIDListParentEx               | 不存在时,调用IShellFolder。
+| SHBindToObject                             | 不存在时,调用IShellFolder。
+| SHCreateItemFromIDList                     | 不存在时,调用IShellItem。
+| SHCreateItemWithParent                     | 不存在时,调用IShellItem。
+| SHCreateItemFromRelativeName               | 不存在时,调用IShellItem。
+| SHGetNameFromIDList                        | 不存在时,调用IShellItem。
+| SHCreateShellItem                          | 不存在时,调用IShellItem。
+| SHCreateItemFromParsingName                | 不存在时,调用SHParseDisplayName。
+
+## shlwapi.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| StrToInt64ExW(A)                           | 不存在时,手工解析字符串。
+
+## user32.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| IsWow64Process                             | 不存在时,返回TRUE,并设置 `*Wow64Process = FALSE`。
+| SetProcessDpiAwarenessContext              | 不存在时,调用SetProcessDpiAwareness。
+| GetDpiForSystem                            | 不存在时,调用GetDeviceCaps。
+| GetDpiForWindow                            | 不存在时,调用GetDpiForMonitor。
+| GetSystemMetricsForDpi                     | 不存在时,调用GetSystemMetrics。
+| AdjustWindowRectExForDpi                   | 不存在时,调用AdjustWindowRectEx。
+| SystemParametersInfoForDpi                 | 不存在时,调用SystemParametersInfoW。
+| RegisterSuspendResumeNotification          | 不存在时,使用窗口模拟。
+| UnregisterSuspendResumeNotification        | 不存在时,内部实现。
+| IsProcessDPIAware                          | 不存在时,返回 FALSE。
+| SetProcessDPIAware                         | 不存在时,什么都不做,假装成功。
+| GetWindowDisplayAffinity                   | 不存在时,TRUE,并报告窗口没有任何保护`WDA_NONE`。
+| SetWindowDisplayAffinity                   | 不存在时,什么都不做,假装成功。
+| RegisterTouchWindow                        | 不存在时,什么都不做,假装成功。
+| UnregisterTouchWindow                      | 不存在时,什么都不做,假装成功。
+| IsTouchWindow                              | 不存在时,始终报告非触摸窗口。
+| GetTouchInputInfo                          | 不存在时,报告错误 ERROR_INVALID_HANDLE。
+| CloseTouchInputHandle                      | 不存在时,报告错误 ERROR_INVALID_HANDLE。
+
+## userenv.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| CreateAppContainerProfile                  | 不存在时,返回E_NOTIMPL。
+| DeleteAppContainerProfile                  | 不存在时,返回E_NOTIMPL。
+| DeriveAppContainerSidFromAppContainerName  | 不存在时,返回E_NOTIMPL。
+| GetAppContainerFolderPath                  | 不存在时,返回E_NOTIMPL。
+| GetAppContainerRegistryLocation            | 不存在时,返回E_NOTIMPL。
+
+## version.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| GetFileVersionInfoExW(A)                   | 不存在时,调用GetFileVersionInfoW(A)。
+| GetFileVersionInfoSizeExW(A)               | 不存在时,调用GetFileVersionInfoSizeW(A)。
+
+## ws2_32.dll
+| 函数                                       | Fallback
+| ----                                       | -----------
+| InetPtonW(inet_pton)                       | 不存在时,类似于sscanf手工分析字符串。
+| InetNtopW(inet_ntop)                       | 不存在时,类似于sprintf手工生成字符串。
+| WSAPoll                                    | 不存在时,调用select。

BIN
lib/YY-Thunks-1.0.9-Binary/objs/x64/YY_Thunks_for_Vista.obj


BIN
lib/YY-Thunks-1.0.9-Binary/objs/x64/YY_Thunks_for_WinXP.obj


BIN
lib/YY-Thunks-1.0.9-Binary/objs/x86/YY_Thunks_for_Vista.obj


BIN
lib/YY-Thunks-1.0.9-Binary/objs/x86/YY_Thunks_for_Win2K.obj


BIN
lib/YY-Thunks-1.0.9-Binary/objs/x86/YY_Thunks_for_WinXP.obj


BIN
lib/debug/YY_Thunks_for_WinXP.obj


BIN
lib/release/YY_Thunks_for_WinXP.obj


BIN
zhipuzi_pos_windows/resource/zhipuzi_pos_windows.aps


BIN
zhipuzi_pos_windows/resource/zhipuzi_pos_windows.rc


Datei-Diff unterdrückt, da er zu groß ist
+ 2 - 2
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj