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