西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → 驱动学习之LIST_ENTRY和DPC定时器

驱动学习之LIST_ENTRY和DPC定时器

相关软件相关文章发表评论 来源:程序人生时间:2012/1/9 13:51:24字体大小:A-A+

作者:代码疯子点击:165次评论:0次标签: 驱动

  • 类型:U 盘工具大小:601KB语言:中文 评分:8.2
  • 标签:
立即下载

链表的使用
链表是驱动开发中经常遇到的一个数据结构,主要是双向循环链表;要使用链表,需要用到一个LIST_ENTRY的结构,其定义如下:

typedef struct _LIST_ENTRY {
    struct _LIST_ENTRY  *Flink;    // 指向下一个节点
    struct _LIST_ENTRY  *Blink;    // 指向前一个节点
} LIST_ENTRY, *PLIST_ENTRY;
在实际的编程中,我们需要自己定义链表的节点,并把节点的第一个成员设置为LIST_ENTRY类型的变量(不一定放在第一位,但通常是这样);此外,我们还需要一个LIST_ENTRY类型的链表头;其他的就靠下面的函数或者宏来操作了:

InitializeListHead,初始化链表头
IsListEmpty,判断链表是否为空
InsertHeadList,从链表头部插入节点
InsertTailList,从链表尾部插入节点
RemoveHeadList,从链表头部删除节点
RemoveTailList,从链表尾部删除节点
CONTAINING_RECORD,从RemoveHeadList或者RemoveTailList返回的数据获取一个指向删除节点的指针

示例代码:

 typedef struct _LIST_NODE
{
 LIST_ENTRY ListEntry;
 ULONG ulData;
} LIST_NODE, *PLIST_NODE;
 
VOID LinkListTest()
{
 LIST_ENTRY listHead;
 PLIST_NODE pListNode = NULL;
 ULONG i = 0;
 
 InitializeListHead(&listHead);
 DebugPrint(("Begin insert to link list\r\n"));
 for (i = 0; i < 10; ++i)
 {
  pListNode = (PLIST_NODE)
   ExAllocatePool(PagedPool, sizeof(LIST_NODE));
  pListNode->ulData = i;
  InsertHeadList(&listHead, &pListNode->ListEntry);
 }
 
 DebugPrint(("Begin remove from link list\r\n"));
 while (!IsListEmpty(&listHead))
 {
  PLIST_ENTRY pEntry = RemoveTailList(&listHead);
  pListNode = CONTAINING_RECORD(pEntry,
         LIST_NODE,
         ListEntry);
  DebugPrint(("Delete Node's Value: %d\r\n", pListNode->ulData));
  ExFreePool(pListNode);
 }
}

DPC定时器的使用
DPC定时器可以对任意间隔时间进行定时,DPC定时器内部使用定时器对象KTIMER,当对定时器设定一个时间间隔后,每隔这段时间操作系统就会将一个DPC例程插入DPC队列,当操作系统读取DPC队列时,对应的DPC例程被执行。在DPC定时器需要用到的一些函数:

KeInitializeTimer,初始化定时器对象
KeInitializeDpc,初始化DPC对象
KeSetTimer,开启定时器
KeCancelTimer,取消定时器
在调用KeSetTimer之后,只会触发一次DPC例程。如果想周期触发DPC例程,需要在DPC例程触发后,再次调用KeSetTimer。示例代码可以参考《Windows驱动开发技术详解》一书。

    usb驱动
    (15)usb驱动
    接口作为电脑很重要的一个端口没有驱动的话是没法工作的,特别是笔记本电脑外接键盘鼠标都需要用到接口,不过有时候我们会遇到主板的驱动程序光盘中没有提供驱动,这时候我们就需要根据自己的型号找到对应的驱动程序。当然我们可以下载万能驱动,可以支持大部分的设备。西西为大家收集了一些设备的驱动程序,大家可以根据自己的需要下载。...更多>>
    万能显卡
    (240)万能显卡
    万能显卡驱动适用于所有显卡安装驱动所用,称之为万能显卡驱动。显卡驱动是硬件所对应的软件,你装电脑时那帮你装电脑的人不是给了你很多碟子的吗,那些就是驱动程序,其中必然有一张是显卡的驱动程序。先要确定你的显卡什么牌子型号的,如果记不得了,就打开机箱看那个竖插在主板上的较大板子一般显卡有很大的散热片或风扇上的型号品牌。如果是集成的显卡在主板上看不到前面说的那样的电路板,就看主板上的型号品牌,记下来。但是...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)