登錄檔自舉
什麼是登錄檔自舉?它在系統中的作用是什麼?
n登錄檔自舉是由裝置管理器(device.exe)在系統啟動時載入的。
n登錄檔自舉時,通過讀取登錄檔來尋找系統中的新裝置。設定新裝置的登錄檔資訊應當是在安裝驅動程式時,即installdriver入口中設定到登錄檔中去的。
n實現為regenum.dll動態鏈結庫。
n實現將**存放在wince400\public\common\oak\drivers\regenum目錄下。
登錄檔自舉是裝置驅動載入中的一部分。在系統啟動時,初始化裝置管理器完畢後,裝置管理器將進入裝置驅動載入階段,在這個階段的早期將進行登錄檔自舉,這個過程在登錄檔中不斷尋找新的裝置驅動(未載入,但是需要被載入的裝置驅動)載入。登錄檔自舉是可以重入的,通過軟體函式呼叫可以重新進行登錄檔自舉。
下面以乙個例子來分析登錄檔自舉的具體過程:
[hkey_local_machine\drivers]
"rootkey"="drivers\\builtin"
"dll"="regenum.dll「
[hkey_local_machine\drivers\builtin]
"dll"="regenum.dll"
[hklm\drivers\ builtin \pci]
"dll"="pcibus.dll"
"order"=dword:4
"flags"=dword:1
[hkey_local_machine\drivers\builtin\virtual]]
"order"=dword:0
"flags"=dword:0
"dll"="regenum.dll"
[hkey_local_machine\drivers\builtin\virtual \ndis]
"dll"="ndis.dll"
"order"=dword:1
"prefix"="nds"
1.在device.exe進入登錄檔自舉階段,檢查hklm\drivers\rootkey指向的子鍵。在這個例子中,rootkey的值被設定成drivers\\builtin,一般預設為drivers。
2.在hkey_local_machine\drivers\builtin子鍵中檢查dll項的值,這裡被設定成regenum.dll,也就是登錄檔自舉模組,然後載入這個dll。
3.將hkey_local_machine\drivers\builtin作為引數傳遞給regenum的init函式。注意,init函式不是乙個流式介面,regenum只檢查鍵下的一級子鍵中有無dll需要載入,至於二級以下的子鍵,則必須遞迴呼叫regenum。
4.init函式在hklm\drivers\rootkey鍵下基於「order」值的順序進行檢查。逐個檢查每個入口載入,為它們初始化驅動程式。在此,hklm\drivers\rootkey下有兩個子鍵:[hklm\drivers\builtin\pci]和[hkey_local_machine\drivers\builtin\virtual],其中,[hklm\drivers\builtin\pci]的order的值為4,而[hkey_local_machine\drivers\builtin\virtual]]的order值為0,因此regenum將優先檢查[hkey_local_machine\drivers\builtin\virtual]。
5.regenum進入[hkey_local_machine\drivers\builtin\virtual]子鍵進行檢查,發現此子鍵下的dll項值為regenum.dll,則說明要遞迴使用regenum檢查其下的子鍵。這裡為[hkey_local_machine\drivers\builtin\virtual\ndis],其order項值為1,並且沒有其他子鍵與其競爭載入順序,所以它將被[hkey_local_machine\drivers\builtin\virtual]下的regenum.dll載入。[hkey_local_machine\drivers\builtin\virtual \ndis]下的dll項值為ndis.dll,因此ndis驅動被載入。
6.完成[hkey_local_machine\drivers\builtin\virtual]下一級子鍵的檢查後,[hkey_local_machine\drivers\builtin]下的regenum.dll將檢查[hklm\drivers\ builtin \pci]子鍵下的dll,這裡為pcibus.dll,因此pci驅動被載入。
通過以上步驟這個例子中的登錄檔自舉完成。
在登錄檔自舉的過程中,子鍵有表1中所示的各種形式:
表1子鍵的形式子鍵
型別描述
order
dword
最小的order值將優先被載入
dllszchar
定義了要讓登錄檔自舉程式載入的驅動的dll名,這個名稱也將被寫入activedevice。只有dll項是必須被設定的,如果order項沒有被設定,那麼該驅動將在所有設定了order項的驅動被載入後載入
index
dword
同類裝置驅動的例項被載入時可以通過不同的索引號來區分。如com0:com1:,索引的取值範圍從0到9,如果沒有指定索引值,那麼系統將會自動指定乙個
flags
dword
描述登錄檔自舉的預設操作。flags的值是一系列位,他們將描述activatedevice的行為。如果不需要這個項的話,可以將其設定為0。位3~23為保留位,必須設定成0,登錄檔自舉時可以使用位23~31來設定
表2是對flag各個位功能的描述:
表2flag各個位功能
flag
值功能描述
devflags_none
0x00000000
沒有任何功能定義
devflags_unload
0x00000001
在呼叫驅動程式***_init入口後,解除安裝驅動程式
devflags_loadlibrary
0x00000002
使用loadlibrary函式來載入驅動,而不是loaddriver
devflags_noload
0x00000004
不載入dll
登錄檔自舉
什麼是登錄檔自舉?它在系統中的作用是什麼?n 登錄檔自舉是由裝置管理器 device.exe 在系統啟動時載入的。n 登錄檔自舉時,通過讀取登錄檔來尋找系統中的新裝置。設定新裝置的登錄檔資訊應當是在安裝驅動程式時,即 installdriver 入口中設定到登錄檔中去的。n 實現為regenum.d...
windows登錄檔 登錄檔的認識
登錄檔的特點 1.登錄檔允許對硬體 系統引數 應用程式和裝置驅動程式進行跟蹤配置,這使得修改某些設定後不用重新啟動成為可能。2.登錄檔中登入的硬體部分資料可以支援高版本的即插即用特性。當windows檢測到機器上的新裝置時,就把有關資料儲存到登錄檔中,另外,還可以避免新裝置與原有裝置之間的資源衝突。...
監視登錄檔,,列舉登錄檔項
建立登錄檔項 lret regopenkeyex hkey current user,t software hrjd ascpatch 0,key all access,hkey if lret error success waifainfo info lret regsetvalueex hkey...