流驱动如何接收 UserIdle 消息
来源:互联网 发布:英雄联盟网络延迟300 编辑:程序博客网 时间:2024/04/29 19:54
最近在做电源管理,初识 WINCE 对电源管理只知道 ON UserIdle SystemIdle Suspend 这几种状态(初学,写错希望高手指点)。
最初的想法是在 UserIdle 的地方只关背光,但是不知道如何下手,还是 GOOGLE 帮了大忙,不断的 GOGO 哈哈。
最后发现
建立支持电源管理的设备驱动
为了建立一个能够对设备进行电源管理的驱动程序,我们必须首先建立一个支持non-COM-related设备接口的驱动程序。non-COM-related设备接口标明这个设备是支持电源管理的。可以用以下方式建立这种接口:
l 可以在注册表中,用激活设备所用的IClass值定义接口;
l 可以在驱动程序的Init函数中,设置注册表中的IClass值;
l 可以使用ActivateDeviceEx的参数REGINI设置IClass值;
l 可以在驱动程序中显示地调用AdvertiseInterface函数。
电源管理器通过IOCTL代码来和驱动通信。通常情况下,当一个驱动程序声明为支持电源管理时,驱动只需要在DeviceIoControl中实现电源的管理即可。下面是电源管理器用来与驱动通信的IOCTL代码:
l IOCTL_POWER_CAPABILITIES:代表电源管理器请求设备驱动返回设备支持的电源状态及相关特征;
l IOCTL_POWER_SET:请求驱动更新设备的电源状态;
l IOCTL_POWER_QUERY:电源管理器询问设备是否准备好进行状态切换;
l IOCTL_POWER_GET:请求驱动返回当前设备的电源状态;
l IOCTL_REGISTER_POWER_RELATIONSHIP:通知父设备注册所有它所控制的设备。
其中IOCTL_POWER_CAPABILITIES和IOCTL_POWER_SET是支持电源管理的设备驱动必须实现的。
可以知道系统在进入 UserIdle 的时候会给流驱动发一个IOCTL_POWER_SET消息,通过IOCTL 来接收。
但是只设置 IOCTL 的 IOCTL_POWER_SET 消息是不够的,
在流驱动的注册表里面需要加入 PM类入口 "IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"
这样基本 OK 了, 有待测试,
现介绍到这里,睡觉啦,
明天继续。
- 流驱动如何接收 UserIdle 消息
- C# 中如何定义和接收消息?
- C# 中如何定义和接收消息?
- c# 中如何定义和接收消息
- C# 中如何定义和接收消息
- C# 中如何定义和接收消息?
- C# 中如何定义和接收消息
- Android如何接收locale改变的消息
- Android演示如何接收广播消息
- 环信小坑:历史好友申请消息如何接收
- 如何正确接收 GitHub 的消息邮件
- Strom如何保证消息发送与接收
- EJB---->消息驱动bean--Queue 消息的发送与接收(PTP 消息传递模型)
- EJB---->消息驱动bean--Topic 消息的发送与接收(Pub/sub 消息传递模型)
- 消息接收
- 接收消息
- 接收消息
- 如何在VB例程中接收自定义消息
- 4月27日留5
- 【转帖】暴强游戏资源帖
- 一道猥琐的题目
- bcb学习之班级管理器课程表切换
- Linux系统编程---socket编程
- 流驱动如何接收 UserIdle 消息
- 系统可行性分析
- 有符号和无符号数据的转换
- Linux之VI命令详解
- 简单的J2ME环境搭建
- 位于互联网的端口检测 - 在线端口扫描,检测端口能否在外网能访问
- Visual Studio + VAssistX常用快捷键
- 桌面IE被劫持
- 网址收录 Links 222259