我通过截取Irp_MJ_CREATE来实现对U盘的禁用代码如下
NTSTATUS USBFilterDispatchCreate(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp )
{
PDEVICE_EXTENSION devExt;
PIO_STACK_LOCATION currentIrpStack;
PIO_STACK_LOCATION nextIrpStack;
devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
currentIrpStack = IoGetCurrentIrpStackLocation(Irp);
nextIrpStack = IoGetNextIrpStackLocation(Irp);
*nextIrpStack = *currentIrpStack;
Irp->IoStatus.Information=0;
Irp->IoStatus.Status=STATUS_ACCESS_DENIED;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
return IoCallDriver( devExt->TopOfStack, Irp );
}
编译过程没有问题但是安装好后U盘还是照常加载,怎么回事是不是我绑定的设备有问题?我绑定的设备是"\\Device\\USBFDO-1"以前试过"\\Device\\USBFDO-0"也不行。求指教
------解决方案--------------------
你需要把你如何做的介绍得更加仔细一些。
你确认你的Filter驱动被对应的U盘加载了么?
试着用WinDBG调试一下?
------解决方案--------------------
修改irp
------解决方案--------------------
USB禁用跟文件驱动没什么关系
简单点的使用SETUPAPI设置设备管理器 就可以了
驱动下面 从卷监控 发送IOCTL查询加载的设备类型 是USB就返回失败禁用
从设备监控 也行
不过应该不是你的那个设备名\\Device\\USBFDO-0 这个是错误的名字
------解决方案--------------------
U盘不可读是可以用文件驱动的
对于文件路径在U盘上的创建和写入操作可以返回失败禁止
注意还有SETFILEINFORMATION 派遣函数 这个会改变文件的长度和删除 重命名 也要监控
------解决方案--------------------
反正我觉得这个AddDevice代码没有问题的,很规范的教科书代码啊