• GetModuleFileNameEx遍历获取64bit程序路径失败的一种解决方法(Win7-64-bit)


    问题:

    32位程序在64位系统上调用GetModuleFileNameEx()遍历获取64位进程的全路径失败,得到的路径都为空。


    根据官方的说法:

    For the best results use the following table to convert paths.

    Windows 2000 = GetModuleFileNameEx()
    Windows XP x32 = GetProcessImageFileName()
    Windows XP x64 = GetProcessImageFileName()
    Windows Server2003  = GetProcessImageFileName()
    Windows Vista = QueryFullProcessImageName()
    Windows 7 = QueryFullProcessImageName()


    Note: If you are not aware the API GetProcessImageFileName() returns a kernel DOS device path. You can use the following API to map the device paths to a Win32 format.

    但要注意的是GetModuleFileName在64bit下获取到的是不正确的,用32去填充64结果是空。

    本人在32bit的win7下可以准确获取,64bit的win7下得不到自己要的东西。如下图所示:




    推荐用vista新增的:QueryFullProcessImageName(),结果入下图:



    另外搜遍了网络也没搜到该函数的样例,再懒也只好自己写了~~

    DWORD size = MAX_PATH;
    char sExeName[MAX_PATH] = {0};
    QueryFullProcessImageName(hProcess, 0, sExeName, &size);
    当然用GetProcessImageFileName获取更好,只是代码有点长,懒的写了。
    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    Pandas
    多进程编程
    python的多线程编程
    Scrapy中集成selenium
    生成器函数yield和使用yield模拟协程
    迭代器和可迭代对象
    HDU5988 Coding Contest(浮点费用流)
    codeforces Technocup 2017
    codeforces724E Goods transportation(欧拉回路)
    UVAlive4097 Yungom(思路)
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834691.html
Copyright © 2020-2023  润新知