Windows NT與Windows 9x有一個非常重要的區別,即Windows NT提供了很多功能強大的Service(服務)。這些Service可以隨著NT的啟動而自啟動,也可以讓用戶通過控制面板啟動,還可以被Win32應用程序起停。甚至在沒有用戶登錄系統的情況下,這些Service也能執行。許多FTP、WWW服務器和數據庫就是以Service的形式存在於NT上,從而實現了無人值守。就連最新版的“黑客”程序Back 2000也是以Service形式在NT上藏身的。由於Service的編程較復雜,許多開發者想開發自己的Service但往往都望而卻步。鑒於此,下面我們就從頭到尾來構造一個全新的Service,讀者只要在程序中注明的地方加上自己的代碼,那麼就可以輕松擁有一個自己的Service。在編寫Service之前,先介紹一下幾個重要的函數:
1. SC_HANDLE OpenSCManager( LPCTSTR lpMachineName,
LPCTSTR lpDatabaseName, DWORD dwDesiredAccess)
OpenSCManager 函數打開指定計算機上的service control
manager database。其中參數lpMachineName指定計算機名,若為空則指定為本機。LpDatabaseName為指定要打開的service control manager database名, 默認為空。dwDesiredAccess指定操作的權限, 可以為下面取值之一:
SC_MANAGER_ALL_ACCESS //所有權限
SC_MANAGER_CONNECT //允許連接到service control manager database
SC_MANAGER_CREATE_SERVICE //允許創建服務對象並把它加入database
SC_MANAGER_ENUMERATE_SERVICE //允許枚舉database 中的Service
SC_MANAGER_LOCK //允許鎖住database
SC_MANAGER_QUERY_LOCK_STATUS //允許查詢database的封鎖信息
函數執行成功則返回一個指向service control manager