阅读:2345回复:6
在tdi或者ndis能不能得到是那个进程发送的irp
最近在学习的过程中有一个疑问,也可以说是内核编程的疑问,当一个应用程序发出发包请求,程序从用户空间转换到内核空间执行tdi或者ndis,我看到的书上说,此时驱动程序是工作在任意的进程上下文中的那么此时如果调用psgetcurrentprocess是否得到的进程也许不是实际发出发包请求的进程?
如果是这样的话,那么那些防火墙软件又是如何实现检测到当前是那个程序在发包呢?对了,还有tdiview也可以看到是那个程序在发包 谢谢了! |
|
最新喜欢:![]() |
沙发#
发布于:2004-01-01 17:43
ding
|
|
板凳#
发布于:2004-01-01 20:46
在TDI可以得到当前进程信息,
ndis发包的时候已经没有进程上下文了。 |
|
地板#
发布于:2004-01-01 21:09
大侠能不能具体解释一下原因呀?还是msdn上提到过
小弟我确实没看见呀!谢谢了 |
|
地下室#
发布于:2004-07-31 10:58
你这个问题我也遇到了。
我经过实验, 得到了一个事实。 在TDI层中,IRQL总是PASSIVE_LEVEl。 这时是可以调用PsGetCurrentProcess函数的。 而在NDIS层中,IRQL有时在PASSIVE_LEVEL, 有时在DISPATCH_LEVEL或其它中断级, 这时, 根据NTDDK的说明, PsGetCurrentProcess函数就会有时可能执行, 有时不能执行了。 这样的结果就是,在NDIS层中,用户不能总是得到当前的进程名。 |
|
|
5楼#
发布于:2004-08-18 11:08
tdi 中可以用psgetcurrentprocessID后返回应用层查询得到其完整路径。而psgetcurrentprocessID可以工作在任意IRQL.
|
|
6楼#
发布于:2004-08-20 18:28
ndis层已经没有进程上下文,即使psgetcurrentprocessID成功,也只是返回系统线程的id,如果要得到进程名,可以在tdi层,不查询win32也可以得到进程的全路径,这个可以在网上搜一下,有代码。
|
|