阅读:3842回复:5
PsLookupProcessByProcessId()函数失败
我做一个进程变化监测的驱动,使用的是PsSetCreateProcessNotifyRoutine函数,获得进程相关信息,使用的是PsLookupProcessByProcessId()函数(方法实现很老),后者用来获得进程的EPROCESS结构的相关信息。
出现的问题是:当进程产生时,调用PsLookupProcessByProcessId()函数成功,而进程关闭时,调用该函数则会失败,不知为什么,请大佬们指教!! |
|
|
驱动老牛
|
沙发#
发布于:2005-01-11 09:57
这是通知函数,不是HOOK,当得到通知的时候进程创建或关闭已经发生。
只有创建的时候才可以调用PsLookupProcessByProcessId() 关闭的时候进程已经不存在调用PsLookupProcessByProcessId()当然失败 |
|
板凳#
发布于:2005-01-11 10:24
失败的返回值是什么?
|
|
地板#
发布于:2005-01-11 11:01
我也是怀疑当进程结束时,由于进程不再存在,从而导致调用PsLookupProcessByProcessId失败。
返回值为是这样得到的: if (!NT_SUCCESS( status )) { ... } 其实我用的就是网上传颂的sinister的进程监视器,我想对其进行改进。 当进程结束时,如果不用PsLookupProcessByProcessId(),如何根据进程的PID得到进程相关信息呢? |
|
|
驱动老牛
|
地下室#
发布于:2005-01-11 12:33
你可以在进程创建的时候把需要的信息记录下来啊
|
|
5楼#
发布于:2005-01-11 13:44
我做一个进程变化监测的驱动,使用的是PsSetCreateProcessNotifyRoutine函数,获得进程相关信息,使用的是PsLookupProcessByProcessId()函数(方法实现很老),后者用来获得进程的EPROCESS结构的相关信息。 你是在PsSetCreateProcessNotifyRoutine的完成例程里做的吗? |
|
|