Chuyu-Team / YY-Thunks

Fix DecodePointer, EncodePointer,RegDeleteKeyEx etc. APIs not found in Windows XP RTM.
MIT License
497 stars 102 forks source link

Fea #53, 添加 SHSetFolderPathW #54

Closed chirsz-ever closed 1 year ago

chirsz-ever commented 1 year ago

没有找到直接在源代码中指定按 ordinal 加载动态库函数的方法。

mingkuang-Chuyu commented 1 year ago

请问这个PR它解决了什么问题? 首先,2000有这个函数。其次微软SDK lib中SHSetFolderPathW也是序数导入。

直接链接了也不会导致问题。

如果仅仅为了在使用SDK5情况下会链接失败问题,而增加写代码,那么我不接受。

  1. 假设要兼容2000,其实严格来说只有这几个InterlockedPushEntrySList、GetModuleHandleExW,是WinXP有而2000没有的。

  2. 使用者完全可以升级SDK解决,毕竟现在SDK5几乎没人用,升级SDK也没有太大成本。

chirsz-ever commented 1 year ago

解决的问题是让 YY_Thunks_for_Win2K.obj 和 Platform SDK 5.2 一起链接时不会报错。链接时的报错信息是 YY_Thunks_for_Win2K.obj 里有未解决的符号,所以容易被认为是 YY-Thunks 的问题……

已经只局限在 Win2K 的 Thunks 里了,因为如果有人试图用 SDK 5.2 链接报错,生成目标是 WinXP 平台,可以建议他更新到 SDK 7.1;但如果生成目标是 Win2K 平台,也不能说坚持使用 SDK 5.2 是绝对错误的。

另外本 PR 还使得用 __DEFINE_THUNK_WN 可以指定通过序数而非导出名称来查找函数,虽然我检查了其它的 thunk,没有必须使用序数导入的,但以后可能有这种需求。

如果你仍然觉得无论什么情况,都应该让使用者升级 SDK 版本,那就关掉本 PR 和 #53 吧,我会自己生成导入库的。

mingkuang-Chuyu commented 1 year ago

嗯,__DEFINE_THUNK_WN通过序数导出能力确实目前没有。我会记录,未来有实际了再从这个PR中提取代码(我会保持代码记录作者是你)。

对于兼容2000系统使用SDK5.*问题,其实只有这几个API,InterlockedPushEntrySList、GetModuleHandleExW是真心意义上的无法解释的情况。这种场景是罕见的,遇到这个问题时直接升级SDK版本就好了。

这样吧,我更新一下rename,内部明确指出SDK至少需要6.0或者更高版本(也就是VS2008默认带的SDK版本)。

低版本编译器使用高版本的SDK这并没有什么问题,你可以尝试直接升级到 SDK10,而不必局限于7.1。

mingkuang-Chuyu commented 1 year ago

感谢你的支持,如果提供真真缺失的API我会很开心。

另外未来如果你需要编译兼容XP的rust程序,我们任然有合作的机会。