windows驅動加載順序

CreateService的dwStartType 形參 有幾個選項值
SERVICE_BOOT_START SERVICE_AUTO_START SERVICE_SYSTEM_START  
我們一般都只用SERVICE_DEMAND_START
那麼其他幾個值的含義呢? 參考MSDN

windows驅動加載順序:
1. 判斷StartType,依次按SERVICE_BOOT_START(0),SERVICE_SYSTEM_START(1), SERVICE_AUTO_START(2)順序自動加載

如360的HookPort驅動 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\HookPort

其start鍵值爲0 即SERVICE_BOOT_START

2.如果是同一個start的類型則按GroupOder加載 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder


HookPort的 grouporder是Boot Bus Extender

3. 如果grouporder也相同,那麼按Tag值在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList列表裏面的順序加載


系統會根據tag值來排定加載順序

可以看到Hookport加載的時機是非常早的,這個時候文件系統還沒加載,系統只能訪問少數幾個路徑
所以驅動要放在%root%\system32\drivers\下
PS:Tag對驅動加載的順序只是微調

如果想做到驅動加載得比HookPort更早,那麼可以同樣設置驅動爲boot bus extender類型,同時在GroupOrderList添加一個tag id,或者直接在ServiceGroupOrder添加一個新組cogito,然後把驅動
設置爲cogito 類型,即更改CreateService的 lpLoadOrderGroup 參數。

發佈了28 篇原創文章 · 獲贊 27 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章