設定驅動程式開機啟動
開發驅動程式時,每次都用INF檔案安裝再載入實在是很麻煩,就寫個程式來實現。
但是在實現驅動程式開機啟動時卻遇到了問題。
函式原型如下:
CreateService Function
Creates a service object and adds it to the specified service control manager database.
SC_HANDLE WINAPI CreateService( __in SC_HANDLE hSCManager, __in LPCTSTR lpServiceName, __in LPCTSTR lpDisplayName, __in DWORD dwDesiredAccess, __in DWORD dwServiceType, __in DWORD dwStartType, __in DWORD dwErrorControl, __in LPCTSTR lpBinaryPathName, __in LPCTSTR lpLoadOrderGroup, __out LPDWORD lpdwTagId, __in LPCTSTR lpDependencies, __in LPCTSTR lpServiceStartName, __in LPCTSTR lpPassword );
指定驅動程式何時啟動的引數是 dwStartType,
引數說明如下:
The service start options. This parameter can be one of the following values.
Value | Meaning |
---|---|
SERVICE_AUTO_START |
A service started automatically by the service control manager during system startup. For more information, seeAutomatically Starting Services. |
SERVICE_BOOT_START |
A device driver started by the system loader. This value is valid only for driver services. |
SERVICE_DEMAND_START |
A service started by the service control manager when a process calls the StartServicefunction. For more information, see Starting Services on Demand. |
SERVICE_DISABLED |
A service that cannot be started. Attempts to start the service result in the error code ERROR_SERVICE_DISABLED. |
SERVICE_SYSTEM_START |
A device driver started by the IoInitSystem function. This value is valid only for driver services. |
再具體點,SERVICE_BOOT_START 和 SERVICE_SYSTEM_START,通常用於配置載入裝置驅動程式的方式。
SERVICE_AUTO_START、SERVICE_DISABLED 和 SERVICE_DEMAND_START。對應的標準啟動型別:自動、禁用和手動,可以使用“計算機管理”管理工具中的“服務”進行配置。
更詳細的說明如下:
dwStartType 值分0、1、2、3、4,數值越小就越早啟動,SERVICE_BOOT_START(0)是核心剛剛初始化之後,此時載入的都是與系統核心有關的重要的驅動程式,例如磁碟驅動;SERVICE_SYSTEM_START(1)稍完一些;SERVICE_AUTO_START(2)是在登入介面出現的時候開始,如果登入較快,很可能驅動還沒有載入就登入進去了;SERVICE_DEMAND_START(3)是在需要的時候動態載入;SERVICE_DISABLED(4)是不載入,要載入之前必須把Start值改為小於4的值。
SERVICE_BOOT_START和SERVICE_SYSTEM_START啟動驅動程式時,登錄檔還沒有完全載入,只有HKEY_LOCAL_MACHINE\SYSTEM鍵可以訪問。
想當然的,就把dwStartType設定為SERVICE_AUTO_START,驅動程式安裝和載入都正常,但是我重啟後發現驅動程式並沒有像說明的那樣開機啟動。也不知道為什麼。
然後,我就試著把dwStartType設定為SERVICE_BOOT_START,但是在呼叫該函式的時候卻執行出錯了,不解,哪位高人給指點一下啊!
下面是微軟給的一個說明: