saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
阅读:1165回复:3

求教!流接口设备的电源管理。

楼主#
更多 发布于:2007-10-20 16:16
如题。
关于流接口设备的电源管理,是否只需在其注册表中添加IClass键值,然后在其XXX_PowerOff和XXX_PowerOn()中添加相应的开关设备的代码即可呢?
IClass值的设置是否有影响呢?像流接口设备,我想应该是设成"{A32942B7-920C-486b-B0E6-92A702A99B35}"吧。
其他的地方还有要改动或添加的吗?(我试了一下只在这两个地方改动,但XXX_PowerOff()函数未执行)。希望各位大哥大侠多多提点,还应该做些什么?
努力! 成功就在不远处....
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-21 21:44
这个与ICLASS无关,
POERDOWN在系统进入POWEROFF模式时才被调用,平常并不被调用.
可以实现一个IOCTL名字叫什么我记不清了,去实现D0到D4几种电源状态.
学海无涯
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-24 09:34
谢谢microsun大哥的回复。
这两天看了一下电源管理的结构,大致明白了它的流程。
但还是有些问题不大明白。
关于XXX__IOControl()函数,我参照了一下\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\DEVSAMPLE中的样例,用到了我的设备驱动中。
在样例中定义了这么一个结构:
// this structure keeps track of each device instance
typedef struct _DeviceState_tag {
    CRITICAL_SECTION        csDevice;        // serialize access to this device's state
    HANDLE                    hevStop;        // when signaled, the device thread exits
    HANDLE                    htDevice;        // device thread handle
    HANDLE                    htActivity;        // activity generating thread
    TCHAR                    szName[16];        // should be of the format"PDXn" (no colon)
    CEDEVICE_POWER_STATE    CurrentDx;        // current power level
    DWORD                    dwInactivityTimeout;    // in ms
    DWORD                    dwMaxActivityTimeout;    // in ms
    BOOL                    fBoostRequested;      // TRUE if we request a power state increase
    BOOL                    fReductionRequested;  // TRUE if we request a power state decrease
} DEVICESTATE, *PDEVICESTATE;
用它来定义一个变量PDEVICESTATE pds = (PDEVICESTATE) dwContext;(dwContext为XXX__IOControl的第一个参数)但是一用到pds,就会出错。(比如在IOCTL_POWER_SET中会把当前设备的电源状态保存在pds->CurrentDx中)
Data Abort: Thread=8bd7cbd4 Proc=89a872a0 'device.exe'
AKY=00000005 PC=03f7c588(coredll.dll+0x0001c588) RA=025917cc(poweroff.dll+0x000017cc) BVA=06000005 FSR=00000001
RaiseException: Thread=8bd7cbd4 Proc=89a872a0 'device.exe'
AKY=00000005 PC=03f7e068(coredll.dll+0x0001e068) RA=88219d88(NK.EXE+0x00019d88) BVA=00000003 FSR=00000003
这是什么原因呢?
努力! 成功就在不远处....
saint_bxg
驱动小牛
驱动小牛
  • 注册日期2006-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望284点
  • 贡献值0点
  • 好评度257点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-24 14:20
SD部分的电源管理始终不起作用,不知道是什么原因。
  "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",
                    "{A32942B7-920C-486b-B0E6-92A702A99B35}"
注册表中这样设置了,但加载驱动DLL时都不会调用 IoControl()函数。
哪位兄弟可遇到过这样的情况,还望指点一二!谢谢了!
努力! 成功就在不远处....
游客

返回顶部