zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
阅读:1470回复:3

麻烦大大解释一句代码,不懂

楼主#
更多 发布于:2008-05-09 11:04
一个USB驱动  
这是在PNP例程中的case IRP_MN_STOP_DEVICE里面的一段代码,好像是停设备之前,要把电源的IRP包给Cancel掉

在POWER例程的 case PowerSystemWorking:中也调用了同一段代码

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
NTSTATUS result;
DEVICE_EXTENSION extension;//////就是那个用户自定义的大结构体
PIRP irp; //

 irp =(PIRP) InterlockedExchange(&extension->var1400, 0);//////////???这句不明白,
////////////////是在这里面存Pending irp么?可以这样么?
  
  if ( irp )
  {
    IoCancelIrp(irp);///cancel pending irp
    result = InterlockedExchange(&extension->var1408, 1);
    if ( result )
    {
      PoStartNextPowerIrp(irp);
      irp->IoStatus.Information = 0;
      irp->IoStatus.Status = STATUS_CANCELLED;
      IoCompleteRequest(irp, 0);
    }
  }
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-09 11:43
非常感谢
游客

返回顶部