stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2808回复:26

如何让driver知道一个特定的app运行结束了(正常退出或这崩掉了)

楼主#
更多 发布于:2005-01-31 21:41
有简单的方法吗?

最新喜欢:

aasa2aasa2
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-04 16:52
你的信箱多少,我可以给发一个驱动的例子。

给我也发一个吧,谢谢!
longnet2000@sina.com.cn
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-03 18:02
为什么我不能给分啊,总说我没登陆,奇怪

这个得请教znsoft了,呵呵
:)  :)  :)
在交流中学习。。。
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-03 14:00
为什么我不能给分啊,总说我没登陆,奇怪
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-03 11:56
[quote]你的信箱多少,我可以给发一个驱动的例子。


对不起,着急,贴错了
是:  wujx@cosw.com [/quote]

查收一下了
在交流中学习。。。
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-02 16:20
你的信箱多少,我可以给发一个驱动的例子。


对不起,着急,贴错了
是:  wujx@cosw.com
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-02 16:19
你的信箱多少,我可以给发一个驱动的例子。


多谢!

vwujx@cosw.com
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-02-02 16:08
我觉得应该在确定上下文的内核驱动中用PsGetCurrentProcessId,获取进程ID,将它作为参数,这个核心函数是不会错的。错的是应用层的GetCurrentProcessId
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2005-02-02 15:13
据我所知在用户端调用GetCurrentProcessId()只返回0xffffffff,根本不是内核中对应的ProcessId,因为在用户端只能看到一个进程。PsSetCreateProcessNotifyRoutine中的输入参数ProcessId的给定是个问题。


的确有问题,在PsSetCreateProcessNotifyRoutine中的输入参数ProcessId中有时候系统给你的ProcessId是错误的,在WIN2K下由为严重,不过XP下好象基本没有问题的......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-02-02 14:08
你的信箱多少,我可以给发一个驱动的例子。
在交流中学习。。。
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-02-02 11:47

我的需求就是在一个特定的app开启和退出时让driver做一点工作。
比如在deviceextension里有一个flag,当这个app启动时driver将它设成true,当app退出时driver将其设为FALSE

我重申一下我的需求,上面老兄贴的msdn我看过,我想要的是一个例子。
我不知道在notifyroutine里怎么判别是不是我关心的app开始或结束了,还有怎么操作在定义在deviceExtension里的一个field的值。
分数已经加了,有人能回答吗?

fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-02-02 11:20
建议还是先动手做,不论什么方法,得自试了以后才知道适不适合。
在交流中学习。。。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-02-02 11:19
据我所知在用户端调用GetCurrentProcessId()只返回0xffffffff,根本不是内核中对应的ProcessId,因为在用户端只能看到一个进程。PsSetCreateProcessNotifyRoutine中的输入参数ProcessId的给定是个问题。

有这样的事?!
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-02-02 10:12
据我所知在用户端调用GetCurrentProcessId()只返回0xffffffff,根本不是内核中对应的ProcessId,因为在用户端只能看到一个进程。PsSetCreateProcessNotifyRoutine中的输入参数ProcessId的给定是个问题。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
14楼#
发布于:2005-02-01 21:47
PsSetCreateProcessNotifyRoutine
PsSetCreateProcessNotifyRoutine adds a driver-supplied callback routine to, or removes it from, a list of routines to be called whenever a process is created or deleted.

NTSTATUS
  PsSetCreateProcessNotifyRoutine(
    IN PCREATE_PROCESS_NOTIFY_ROUTINE  NotifyRoutine,
    IN BOOLEAN  Remove
    );
Parameters
NotifyRoutine
Specifies the entry point of a caller-supplied process-creation callback routine.
Remove
Indicates whether the routine specified by NotifyRoutine should be added to or removed from the system's list of notification routines. If FALSE, the specified routine is added to the list. If TRUE, the specified routine is removed from the list.
Include
ntddk.h

Return Value
PsSetCreateProcessNotifyRoutine can return one of the following:

STATUS_SUCCESS
The given NotifyRoutine is now registered with the system.
STATUS_INVALID_PARAMETER
The given NotifyRoutine has already been registered so this is a redundant call, or the system has reached its limit for registering process-creation callbacks.
Comments
Highest-level drivers can call PsSetCreateProcessNotifyRoutine to set up their process-creation notify routines, declared as follows:

VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE) (
    IN HANDLE  ParentId,
    IN HANDLE  ProcessId,
    IN BOOLEAN  Create
    );
The ParentId and ProcessId parameters identify the process, and the Create parameter indicates whether the process was created (TRUE) or deleted (FALSE).

An IFS or highest-level system-profiling driver might register a process-creation callback to track the system-wide creation and deletion of processes against the driver's internal state. The system can register up to eight process-creation callbacks. Any driver that successfully registers a callback must remain loaded until the system itself is shut down.

After a driver-supplied routine is registered, it is called with Create set to TRUE just after the initial thread is created within the newly created process designated by the input ProcessId handle. The input ParentId handle identifies the parent process of the newly created process if it inherits open handles from its parent.

A driver's process-notify routine is also called with Create set to FALSE, usually when the last thread within a process has terminated and the process address space is about to be deleted. In very rare circumstances, for processes in which no thread was ever created, a driver's process-notify routine is called only at the destruction of the process.

The driver's process-creation notify routine runs at IRQL PASSIVE_LEVEL, either in the context of the initial thread within a newly created process or in the context of a system thread.

Callers of PsSetCreateProcessNotifyRoutine must be running at IRQL PASSIVE_LEVEL
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-02-01 17:26
如果设备和APP都是你做的话,你可以在APP得到设备句柄,通过自定义DEVICEIOCONTROL,告诉驱动你的打开和关闭呢。


如果程序意外退出了,在哪里做deviceiocontrol啊?
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2005-02-01 17:16
如果设备和APP都是你做的话,你可以在APP得到设备句柄,通过自定义DEVICEIOCONTROL,告诉驱动你的打开和关闭呢。
一起交流,共同提高!
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-02-01 16:09
不明白你最终的需求是什么,如果是监控进程停止,其实可以用一个简单的办法,那就是Hook ZwTermintateProcess API,感觉更好一些,PsSetCreateProcessNotifyRoutine可能对监控进程开启更适合一些。


我的需求就是在一个特定的app开启和退出时让driver做一点工作。
比如在deviceextension里有一个flag,当这个app启动时driver将它设成true,当app退出时driver将其设为FALSE
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-02-01 16:05
不明白你最终的需求是什么,如果是监控进程停止,其实可以用一个简单的办法,那就是Hook ZwTermintateProcess API,感觉更好一些,PsSetCreateProcessNotifyRoutine可能对监控进程开启更适合一些。
在交流中学习。。。
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-02-01 15:48
还有个问题,我怎么知道是我要监视的那个app退出了,而不是其他的app呢?

我想能不能先在app里拿到它的processID,然后传到driver里面,当有process退出的时候让notifyroutine去看是不是我关心的那个id,如果不是就pass,否则进行一些处理。
还有,notifyroutine只传入三个参数,可是我想一旦我的app退出要干便deviceextension的某个field的值可怎么半呀?
继续高分求教。
上一页
游客

返回顶部