我正在开发一个简单的驱动程序,目前我刚开始使用PsSetCreateThreadNotifyRoutine安装了一个简单的回调。在回调函数中,我调用DbgPrint打印出pid和进程名称:
DbgPrint("%.4x %s", ProcessId, GetProcessNameFromPid(ProcessId)); // dbgview shows nothing
如果我删除%s特异性,它突然起作用:
DbgPrint("%.4x", ProcessId); // works
我在Windows 7 x64上使用dbgview查看调试消息。我在注册表中打印调试过滤器设置为0xF
我还通过windbg验证了GetProcessNameFromPid()返回的指针确实指向了进程名称。
LPSTR GetProcessNameFromPid(HANDLE Pid)
{
PEPROCESS Process;
if (PsLookupProcessByProcessId(Pid, &Process) != STATUS_SUCCESS)
return "????";
return (LPSTR)PsGetProcessImageFileName(Process);
}