日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

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

      驅(qū)動學(xué)習(xí)之LIST_ENTRY和DPC定時器

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

      作者:代碼瘋子點擊:165次評論:0次標(biāo)簽: 驅(qū)動

      • 類型:U 盤工具大。601KB語言:中文 評分:8.2
      • 標(biāo)簽:
      立即下載

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

      typedef struct _LIST_ENTRY {
          struct _LIST_ENTRY  *Flink;    // 指向下一個節(jié)點
          struct _LIST_ENTRY  *Blink;    // 指向前一個節(jié)點
      } LIST_ENTRY, *PLIST_ENTRY;
      在實際的編程中,我們需要自己定義鏈表的節(jié)點,并把節(jié)點的第一個成員設(shè)置為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,當(dāng)對定時器設(shè)定一個時間間隔后,每隔這段時間操作系統(tǒng)就會將一個DPC例程插入DPC隊列,當(dāng)操作系統(tǒng)讀取DPC隊列時,對應(yīng)的DPC例程被執(zhí)行。在DPC定時器需要用到的一些函數(shù):

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

        usb驅(qū)動
        (15)usb驅(qū)動
        接口作為電腦很重要的一個端口沒有驅(qū)動的話是沒法工作的,特別是筆記本電腦外接鍵盤鼠標(biāo)都需要用到接口,不過有時候我們會遇到主板的驅(qū)動程序光盤中沒有提供驅(qū)動,這時候我們就需要根據(jù)自己的型號找到對應(yīng)的驅(qū)動程序。當(dāng)然我們可以下載萬能驅(qū)動,可以支持大部分的設(shè)備。西西為大家收集了一些設(shè)備的驅(qū)動程序,大家可以根據(jù)自己的需要下載。...更多>>
        萬能顯卡
        (240)萬能顯卡
        萬能顯卡驅(qū)動適用于所有顯卡安裝驅(qū)動所用,稱之為萬能顯卡驅(qū)動。顯卡驅(qū)動是硬件所對應(yīng)的軟件,你裝電腦時那幫你裝電腦的人不是給了你很多碟子的嗎,那些就是驅(qū)動程序,其中必然有一張是顯卡的驅(qū)動程序。先要確定你的顯卡什么牌子型號的,如果記不得了,就打開機箱看那個豎插在主板上的較大板子一般顯卡有很大的散熱片或風(fēng)扇上的型號品牌。如果是集成的顯卡在主板上看不到前面說的那樣的電路板,就看主板上的型號品牌,記下來。但是...更多>>

        相關(guān)評論

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

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

        熱門評論

        最新評論

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

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