DJayWDM
驱动牛犊
驱动牛犊
  • 注册日期2008-01-19
  • 最后登录2008-03-15
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:1467回复:1

请教一个利用拦截IRP达到设备禁用的设想

楼主#
更多 发布于:2008-01-29 15:25
众所周知,驱动程序是利用IRP传递命令的,如果我做一个上层类过滤驱动程序,拦截write和read分发例程里的IRP包,能否实现对该设备读写的禁用呢?
再进一步,如果我拦截AddDevice或OnStartDevice里面的IRP包,能否禁用设备的加载呢?
另外,本人乃驱动菜鸟一个,在尝试丢弃IRP包的时候都不知道机器蓝屏了多少次了,希望大侠们详细指点一下拦截一个IRP包的方法。
DJayWDM
驱动牛犊
驱动牛犊
  • 注册日期2008-01-19
  • 最后登录2008-03-15
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-30 11:32
呵呵,终于知道怎么拦截了,只要先判断一下设备描述,就不会开机蓝屏了。
在OnStartDevice里面添加:
if(wcscmp(buf,L"USB Mass Storage Device") == 0)
{
    I->IoStatus.Status = STATUS_ACCESS_DENIED;
    I->IoStatus.Information = 0;
    IoCompleteRequest(I,IO_NO_INCREMENT);
    return STATUS_ACCESS_DENIED;
}

但是新的问题又来了,现在插入一块U盘,文件管理器是不出现什么异常,但右下角那个“安全删除硬件”的图标还是会出现,而且无法卸载,甚至于无法正常关机,在Driver Moniter里面看,当OnStartDevice运行后,马上就运行OnRemoveDevice,是不是由于设备已经卸载,但Windows应用层设备管理器不知道,还去调用卸载命令而失败呢?

下一步设想:
能否通过自行构造一个IRP包,设置为IRP_MJ_CLEANUP,自行卸载掉设备,至少保证能够正常关机,不知道我这个设想对不对,还请高手们多多指教啊
游客

返回顶部