Windbg DbgPrint()无法打印字符串,但无法打印数字

Windbg DbgPrint()无法打印字符串,但无法打印数字,windbg,Windbg,我正在开发一个简单的驱动程序,目前我刚开始使用一个简单的回调函数,该回调函数安装在PsSetCreateThreadNotifyRoutine中。在回调函数中,我调用DbgPrint打印出pid和进程名称: DbgPrint("%.4x %s", ProcessId, GetProcessNameFromPid(ProcessId)); // dbgview shows nothing 如果我删除了%s规范,它会突然起作用: DbgPrint("%.4x", ProcessId); // wo

我正在开发一个简单的驱动程序,目前我刚开始使用一个简单的回调函数,该回调函数安装在PsSetCreateThreadNotifyRoutine中。在回调函数中,我调用DbgPrint打印出pid和进程名称:

DbgPrint("%.4x %s", ProcessId, GetProcessNameFromPid(ProcessId)); // dbgview shows nothing
如果我删除了%s规范,它会突然起作用:

DbgPrint("%.4x", ProcessId); // works
我在Windows7x64上使用dbgview查看调试消息。我已将注册表中的打印调试过滤器设置为0xF

我还使用windbg验证了GetProcessNameFromPid()返回的指针确实指向进程名

LPSTR GetProcessNameFromPid(HANDLE Pid)
{
    PEPROCESS Process;

    if (PsLookupProcessByProcessId(Pid, &Process) != STATUS_SUCCESS)
        return "????";

    return (LPSTR)PsGetProcessImageFileName(Process);
}

GetProcessNameFromPid
返回什么类型?它定义为
LPSTR GetProcessNameFromPid(句柄Pid)
GetProcessNameFromPid不是标准的Windows API。它做什么?不,不是,我用声明更新了问题。搞错了!显然PsGetProcessImageFileName()在我的头文件中没有定义。我的编译器没有抱怨它,我的链接器也没有抱怨它,但后者将其视为返回值为DWORD。与在不包含stdio.h的情况下调用printf()类似,一些链接器会处理它。