阅读:1166回复:1
怎样停止一个设备,不知道我的方案可行不?
过滤层驱动,在AddDevice例程中对接入的设备进行判断,如果允许的话,则完成加载
如果不允许的话,我想停止该设备的使用 目前想到了两种方案,不知可行否,希望大虾指点一二: 1。在PnP的AddDevice或者IRP_START_DEVICE例程中往下层驱动发送IRP_MN_STOP_DEVICE,不知道行否。如果可行的话,要是再启用该设备呢?发送IRP_MN_START_DEVICE能行不? 2、使用IoSetDeviceInterfaceState函数,我不知道能不能在上面两个历程中使用。 |
|
沙发#
发布于:2007-04-30 18:22
和你有一样的问题:
我处理的思路是: //获取文件和设备对象; IoStackLocation = IoGetNextIrpStackLocation(Irp); //在驱动内部产生自己需要的IRP Irp = IoAllocateIrp (); 或 IoBuildSynchronousFsdRequest(); //并设置相应的主要的饿DEVICE_POWER_STATE IoStackLocation->MajorFunction = IRP_MJ_POWER; IoStackLocation->MinorFunction = IRP_MN_NORMAL; IoStackLocation->Parameters.Power.Type = DevicePowerState; IoStackLocation->Parameters.Power.State.DeviceState = PowerState; //设置IRP完成例程 IoSetCompletionRoutine(); //然后IoAllocateIrp向下层驱动传递, IoCallDriver(pDeviceExt, Irp); 后面就交给系统自己做去了, 现在继续研究中。。。希望大牛发现问题的话给予指点 |
|
|