ActivateDeviceEx

ActivateDeviceEx

ActivateDeviceEx是指:n 由設備管理器,也就是Device.exe來載入設備驅動;n 註冊表枚舉時,用這個函式來讀取啟動時應當載入的驅動程式信息;n ActivateDeviceEx將使用註冊表中的Dll,Prefix,Index,FlagsActivateDevice也能用來載入設備驅動,其實它內部也是調用了ActivateDevice。

設備管理器是如何載入驅動程式的呢?這裡用到了一個重要的函式ActivateDeviceEx。

ActivateDeviceEx是指:

n 由設備管理器,也就是Device.exe來載入設備驅動;

n 註冊表枚舉時,用這個函式來讀取啟動時應當載入的驅動程式信息;

n ActivateDeviceEx將使用註冊表中的Dll,Prefix,Index,Flags項。

ActivateDevice也能用來載入設備驅動,其實它內部也是調用了ActivateDevice

Ex。ActivateDeviceEx函式的主要功能就是用來載入驅動程式,它讀取參數lpszDevKey中描述的註冊表鍵來獲取驅動程式的DLL名稱、設備名前綴和其他相關信息(包括IOCTL等),這個函式可以用來替代ActivateDevice和RegisterDevice。

還以powerbutton為例,下面是註冊表中它的相關內容。

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PM]

"Prefix"="PWR"

"Dll"="pm.dll"

"Order"=dword:0

"Ioctl"=dword:4

"Index"=dword:0

"IClass"=multi_sz:"{A32942B7-920C-486b-B0E6-92A702A99B35}"

根據以上信息可以看出,在載入驅動程式時,調用ActivateDeviceEx函式的步驟為:

(1)ActivateDeviceEx(“\\HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\PM”,…)

(2)ActivateDeviceEx函式將在\\HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\PM鍵下尋找DLL的名稱,在此也就是pm.dll,然後讀取設備名前綴PWR以及index:0和其他信息。這裡的index就是在前綴後面要添加上的序列號,如果是1,設備就是PWR1,它是用來妥善處理多重類似驅動設備在系統中被載入的情況。Index如果沒有定義,設備管理器將為其指定一個空閒的索引號。

(3)ActivateDeviceEx將把設備添加到已激活設備列表中去。這時,如果沒有定義index號,設備管理器必須指定一個空閒的索引號給設備,在添加完之後,設備管理器才將設備驅動載入到自己的進程上下文中。

下面是ActivateDeviceEx的函式原型:

HANDLE ActivateDeviceEx(

LPCWSTR lpszDevKey,

LPCVOID lpRegEnts,

DWORD cRegEnts,

LPVOID lpvParam

);

參數解釋:

lpszDevKey

字元串指針,指向註冊表中包含驅動信息的鍵,這個鍵應當包含驅動程式的DLL名、前綴、索引和入口點等信息。

lpRegEnts

指向REGINI結構體的數組,這個數組中定義了一些需要被添加到激活設備列表中的信息(ActivateDevice),這些信息填寫後,驅動程式才被載入。如果是匯流排驅動的話,這裡應該設定成NULL。

cRegEnts

lpRegEnts指向REGINI結構體的數組中元素的個數。

lpvParam

通過這個指針向已經載入的驅動程式傳遞參數,而不必將參數保留在註冊表中,這個參數將以第2參數的角色被傳遞到XXX_Init(Device Manager)函式入口中。

返回值

如果返回具體設備的句柄,則代表操作成功,否則為失敗。設備句柄可以在調DeactivateDevice函式的時候作為參數使用。

相關詞條

相關搜尋

熱門詞條

聯絡我們