ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2002-04-08 08:43
------------------------------------------------
我看不懂了
你不是要写过滤驱动吗?
不是先获得了目标设备的指针,又连接好了
不是已经可以过滤到IRP了吗?
怎么还用ZwCreateFile打开设备做什么???

另:你的这个厂商的设备是不是只能独占访问啊?
-------------------------------------------------
用ZwCreateFile是采用File monitor的做法,把目标设备当作一个文件对象来打开,也可以获得目标设备的指针,与IoGetDeviceObjectPointer效果相同。

另:你说的独占访问是什么意思?我怀疑它打开设备的时候是独占方式。这样我就一点办法没有了。:(


Re:TonyHuyan
----------------------------------------------------------
你怎么确信你的Filter已经Hook到该设备上?
Filter必须支持下层驱动的所有IRP_MJ_Functions,open失败,应该是你的IRP_MJ_CREATE有问题,对于启动下层驱动的IRP_MJ_CREATE,必须递下去(如何区分启动下层驱动还是启动你自己,参考File Monitor)。
----------------------------------------------
根据Art Baker的《Windows NT设备驱动程序设计指南》,我写了一个PassThrough, 将所有我没有重载的IRP命令,直接发给目标设备了。应该不是那个问题。

我相信我hook到目标设备上了,因为我的Filter启动之后,它的open函数失败了。我的驱动对它由直接的影响。

----------------------------------------
关于你前面的问题,没太明白你的意思,不过
一般在调用 IoGetDeviceObjectPointer 之后,
需要调用 ObReferenceObjectByPointer 以增加
其引用计数。

另: File Monitor 的做法是好的!
-----------------------------------------
我调用了。

另:为什么file monitor 的做法是好的?它和IoGetDeviceObjectPointer方法有什么不同?
没有你,我不知道怎么办...
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2002-04-11 10:59
我知道为什么我的过滤驱动和应用程序不能同时打开目标设备了。我用同样的名字写了一个目标设备的驱动,替换了原来的驱动程序,就能够同时启动过滤驱动和应用程序。若将创建目标设备的函数IoCreateDevice得倒数第二个参数BOOLEAN Exclusive改为TRUE,表示不允许多个线程同时打开该设备。结果出现了原来的那种现象,即过滤驱动和应用程序不能同时打开目标设备。我想,应该是这个原因了。
没有你,我不知道怎么办...
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2002-04-11 11:06
Congradulations !!!
Tom_lyd
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2002-04-11 11:07
你那种情况,我认为IoAttachDevice函数可以帮你,我曾经试过,他在成功加载了设备并Attach后把目标设备的指针关掉(调用Close),你试试看,行不行,行了告诉大家一下~
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
24楼#
发布于:2002-04-11 11:36
你的目标设备类型是什么?
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Class的对应CLSID下,在UPPERFILTER里加上你的SERVICE名就可以了.

这样一来,HOOK是由OS替你做的,REFERENCE不会增加.
但这种方式对FILTER的要求比较高.
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2002-04-11 14:11
Re:Jame.z
-----------------------------------------------------
你那种情况,我认为IoAttachDevice函数可以帮你,我曾经试过,他在成功加载了设备并Attach后把目标设备的指针关掉(调用Close),你试试看,行不行,行了告诉大家一下~
-------------------------------------------------------
谢谢Jame.z,给我提了一个好idea。 我试过了,真的能够同时打开过滤驱动和应用程序。It\'s so fabulous!

我看了一下IoAttachDevice和IoAttachDeviceToDeviceStack的DDK文档,除了在调用上有区别之外,它们在功能方面的说明可以说完全一致。不知Jame.z兄知不知道这两个函数在实现上的差异?

问题解决了,希望大家都能通过我的案例得到提高。
没有你,我不知道怎么办...
上一页 下一页
游客

返回顶部