阅读:1467回复:1
请教一个利用拦截IRP达到设备禁用的设想
众所周知,驱动程序是利用IRP传递命令的,如果我做一个上层类过滤驱动程序,拦截write和read分发例程里的IRP包,能否实现对该设备读写的禁用呢?
再进一步,如果我拦截AddDevice或OnStartDevice里面的IRP包,能否禁用设备的加载呢? 另外,本人乃驱动菜鸟一个,在尝试丢弃IRP包的时候都不知道机器蓝屏了多少次了, ![]() |
|
沙发#
发布于: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,自行卸载掉设备,至少保证能够正常关机,不知道我这个设想对不对,还请高手们多多指教啊 |
|