【问题标题】:Uninitialized LPWSTR Error While Using GetProcessImageFileNameW使用 GetProcessImageFileNameW 时出现未初始化的 LPWSTR 错误
【发布时间】:2021-09-22 18:18:36
【问题描述】:

我正在尝试在 Windows 内核驱动程序中使用 GetProcessImageFileNameW。

    LPWSTR path[MAX_PATH];
    if(GetProcessImageFileNameW(hProcess, path, MAX_PATH) == 0)
    {
        DbgPrint("Can't get the process image name");
        return;
    }

但是当我构建时出现编译器错误“Using uninitialized memory 'path'”

我该如何解决?

【问题讨论】:

  • 请附上完整的错误信息。您可能想阅读minimal reproducible example
  • 对不起。但是可以在内核模式下调用GetProcessImageFileNameW 吗?而There is a SO question 提供了一个在驱动程序中获取当前进程映像文件全名的解决方案。

标签: c++ windows winapi driver


【解决方案1】:

LPWSTR 是单个 wchar_t* 指针。所以LPWSTR path[MAX_PATH]; 正在创建一个wchar_t* 指针数组。

但是,GetProcessImageFileNameW() 采用 LPWSTR 参数,其中 documentation 表示:

lpImageFileName

一个指向缓冲区的指针,它接收可执行文件的完整路径。

这意味着GetProcessImageFileNameW() 需要一个指向wchar_t 字符数组的指针,然后它将根据需要填充。

一个数组衰减为指向其第一个元素的指针。因此,您正在传递一个 wchar_t** ,其中预期是 wchar_t* 。我很惊讶您没有收到关于类型不匹配的编译器错误,而不是关于未初始化内存的错误。

试试这个:

WCHAR path[MAX_PATH] = {};
if (!GetProcessImageFileNameW(hProcess, path, MAX_PATH))
{
    DbgPrint("Can't get the process image name");
    return;
}

【讨论】:

  • 感谢您的快速响应,但它窃取不起作用。我提醒我,我正在构建一个 Windows 驱动程序和一个常规用户模式程序。
  • 它不工作” - 究竟是什么方式?更具体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2021-05-08
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 2020-09-15
  • 2018-02-06
相关资源
最近更新 更多