西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識 → 驅動學習之LIST_ENTRY和DPC定時器

驅動學習之LIST_ENTRY和DPC定時器

相關軟件相關文章發(fā)表評論 來源:程序人生時間:2012/1/9 13:51:24字體大。A-A+

作者:代碼瘋子點擊:165次評論:0次標簽: 驅動

  • 類型:U 盤工具大小:601KB語言:中文 評分:8.2
  • 標簽:
立即下載

鏈表的使用
鏈表是驅動開發(fā)中經(jīng)常遇到的一個數(shù)據(jù)結構,主要是雙向循環(huán)鏈表;要使用鏈表,需要用到一個LIST_ENTRY的結構,其定義如下:

typedef struct _LIST_ENTRY {
    struct _LIST_ENTRY  *Flink;    // 指向下一個節(jié)點
    struct _LIST_ENTRY  *Blink;    // 指向前一個節(jié)點
} LIST_ENTRY, *PLIST_ENTRY;
在實際的編程中,我們需要自己定義鏈表的節(jié)點,并把節(jié)點的第一個成員設置為LIST_ENTRY類型的變量(不一定放在第一位,但通常是這樣);此外,我們還需要一個LIST_ENTRY類型的鏈表頭;其他的就靠下面的函數(shù)或者宏來操作了:

InitializeListHead,初始化鏈表頭
IsListEmpty,判斷鏈表是否為空
InsertHeadList,從鏈表頭部插入節(jié)點
InsertTailList,從鏈表尾部插入節(jié)點
RemoveHeadList,從鏈表頭部刪除節(jié)點
RemoveTailList,從鏈表尾部刪除節(jié)點
CONTAINING_RECORD,從RemoveHeadList或者RemoveTailList返回的數(shù)據(jù)獲取一個指向刪除節(jié)點的指針

示例代碼:

 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定時器內(nèi)部使用定時器對象KTIMER,當對定時器設定一個時間間隔后,每隔這段時間操作系統(tǒng)就會將一個DPC例程插入DPC隊列,當操作系統(tǒng)讀取DPC隊列時,對應的DPC例程被執(zhí)行。在DPC定時器需要用到的一些函數(shù):

KeInitializeTimer,初始化定時器對象
KeInitializeDpc,初始化DPC對象
KeSetTimer,開啟定時器
KeCancelTimer,取消定時器
在調(diào)用KeSetTimer之后,只會觸發(fā)一次DPC例程。如果想周期觸發(fā)DPC例程,需要在DPC例程觸發(fā)后,再次調(diào)用KeSetTimer。示例代碼可以參考《Windows驅動開發(fā)技術詳解》一書。

    usb驅動
    (15)usb驅動
    接口作為電腦很重要的一個端口沒有驅動的話是沒法工作的,特別是筆記本電腦外接鍵盤鼠標都需要用到接口,不過有時候我們會遇到主板的驅動程序光盤中沒有提供驅動,這時候我們就需要根據(jù)自己的型號找到對應的驅動程序。當然我們可以下載萬能驅動,可以支持大部分的設備。西西為大家收集了一些設備的驅動程序,大家可以根據(jù)自己的需要下載。...更多>>
    • 萬能USB2.0驅動V6.22 安裝版

      09-27 / 1010KB

      推薦理由:其實現(xiàn)在大部分的系統(tǒng)都是封裝的XP SP2,SP3 ghost系統(tǒng),一般都帶有USB2.0萬能驅動,以及主板,顯卡,聲卡的
    • USB攝像頭萬能驅動器2011.3官方版

      11-04 / 18.1M

      推薦理由: 攝像頭驅動大全(包括了常見的驅動、是裝機人員必備驅動盤)特別推薦的萬能攝像頭驅動適合絕大多少的攝
    • usb藍牙適配器萬能驅動免費版

      06-25 / 40M

      推薦理由:這款是最新免費版的usb藍牙適配器萬能通用驅動程序 Widcomm 5.0.1.801blt drive版。它可以驅動基本上所有藍
    • usb轉串口萬能驅動免費版

      04-10 / 3.0M

      推薦理由: 本軟件是USB轉串口的驅動程序,帶串口的筆記本現(xiàn)在貌似都挺貴的,提供LINUX,蘋果,WINDOWS操作系統(tǒng)的
    • 手機usb萬能驅動V1.0 安裝版

      12-08 / 362KB

      推薦理由:手機usb萬能驅動下載的適用產(chǎn)品 ·諾基亞 N70 ·諾基亞 3230 ·索尼愛立信 W810c ·索尼愛立信 K750c ·諾基
    • 瑞薩萬能USB 3.0驅動程序

      02-17 / 8.7M

      推薦理由:Renesas Electronics USB 3.0 Host Controller Driver 是一款是由瑞薩網(wǎng)絡提供的USB 3.0驅動程序,是一款非
    萬能顯卡
    (240)萬能顯卡
    萬能顯卡驅動適用于所有顯卡安裝驅動所用,稱之為萬能顯卡驅動。顯卡驅動是硬件所對應的軟件,你裝電腦時那幫你裝電腦的人不是給了你很多碟子的嗎,那些就是驅動程序,其中必然有一張是顯卡的驅動程序。先要確定你的顯卡什么牌子型號的,如果記不得了,就打開機箱看那個豎插在主板上的較大板子一般顯卡有很大的散熱片或風扇上的型號品牌。如果是集成的顯卡在主板上看不到前面說的那樣的電路板,就看主板上的型號品牌,記下來。但是...更多>>

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)