读书人

USB 驱动例程管理有关问题

发布时间: 2012-02-09 18:22:27 作者: rapoo

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

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

读书人网 >驱动开发

热点推荐