windows驅動載入順序

epluguo發表於2013-07-08

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 引數。

相關文章