hasis
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2006-04-03
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:3842回复:5

PsLookupProcessByProcessId()函数失败

楼主#
更多 发布于:2005-01-10 19:14
我做一个进程变化监测的驱动,使用的是PsSetCreateProcessNotifyRoutine函数,获得进程相关信息,使用的是PsLookupProcessByProcessId()函数(方法实现很老),后者用来获得进程的EPROCESS结构的相关信息。

出现的问题是:当进程产生时,调用PsLookupProcessByProcessId()函数成功,而进程关闭时,调用该函数则会失败,不知为什么,请大佬们指教!!
大学课程加上语文吧,否则在驱网里都不会提问题:)
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-01-11 09:57
这是通知函数,不是HOOK,当得到通知的时候进程创建或关闭已经发生。
只有创建的时候才可以调用PsLookupProcessByProcessId()
关闭的时候进程已经不存在调用PsLookupProcessByProcessId()当然失败
---内核开发合作或提供基础技术服务QQ:22863668 ---
toadwolf
驱动牛犊
驱动牛犊
  • 注册日期2003-11-30
  • 最后登录2013-11-12
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望67点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-11 10:24
失败的返回值是什么?
hasis
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2006-04-03
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-11 11:01
我也是怀疑当进程结束时,由于进程不再存在,从而导致调用PsLookupProcessByProcessId失败。

返回值为是这样得到的:
if (!NT_SUCCESS( status ))
{
  ...
}

其实我用的就是网上传颂的sinister的进程监视器,我想对其进行改进。

当进程结束时,如果不用PsLookupProcessByProcessId(),如何根据进程的PID得到进程相关信息呢?

大学课程加上语文吧,否则在驱网里都不会提问题:)
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-01-11 12:33
你可以在进程创建的时候把需要的信息记录下来啊
---内核开发合作或提供基础技术服务QQ:22863668 ---
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-11 13:44
我做一个进程变化监测的驱动,使用的是PsSetCreateProcessNotifyRoutine函数,获得进程相关信息,使用的是PsLookupProcessByProcessId()函数(方法实现很老),后者用来获得进程的EPROCESS结构的相关信息。

出现的问题是:当进程产生时,调用PsLookupProcessByProcessId()函数成功,而进程关闭时,调用该函数则会失败,不知为什么,请大佬们指教!!

你是在PsSetCreateProcessNotifyRoutine的完成例程里做的吗?
在交流中学习。。。
游客

返回顶部