V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ixbozai
V2EX  ›  程序员

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

  •  
  •   ixbozai · 2017-02-15 23:23:38 +08:00 · 2644 次点击
    这是一个创建于 2624 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样的 一个程序 打开之后从 Windows “我的文档”文件夹里面读取配置,我要让它从我自定义的文件夹读取配置该怎么办?

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

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

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

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

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

    另外这个 createfile 程序也有调用 我还没来得及看它是干啥用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2009 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:16 · PVG 00:16 · LAX 09:16 · JFK 12:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.