WDF驱动的电源管理_wdfdeviceassigns0idlesettings_qq_857305819的博客-程序员宅基地

技术标签: 驱动编程  

添加电源处理回调函数

//电源回调处理函数

NTSTATUS EvtDeviceD0Entry(_In_ WDFDEVICE Device, _In_ WDF_POWER_DEVICE_STATE PreviousState)
{
    
	NTSTATUS status = STATUS_SUCCESS;
	KdPrint(("enter EvtDeviceD0Entry\n"));
	return status;
}
NTSTATUS EvtDriverDeviceAdd(_In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit)
{
    
	WDF_PNPPOWER_EVENT_CALLBACKS wpec;
	//初始化PNP结构
	WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&wpec);

	//添加自己要处理的电源回调
	wpec.EvtDeviceD0Entry = EvtDeviceD0Entry;
	wpec.EvtDeviceD0Exit = EvtDeviceD0Exit;
	wpec.EvtDeviceD0ExitPreInterruptsDisabled = EvtDeviceD0ExitPreInterruptsDisabled;
	wpec.EvtDeviceD0EntryPostInterruptsEnabled = EvtDeviceD0EntryPostInterruptsEnabled;

	//把自己要处理的回调函数跟设备关联
	WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &wpec);
	}

测试结果
在这里插入图片描述

空闲处理

设置了空闲处理,给定一个时间,如果在给定时间内没有操作,系统就会切换电源状态

NTSTATUS EvtDriverDeviceAdd(_In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit)
{
    
	//创建设备之后才能设置空闲处理
	
	WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS IdleSettings;

	//初始化空闲处理,不能从S0状态唤醒
	WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&IdleSettings,IdleCannotWakeFromS0);

	//设置10s的空闲时间,10s不操作就会进入空闲处理 切换电源状态.
	IdleSettings.IdleTimeout = 10000;  

	//关联设备和空闲处理
	WdfDeviceAssignS0IdleSettings(Device, &IdleSettings);
}

处理电源PNP

//设备进入全功率运行状态
NTSTATUS EvtDeviceD0Entry(_In_ WDFDEVICE Device, _In_ WDF_POWER_DEVICE_STATE PreviousState)
{
    
	NTSTATUS status = STATUS_SUCCESS;
	static PCHAR PowerStates[] = {
    
		"WdfPowerDeviceInvalid 					"  ,
		"WdfPowerDeviceD0						"  ,
		"WdfPowerDeviceD1						"  ,
		"WdfPowerDeviceD2						"  ,
		"WdfPowerDeviceD3						"  ,
		"WdfPowerDeviceD3Final					"  ,
		"WdfPowerDevicePrepareForHibernation	"  ,
		"WdfPowerDeviceMaximum					"  
	
	};
	KdPrint(("enter EvtDeviceD0Entry %s \n",PowerStates[PreviousState]));
	return status;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41490873/article/details/108069056

智能推荐

06-03_Redis_客户端_连接池技术JedisPool_settestoncreate的作用是什么-程序员宅基地

6.3 连接池技术JedisPool6.3.1 JedisPool1:从资源池借Jedis对象2:Jedis执行命令3:返回执行结果4:归还Jedis对象给连接池6.3.2 示例代码import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.junit.Test;import redis.cli..._settestoncreate的作用是什么

Error from server (NotFound): the server could not find the requested resource-程序员宅基地

[root@localhost ~]# kubectl versionClient Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.2", GitCommit:"81753b10df112992bf51bbc2c2f85208aad78335", GitTreeState:"clean", BuildDate:"2018.

微服务架构6种常用设计模式_微服务架构 6种设计模式-程序员宅基地

微服务架构6种常用设计模式代理设计模式在微服务架构中 代理服务 是必然存在的,常用的代理服务是 网关服务。微服务的各个服务是没有状态的,需要通过统一的入口(代理服务)经过权限的校验、请求的过滤(非法请求、SQL注入等),然后请求具体的服务。聚合设计模式聚合设计模式常用于 报表服务,在微服务系统中报表服务是肯定存在的。链条设计模式聚合链条设计模式数据共享设计模式后台管理系统..._微服务架构 6种设计模式

High5的SCAU第二周个人排位赛赛后感想_晁棠的博客-程序员宅基地

只能说,对自己越来越没信心,罚坐时间越来越长。打OI赛制的话还是再去把对拍记住吧,毕竟如果不记对拍,可能会觉得自己完全A掉了所有题。话说最近OI赛制的数据真的有点难受,一组数据要全对才能拿到那一组数据的分数。我有一题是每组数据错一点,然后零分。而且感觉自己没有上周那么充实了,整个周末的学习状态也没上周那么好。想逼紧一下自己吧,从小学到现在没有说为了什么而去拼命努力过。大学了,有点想尝尝那种拼命努力获得成果的喜悦或者是竹篮打水的失落。奋斗起来吧,总有人在你看不见的地方努力着。...

微信小程序text组件和view组件不换行-程序员宅基地

在开发过程中,遇到了text组件和view组件在全英文或中英混合输入时(全中文时正常)不换行的情况,即使添加了宽度后也不起作用。解决方法:view,text{ word-break: break-all;}复制代码该样式的作用是允许在单词间换行,问题解决了。Tips&Bugs:该样式可能会出现断开单词的情况,如将‘break’分解为‘br’和‘eak’放在两行显示,对此尚...

通俗地讲,Netty 能做什么?_netty可以实现websocket,还可以实现什么-程序员宅基地

文章来源: https://www.zhihu.com/question/24322387 作者:知乎用户 链接:https://www.zhihu.com/question/24322387/answer/282001188 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作为一个学Java的,如果没有研究过Netty,那..._netty可以实现websocket,还可以实现什么

随便推点

No valid entries or contents found,this is not a valid OOXLM(office open xml)-程序员宅基地

该类参入问题,参数参考如下:MockMultipartFile file = new MockMultipartFile(“file”,filename,“application/sql”,new FileInputStream(“d:\abc\.a.xlsx”));

APUE读书笔记——文件和目录-程序员宅基地

一、stat、fstat、lstat函数#includeint stat(const char *restrict pathname, struct stat*restrict buf);int fstat(int filedes, struct stat *buf);int lstat(const char *restrict pathname, struct stat*rest

我的世界java安装_我的世界游戏安装教程 我的世界怎么安装_氧化三氢正离子的博客-程序员宅基地

最近陆续有许多玩家来反馈下载之后不知道如何安装我的世界,所以小编特地总结了下大家的问题,以我的世界1.8.0版本为例为大家写一篇完整的安装教程,希望能解决大家的疑问。【下载游戏】下载游戏部分我们就不多说了,附上下载地址:【安装教程】第一步:下载完成后解压安装包第二步:打开解压出来的文件夹,找到我的世界启动器双击打开(一般是.exe文件,各个版本里都会有这个文件,图标长相可能不一样,玩家在文件夹里找...

JZOJ100045 【NOIP2017提高A组模拟7.13】好数-程序员宅基地

题目题目大意首先有一个定义:对于一个数,如果和它互质的数可以组成一个等差数列,那么这个数叫“好数”。现在给你一个数列,有三种操作:1、询问一段区间内的好数的个数。2、将一段区间内的数分别模一个值。3、将某个数修改。思考历程先看看这个题目。好熟悉的题目啊!这不就是初中OJ上的某道数位DP的题吗?然后发现不是那一道题,松了一口气。一眼看下去,一定有什么数论。说不定在得到...

DB2实例和服务器管理_db2iupdt_new个星的博客-程序员宅基地

1.列出系统中的实例目录,命令是:db2ilist2.创建一个新的实例,命令是:db2icrt-s用于指定实例的类型。client参数用于创建IBM数据服务器客户机的一个实例。此类型是IBM数据服务器客户机产品和DB2 Conntect个人版的默认实例类型。-p用于指定实例概要文件路径。-u用于指定DB2服务的账户名和密码。(创建ese实例时需要此选项)-h用于覆盖默认TCP/IP主机名(如果当前机器有多个TCP/IP主机名。在创建默认节点(节点0)时,将使用该TCP/IP主机名_db2iupdt

BP神经网络matlab实现_matlab中logsig函数-程序员宅基地

BP网络里采用的传递函数有:logsig(),tansig(),purelin();BP神经网络训练函数1. traingd:批梯度下降训练函数,沿网络性能参数的负梯度方向调整网络的权值和阈值.2. traingdm:动量批梯度下降函数,也是一种批处理的前馈神经网络训练方法,不但具有更快的收敛速度,而且引入了一个动量项,有效避免了局部最小问题在网络训练中出现.3. trai_matlab中logsig函数