首页 > 解决方案 > 使用 GetProcessImageFileNameW 时出现未初始化的 LPWSTR 错误

问题描述

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

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

但是当我构建时出现编译器错误“使用未初始化的内存'路径'”

我该如何解决?

标签: c++windowswinapidriver

解决方案


LPWSTR是单个wchar_t*指针。LPWSTR path[MAX_PATH];创建一个指针数组也是如此wchar_t*

但是,GetProcessImageFileNameW()需要一个LPWSTR参数,文档中说:

lpImageFileName

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

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

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

试试这个:

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

推荐阅读