#include < Ntifs.h>
#pragma warning(disable:4995)
#pragma comment(lib, "Ntoskrnl.lib") #pragma warning(disable:4995)
typedef struct _Device_Extension_
{
KTIMER timer;
LARGE_INTEGER liDueTime;
KDPC dpc;
}DevExt; VOID CustomDpc(
__in struct _KDPC *Dpc,
__in_opt PVOID DeferredContext,
__in_opt PVOID SystemArgument1,
__in_opt PVOID SystemArgument2)
{
DevExt *pDevExt = (DevExt*)DeferredContext;
KdPrint(("定时器中..")); //重新设置定时器
KeSetTimer(&pDevExt->timer, pDevExt->liDueTime, &pDevExt->dpc);
} NTSTATUS MyDispatchClose(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp)
{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
} VOID MyUnload(__in PDRIVER_OBJECT DriverObject)
{
UNICODE_STRING strSymbolLink = RTL_CONSTANT_STRING(L"\\DosDevices\\Test"); DevExt *pDevExt = (DevExt *)DriverObject->DeviceObject->DeviceExtension;
KeCancelTimer(&pDevExt->timer); IoDeleteSymbolicLink(&strSymbolLink);
IoDeleteDevice(DriverObject->DeviceObject);
KdPrint(("卸载设备成功"));
} NTSTATUS DriverEntry(__in PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath)
{
PDEVICE_OBJECT DeviceObject;
ULONG i = 0;
UNICODE_STRING strDeviceName = RTL_CONSTANT_STRING(L"\\Device\\Test_Driver");
UNICODE_STRING strSymbolLink = RTL_CONSTANT_STRING(L"\\DosDevices\\Test");
NTSTATUS status;
DevExt *pDevExt = NULL; DriverObject->MajorFunction[IRP_MJ_CREATE] =
DriverObject->MajorFunction[IRP_MJ_CLOSE] = MyDispatchClose; DriverObject->DriverUnload = MyUnload; status = IoCreateDevice(DriverObject, sizeof(DevExt), &strDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &DeviceObject);
if (status != STATUS_SUCCESS){
return status;
}
DeviceObject->Flags |= DO_BUFFERED_IO; IoCreateSymbolicLink(&strSymbolLink, &strDeviceName); DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; pDevExt = (DevExt*)DeviceObject->DeviceExtension; //初始化定时器
KeInitializeTimer(&pDevExt->timer);
//初始化DPC
KeInitializeDpc(&pDevExt->dpc,(PKDEFERRED_ROUTINE)CustomDpc, pDevExt); //设置定时时间为3s
pDevExt->liDueTime = RtlConvertLongToLargeInteger(-30000000); //启动定时器
KeSetTimer(&pDevExt->timer,pDevExt->liDueTime,&pDevExt->dpc); return STATUS_SUCCESS;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

windows driver 定时器的使用的更多相关文章

  1. 驱动开发利器Microsoft Windows Driver Kit 7.1.0下载

    在Windows 2000 与Windows XP 系统采用是WINDDK来开发WINDOWS驱动程序,我手头也有WINDDK,可是从Windows Vista开始之后,一般采用Microsoft W ...

  2. 微软职位内部推荐-SDE2 (Windows driver)

    微软近期Open的职位: SDE2 (Windows driver) Job title: Software Development Engineer 2 Location: Shanghai, Ch ...

  3. 和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧。因为,很多PCI的例子都是对S5933,就连微软出版的《Programming the Microsoft Windows Driver Model》都提供了一个完整的S5933的例子。 在这篇有关DDK的开发论文里。

    和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧.因为,很多PCI的例子都是对S5933,就连微软出版的<Programming the Microsoft Wi ...

  4. Windows高速定时器,多媒体定时器winmm.dll库的使用

    项目里面用到的这些看起来名字高大上的定时器测试下来也是非常不准.看了源码发现也是用System.Timers.Timer或者用的是Thread休眠的方式来实现的.100毫秒就不准了.直到一番搜索,发现 ...

  5. Windows SDK DDK WDK (Windows Driver Kit) 区别

    首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WIN ...

  6. Windows Driver Kit Version 7.1.0 ( 也就是 7600.16385.1 ) 下载地址

    Windows Driver Kit Version 7.1.0 ( 也就是 7600.16385.1 ) 下载地址 http://download.microsoft.com/download/4/ ...

  7. 11 Windows编程——定时器

    周期性的发送WWL_TIMER消息的一个东西,这个周期可以由程序员自己设定.设定周期的数是SetTimer,停止定时器消息发送的函数是:Killximer: 定时器消息的特点: 1.不准确(也就是说, ...

  8. windows driver 简单的驱动和通信

    sysmain.c #pragma once #pragma warning(disable: 4100) #include <ntifs.h> #include <ntddk.h& ...

  9. Windows Driver Frameworks

    MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff557565(v=vs.85).aspx

随机推荐

  1. PHP 获取header 的自定义参数值

    $.ajax({ type: "GET", url: "default.aspx", beforeSend: function(request) { reque ...

  2. Flask与Django哪个更好更实用呢?砖家是这么认为的

        这一周我打算做一个 Flask 教程.本文先把 Flask 和 Django 做一个比对,因为我对这两个 Python Web 框架都有实际的开发经验.希望我可以帮助您选择学习哪个框架,因为学 ...

  3. Springboot项目的接口防刷(实例)

    技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: import java.lang.annotation.Retention; import java.lang.a ...

  4. win10安装mysql过程&&链接过程&&备份和导入数据&&grant命令

    win10安装mysql过程&&链接过程&&备份和导入数据&&grant命令   一 .安装 一开始在mysql官网(https://www.mysql ...

  5. push 和 append 以及appendchild 用法和区别

    push() 给数组添加元素,并且返回数组长度 如 : arr.push('a') append() 是jq写法,添加节点到指定父级节点的子节点列表末尾 appendchild() 是append原生 ...

  6. Day6 - K - 陌上花开 HYSBZ - 3262

    有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美丽,当且仅Sa>= ...

  7. linux 下office软件推荐

    概述 最近想使用LINUX下搭建服务器,所以查找一些需要用的软件. linux下最好的office解决办法 其实因为我是不怎么使用office的,我也不知道不同office有什么不一样,直到有一次写奖 ...

  8. JVM:垃圾回收

    概述 上一篇文章我们已经了解了 Java 的这几块内存区域.对于垃圾回收来说,针对或者关注的是 Java 堆这块区域.因为对于程序计数器.栈.本地方法栈来说,他们随线程而生,随线程而灭,所以这个区域的 ...

  9. php 获取时间段

    switch ($type){ case 'day'://当日 $end=date(,,,date(,date('Y'))); $where=' and '.$pre.'create_time> ...

  10. hashCode() 和 equals()的问题解答及重写示范

    本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equa ...