摘要:本文主要向大家介绍了C/C++知识点之win0环下面的相关定时器,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之win0环下面的相关定时器,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
0环通常来说有俩种:
IO定时器
IoInitializeTimer 初始化一个IO计时器
IoStartTimer 启动IO计时器
IoStopTimer 停止IO计时器
#include <ntifs.h>
KEVENT g_kEvent;
VOID DriverUnload(PDRIVER_OBJECT pDriver);
VOID TimerProc(
DEVICE_OBJECT *DeviceObject,
PVOID Context
)
{
UNREFERENCED_PARAMETER(DeviceObject);
static ULONG i = 0;
i++;
KdPrint(("外部传入的是%d ,内部变化:%d\n", Context, i));
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pPath)
{
UNREFERENCED_PARAMETER(pPath);
DbgBreakPoint();
//初始化一些变量
PDEVICE_OBJECT pDevice = NULL;
UNICODE_STRING strDeviceName;
RtlInitUnicodeString(&strDeviceName, L"\\Device\\Hello");
//1 创建一个设备
IoCreateDevice(
pDriver, //驱动对象指针
0, //设备扩展大小,传0
&strDeviceName, //设备名称
FILE_DEVICE_UNKNOWN,//设备类型
0, //设备特征
FALSE, //设备是否独占
&pDevice //传出创建好的设备指针
);
// 初始化一个IO计时器
IoInitializeTimer(
pDevice,
TimerProc,
(PVOID)100
);
//启动IO计时器
IoStartTimer(pDevice);
pDriver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
VOID DriverUnload(PDRIVER_OBJECT pDriver)
{
UNREFERENCED_PARAMETER(pDriver);
//停止IO计时器
IoStopTimer(pDriver->DeviceObject);
IoDeleteDevice(pDriver->DeviceObject);
}
DPC定时器
KelnitializeTimer 初始化一个定时器对象
KelnitializeDpc 初始化一个DPC对象
KeSetTimer 启动定时器
需要初始化一个定时器对象和一个DPC对象,之后在启动定时器处设置一个时间间隔(注意正负数)时间到了就会调用与DPC关联的回调函数。
注意:
KeSetTimer 只会触发一次调用。想要再次触发,需要在DPC触发后。再调用KeSetTimer
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号