Smile.Coder 2024-05-14 14:53 采纳率: 0%
浏览 3
已结题

CreateFile无法获取特殊文件内容

小弟遇到一个问题,我想获取C:\Windows\System32\drivers下面的文件内容,主要是查询一下是否有其他可疑驱动文件,在使用CreateFile打开绝大部分文件都返回INVALID_FILE_HANDLE,GetLastError返回的是ERROR_FILE_NOT_FOUND,但其实传递进去的参数文件路径是正确的,路径直接复制到资源管理器地址栏敲回车能弹出打开文件的提示。但在编程下就无法打开文件。请问还有什么办法可以解决?
例如:

hFile = CreateFileA (
    "C:\Windows\System32\drivers\drmk.sys", 
    GENERIC_READ, 
    FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 
    NULL, 
    OPEN_EXISTING, 
    FILE_ATTRIBUTE_NORMAL, 
    NULL
  );
// 返回了INVALID_FILE_HANDLE
// 使用GetLastError()是ERROR_FILE_NOT_FOUND

万分感谢!

  • 写回答

8条回答 默认 最新

  • 笑面虎 2024-05-14 14:53
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是如何在C++程序中使用CreateFile函数获取C:\Windows\System32\drivers目录下文件的内容,特别是为了检查是否有可疑的驱动文件。您遇到的问题是在尝试打开这些文件时,CreateFile返回了INVALID_FILE_HANDLE,并且GetLastError返回了ERROR_FILE_NOT_FOUND,尽管文件路径是正确的。

    【问题出现原因】:问题出现的原因是CreateFile函数无法打开某些系统级别的文件,这通常是因为操作系统的安全机制限制了对这些文件的访问。在Windows系统中,许多系统文件和驱动文件受到保护,不允许普通用户或程序直接访问。

    【问题解决方案】:要解决这个问题,您需要以管理员权限运行您的程序,或者使用Windows API中的其他函数来访问这些文件。此外,您可能需要使用Windows Driver Kit (WDK)中的特定工具来检查驱动文件。

    【提供代码】:由于直接修改您的代码可能不会解决问题,因为这是操作系统级别的限制,这里提供一个示例代码,展示如何以管理员权限运行程序:

    #include <windows.h>
    #include <shellapi.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
        SHELLEXECUTEINFO sei = { sizeof(sei) };
        sei.lpVerb = "runas"; // 以管理员权限运行
        sei.lpFile = "YourProgram.exe"; // 替换为您的程序名称
        sei.hwnd = NULL;
        sei.lpParameters = NULL;
        sei.lpDirectory = NULL;
        sei.nShow = SW_NORMAL;
        ShellExecuteEx(&sei);
    
        if (!sei.hInstApp) {
            // 处理错误情况
        }
    
        return 0;
    }
    

    【代码运行方式】:您需要将上述代码集成到您的程序中,或者创建一个单独的启动器程序,该程序以管理员权限启动您的主程序。

    【代码预期运行结果】:如果用户同意以管理员权限运行程序,您的程序将获得必要的权限来访问系统文件。

    【推荐相关链接】:

    请注意,即使以管理员权限运行程序,也可能无法访问所有系统文件,因为某些文件可能受到更高级别的保护。在尝试访问这些文件之前,请确保您了解相关的安全风险和最佳实践。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月14日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色
  • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
  • ¥15 字符串比较代码的漏洞
  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?