1. 程式人生 > >設定驅動程式開機啟動

設定驅動程式開機啟動

開發驅動程式時,每次都用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
0x00000002

A service started automatically by the service control manager during system startup. For more information, seeAutomatically Starting Services.

SERVICE_BOOT_START
0x00000000

A device driver started by the system loader. This value is valid only for driver services.

SERVICE_DEMAND_START
0x00000003

A service started by the service control manager when a process calls the StartServicefunction. For more information, see Starting Services on Demand.

SERVICE_DISABLED
0x00000004

A service that cannot be started. Attempts to start the service result in the error code ERROR_SERVICE_DISABLED.

SERVICE_SYSTEM_START
0x00000001

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,但是在呼叫該函式的時候卻執行出錯了,不解,哪位高人給指點一下啊!

下面是微軟給的一個說明: