2010-08-07 16 views
0

我正在Windows过滤平台中开发驱动程序,我需要另一个进程的进程ID来完成我需要做的事情。我只知道该进程的文件名(name.exe)。WDK:通过name.exe获取processId

在win32中,我可以使用函数CreateToolhelp32Snapshot来获取所有进程的列表,我可以在那里搜索PID。 (http://msdn.microsoft.com/en-us/library/ms684834(VS.85).aspx

不幸的是在内核模式下这个东西不可用。任何人都知道如何通过内核空间获得只知道二进制名称的processID?

回答

0

根据时间的不同,您可以拨打PsSetCreateProcessNotifyRoutineEx()与您自己的处理程序CreateProcessNotifyEx()。然后您的CreateProcessNotifyEx()将收到一个指向PS_CREATE_NOTIFY_INFO的指针。在这个结构中是字段ImageFileName以及位FileOpenNameAvailable

程序名称将在ImageFileName指向的Unicode字符串中。如果FileOpenNameAvailable,那么该字符串将包含二进制文件的完全限定路径。否则,期望仅查找模块名称,可能没有扩展名。

+1

感谢您的回复! 根据MSDN:“PsSetCreateProcessNotifyRoutineEx例程注册或删除一个回调例程,该例程在创建或退出进程时通知调用方。” 所以很不幸,它似乎并不是我所需要的。 我需要知道已经运行的进程,因为我的驱动程序在应用程序启动后加载。 – Marco 2010-08-08 01:26:33

+0

@Marco,欢迎您。是的,这是我想知道的“取决于时间...”对不起,这对你不起作用... 如果我没记错,PEB有一个双链表在某处,并从那您可以访问系统上的所有PEB。 – 2010-08-08 02:18:10