vancaho
驱动牛犊
驱动牛犊
  • 注册日期2004-04-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分574分
  • 威望100点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分0分
阅读:1166回复:1

怎样停止一个设备,不知道我的方案可行不?

楼主#
更多 发布于:2007-03-30 00:24
  过滤层驱动,在AddDevice例程中对接入的设备进行判断,如果允许的话,则完成加载
如果不允许的话,我想停止该设备的使用

目前想到了两种方案,不知可行否,希望大虾指点一二:
1。在PnP的AddDevice或者IRP_START_DEVICE例程中往下层驱动发送IRP_MN_STOP_DEVICE,不知道行否。如果可行的话,要是再启用该设备呢?发送IRP_MN_START_DEVICE能行不?

2、使用IoSetDeviceInterfaceState函数,我不知道能不能在上面两个历程中使用。
aqiuzaizai
驱动牛犊
驱动牛犊
  • 注册日期2007-02-02
  • 最后登录2008-04-02
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望69点
  • 贡献值0点
  • 好评度68点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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);

后面就交给系统自己做去了,

现在继续研究中。。。希望大牛发现问题的话给予指点
竹密何妨流水过 山高岂碍野云飞
游客

返回顶部