登錄檔自舉

2021-06-07 07:49:01 字數 3040 閱讀 6656

登錄檔自舉

什麼是登錄檔自舉?它在系統中的作用是什麼?

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...