首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

USB 驱动例程管理有关问题

2012-02-09 
USB 驱动例程管理问题我采用的芯片是CY7c68013A,使用以下方法后就出现了关机后是后一步,没有关闭电涛,当然

USB 驱动例程管理问题
我采用的芯片是CY7c68013A,使用以下方法后就出现了关机后是后一步,没有关闭电涛,当然,重启也是一样不能关闭电源,其它的应该什么都关闭了.


/********************************************************************************************
电源管理例程Start
********************************************************************************************/
NTSTATUS   Ezusb_PowerIrp(IN   PDEVICE_OBJECT   fdo,IN   PIRP   Irp)
{
NTSTATUS   ntStatus;
PIO_STACK_LOCATION   IrpStack,   NextStack;
        PDEVICE_EXTENSION   pdx;

        pdx   =   fdo-> DeviceExtension;
 
        Irp-> IoStatus.Status   =   STATUS_SUCCESS;
        Irp-> IoStatus.Information   =   0;

        IrpStack   =   IoGetCurrentIrpStackLocation   (Irp);

        switch   (IrpStack-> MinorFunction)   {
case   IRP_MN_SET_POWER:       //设置系统或设备电源状态
switch   (IrpStack-> Parameters.Power.Type)   {
case   SystemPowerState:
break;  
                                case   DevicePowerState:
switch   (IrpStack-> Parameters.Power.State.DeviceState)   {
case   PowerDeviceD3:
break;
                                                case   PowerDeviceD2:
break;
                                                case   PowerDeviceD1:
                                                        break;
                                                case   PowerDeviceD0:
                                                        break;
}
                                break;  
  }
                  break;    
                  case   IRP_MN_QUERY_POWER:   //查询能否更改系统或设备电源状态
                          switch   (IrpStack-> Parameters.Power.Type)   {
                        case   SystemPowerState:
break;  
                        case   DevicePowerState:
switch   (IrpStack-> Parameters.Power.State.DeviceState)   {
case   PowerDeviceD2:                                        
break;
                                        case   PowerDeviceD1:


                                                  break;
                                        case   PowerDeviceD3:
                                                  break;
}  
                              break;  
  }
                  break;  
                  default:
  ;
}  
        /*NextStack   =   IoGetNextIrpStackLocation(Irp);
        RtlCopyMemory(NextStack,   IrpStack,   sizeof(IO_STACK_LOCATION));
*/
IoCopyCurrentIrpStackLocationToNext(Irp);


        //ntStatus   =   IoCallDriver(pdx-> StackDeviceObject,   Irp);
PoStartNextPowerIrp(Irp);
ntStatus   =   PoCallDriver(pdx-> StackDeviceObject,   Irp);


      if   (ntStatus   ==   STATUS_PENDING)   {
      IoMarkIrpPending(Irp);
      }
      return   ntStatus;
}
/********************************************************************************************
电源管理例程End
********************************************************************************************/


[解决办法]
电源管理不是很熟悉,你是不能关闭电源,是设备不能关闭电源,还是PC不能关闭电源呢?

[解决办法]
我用winDbg跟踪的结果是:

Process.Thread : 00000344.00000604 (svchost.exe) is trying to create key: 
ObjectAttributes = 00A4FB30
The caller should not rely on data written to the registry after shutdown...
Waiting on: \Driver\Example \Device\Cyusb irp (827dee70) SetPower-Shutdown status 0
Waiting on: \Driver\Example \Device\Cyusb irp (827dee70) SetPower-Shutdown status 0
Waiting on: \Driver\Example \Device\Cyusb irp (827dee70) SetPower-Shutdown status 0
MM MODWRITE: modified page write iosb failed - status 0xc0000189
MM MODWRITE: modified page write iosb failed - status 0xc0000189
MM MODWRITE: modified page write iosb failed - status 0xc0000189

但,没找到原因!
[解决办法]
找个成熟的代码,替换掉相应的...

热点排行