这种情况应该 hook 哪个 WINAPI???

2017-02-15 23:23:38 +08:00
 ixbozai
是这样的 一个程序 打开之后从 Windows “我的文档”文件夹里面读取配置,我要让它从我自定义的文件夹读取配置该怎么办?

我的想法就是让程序认为我自定义的文件夹就是“我的文档”,有没有什么办法啊?我暂时想到的可能可以 hook 系统函数, 但是不知道具体是哪个函数
2649 次点击
所在节点    程序员
10 条回复
Kisesy
2017-02-15 23:30:34 +08:00
SHGetFolderLocation
SHGetSpecialFolderLocation
SHGetKnownFolderPath
SHGetSpecialFolderPath
SHGetFolderPath

这类 api 挺多的...这几个都行吧,我也忘了,慢慢测吧....
ixbozai
2017-02-15 23:36:23 +08:00
感谢啊 我查了一下程序 import 的 function ,应该用的是 SHGetFolderPath
zk8802
2017-02-16 03:20:49 +08:00
一个或许更简单的方法,供楼主参考:在我的文档下面创建一个到自定义文件夹的符号链接。 Windows 上可以用 mklink 来创建。
yangff
2017-02-16 05:25:38 +08:00
也有可能是环境变量吧
XiaoFaye
2017-02-16 05:54:54 +08:00
“我的文档”文件夹的位置是可以更改的呀,这是最简单的方法, Hook 也可以,但是太麻烦了。
crab
2017-02-16 06:12:22 +08:00
最简单的是把我的文档删除,把你自定义的文件夹通过 mklink /D "我的文档" "你文件夹“
nifury
2017-02-16 07:43:37 +08:00
hook CreateFile 不是更方便么,连文件名都能改了
4ever911
2017-02-16 10:51:32 +08:00
一楼的回复不正确, 因为你在这些函数里面是不能知道判断是否是在加载你的文件。

正确是 Hook CreateFile, 里面可以读取完整的文件路径,判断是否你要处理的文件,然后替换自己的文件。
ixbozai
2017-02-16 13:30:00 +08:00
@XiaoFaye @crab
额 不仅仅是改变我的文档的问题 还涉及到程序多开 所以最好要可以每个进程都可以自己设置读取配置文件的位置
ixbozai
2017-02-16 13:37:20 +08:00
@nifury
@4ever911
我 hook 了 SHGetFolderPathW 发现程序也确实调用了这个函数……但是我 hook 之后对原来的函数没做更改 只是测试一下程序调用这个函数的参数和运行结果 结果返回文件路径都是乱码 用 SHGetFolderPath 就一切正常

总之就是我 hook 了 SHGetFolderPathW 但是没做任何改变,结果程序在 hook 后在当前目录下建了个乱码文件夹存放配置。。。

看来我还要再研究研究这个 Unicode 和 ASNI 编码有什么影响

另外这个 createfile 程序也有调用 我还没来得及看它是干啥用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/340768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX