IoTimer的使用
来源:互联网 发布:java实现汽车租赁 编辑:程序博客网 时间:2024/05/29 17:41
IoTimer的使用
IoTimer是系统里面的时钟,比如说我们想要隔一段时间调用一次我们自己写的函数,那么我们就可以设置一个时钟(当然,也可以用DPC,可以参考我前两篇的博客),将所要调用函数和时钟关联,就可以实现自动调用。IoTimer和DPC不同的是,DPC可以自己设定时间,而IoTimer是一秒执行一次所关联的函数(当然,也可以想几秒调一次函数就几秒掉一次函数,下面的例子我是5秒调用一次,默认情况下是1秒调用1次)
步骤:1.创建一个设备对象
2.初始化一个时钟:IoInitializeTimer(DeviceObject, (PIO_TIMER_ROUTINE)TimerRoutine, NULL);
3.IoStartTimer(DeviceObject);//在这之后,例程每秒一次的被调用
4.卸载程序的时候要暂停时钟:IoStopTimer(DriverObject->DeviceObject);
5.卸载程序的时候要删除设备对象
注:同前面所讲的DPC一样,我下一篇会说如何通过其他程序移除我们这个程序的IoTimer
#pragma once#include <ntifs.h>#define DEVICE_NAME L"\\Device\\IoTimerInlineHookDeviceName"VOID TimerRoutine(_In_ struct DEVICE_OBJECT *DeviceObject,_In_opt_ PVOID Context);VOID DriverUnload(PDRIVER_OBJECT DriverObject);
#include"IoTimer.h"ULONG __v1 = 0;NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath){NTSTATUS Status = STATUS_UNSUCCESSFUL;UNICODE_STRING DeviceName;PDEVICE_OBJECT DeviceObject = NULL;DbgPrint("DriverEntry()\r\n");DriverObject->DriverUnload = DriverUnload;RtlInitUnicodeString(&DeviceName, DEVICE_NAME);//给设备对象起个名字Status = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &DeviceObject);//接受设备对象//为当前驱动对象创建设备对象if (!NT_SUCCESS(Status)){return Status;}IoInitializeTimer(DeviceObject, (PIO_TIMER_ROUTINE)TimerRoutine, NULL);IoStartTimer(DeviceObject);//在这之后,例程每秒一次的被调用return STATUS_SUCCESS;}VOID DriverUnload(PDRIVER_OBJECT DriverObject){PDEVICE_OBJECT DeviceObject = NULL;PDEVICE_OBJECT v1 = NULL;IoStopTimer(DriverObject->DeviceObject);DeviceObject = DriverObject->DeviceObject;v1 = DeviceObject;while (DeviceObject != NULL){v1 = DeviceObject->NextDevice;IoDeleteDevice(DeviceObject);DeviceObject = v1;}DbgPrint("ByeByeDriver\r\n");}//The driver's IoTimer routine is called at IRQL = DISPATCH_LEVEL and therefore must not contain pageable code.VOID TimerRoutine(_In_ struct DEVICE_OBJECT *DeviceObject,_In_opt_ PVOID Context){// 隔5秒调一次if (__v1 < 5){__v1++;return;}DbgPrint("TimerRoutine\r\n");__v1 = 0;}1 0
- IoTimer的使用
- GUID使用的使用
- ${}的使用
- 的使用
- @[],@()的使用
- ->的使用
- +、-、*、/、%的使用
- &&的使用
- %:的使用
- Makefile中使用$$的使用
- Makefile中使用$$的使用
- Red5的使用--使用日志
- prefernce的使用具体使用
- 【工具使用】git 的使用
- 关于使用AsyncTaskLoader的使用
- 使用CABasicAnimation的基本使用
- 使用RocketMQ的客户端使用
- gulp的使用基本使用
- halcon采集标定图像的规则
- Linux上安装ZooKeeper并设置开机启动(CentOS7+ZooKeeper3.4.10)
- [51nod 1538] 一道难题 -- 特征多项式,多项式取模
- 实现算法导论第三版中的MergeSort
- 《深入分析JavaWeb技术内幕》读书笔记八.Tomcat
- IoTimer的使用
- 带权并查集
- jsp+servlet实现增删改查,分页,批量删除
- springMVC实现文件上传
- Eclipse Java 注释模板设置 code templates
- Python 3基础教程3-数学运算
- PRVF-0002 : could not retrieve local node name
- Hadoop 2.x之HDFS利用QJM实现HA高可用
- 多线程总结