驅動學習 服務的基本操作

2021-10-12 01:31:17 字數 3647 閱讀 7226

服務的基本操作:1、註冊

​ 2、啟動

​ 3、暫停(核心驅動不支援)

​ 4、停止

​ 5、解除安裝

開發者----呼叫api-----》lpc(本地方法呼叫)------》服務管理器

服務管理器處理具體的要求

sc_handle winapi openscmanager(

lpctstr lpmachinename,

lpctstr lpdatabasename,

dword dwdesiredaccess

);

lpmachinename:字串常量,表示機器的名字,傳遞null時表示開啟的是本機器的服務管理器

lpdatabasename:字串常量,表示資料庫的名字,傳遞null表示開啟的是乙個活動(active)資料庫

dwdesiredaccess:dword型別的值,表示許可權。

返回值:sc_handle 的控制代碼,表示服務管理器的控制代碼。

不需要是呼叫:closeservicehandle函式關閉控制代碼

sc_handle winapi createservice(

sc_handle hscmanager,

lpctstr lpservicename,

lpctstr lpdisplayname,

dword dwdesiredaccess,

dword dwservicetype,

dword dwstarttype,

dword dwerrorcontrol,

lpctstr lpbinarypathname,

lpctstr lploadordergroup,

lpdword lpdwtagid,

lpctstr lpdependencies,

lpctstr lpservicestartname,

lpctstr lppassword

);

hscmanager:伺服器管理控制代碼

lpservicename:表示需要建立服務的名字,這個名字不能與其他存在服務的名字相同。服務名字是服務的唯一標識

lpdisplayname:服務的顯示名字

dwdesiredaccess:表示服務的許可權,用來指定註冊後服務的許可權

常見的許可權:service_start:擁有啟動服務的許可權

​ service_stop:擁有停止服務的許可權

​ service_query_status:擁有查詢服務狀態的許可權

​ service_all_access:擁有一切許可權

dwservicetype:表示需要建立何種型別的服務,服務的型別有

service_file_system_driver(檔案系統服務)

service_kernel_drivers(核心驅動服務)

service_win32_own_process(應用層服務)

service_win32_share_process(應用層共享exe服務)

對於註冊驅動型別服務,需要指定service_kernel_driver

dwstarttype:表示服務的啟動順序,這個啟動方式是以作業系統的啟動順序來劃分的,常見的有:

service_boot_start:作業系統引導階段啟動的服務,一般由winload模組負責載入服務對應的可執行檔案到記憶體

service_system_start:作業系統啟動階段啟動的服務,由系統nt模組負責載入服務對應的可執行檔案到記憶體

service_auto_start:作業系統啟動完畢後啟動的服務

service_demand_start:需要手動啟動的服務

dwerrorcontrol:表示錯誤控制,對於軟體驅動來說,簡單指定 service_error_ignore

lpbinarypathname:表示該服務對應可執行檔案的全路徑。

lploadoredergroup:伺服器所在分組的名字

lpdwtagid:表示服務在分組內的乙個標識

lpdependenices:表示當前所註冊的服務需要依賴其他服務名的列表

lpservicestartname:與lppassword表示當前以什麼使用者身份啟動服務,對於驅動型別的服務,簡單指定null即可。

sc_handle winapi openservice(

sc_handle hscmanager,

lpctstr lpservicename,

dword dwdesiredaccess

);

bool winapi startservice(

sc_handle hservice,

dword dwnumserviceargs,

lpctstr *lpservicear**ectors

);

hservice為服務的控制代碼,表示需要啟動的服務,後兩個引數對於核心驅動型別的服務來說,可以忽略

startservice函式內部通過服務管理器,讓系統system程序載入驅動並呼叫核心驅動driverentry入口函式。此外,startservice函式內部還會等待driverentry入口函式執行返回,獲取其返回值,如果driverentry返回成功(status_success),startservice相應的返回成功,否則返回失敗

bool winapi controlservice(

sc_handle hservice,

dword dwcontrol,

lpservice_status lpservicestatus

);

hservice為服務的控制代碼,表示需要操作的服務

dwcontrol為控制碼,表示需要對服務進行何種操作:

​ service_control_pause

​ service_control_stop

​ service_control_contunue

lpservicestatus引數是乙個返回引數,表示服務當前最新的狀態,這些狀態儲存在service_status結構體種。

bool winapi deleteservice(sc_handle hservice);
常見的操作:呼叫openservice函式,許可權設定為delete,開啟乙個需要刪除的服務,成功開啟後獲取到需要刪除的服務控制代碼,然後把服務控制代碼傳遞給deleteservices函式

UEFI概念龜速學習 服務和驅動

uefi用驅動的形式提供服務,因為只有驅動才能常駐記憶體 應用程式不行 這種驅動稱之為服務型驅動 驅動分2種,uefi驅動模型驅動 和 dxe驅動。服務採用dxe驅動的方式開發 服務的開發分3步 1.服務介面的設計 2.服務介面的實現 3.服務驅動入口函式中gbs installprotocolin...

Linux學習 服務管理

1 服務分類 服務管理內容 啟動 自啟動查詢已安裝的服務 rpm包安裝的服務 自啟動的chkconfig list 2345中如果是啟用,代表下次開機會自啟動 正在執行的服務ps aux 原始碼包安裝的服務 檢視服務的安裝位置,一般是 usr local 下 系統執行級別 配置檔案位於 etc in...

學習服務程式的編寫(作為服務及木馬的基礎)

服務 是指定系統功能的程式例程或程序。以便支援其他程式。尤其是底層程式。其實服務就是一種特殊的應用程式,他從服務啟動開始一直處於執行狀態。服務實在系統載入以後自動啟動的不需要登入。windows下的服務都遵循scm介面標準。他們會在登入系統是自動執行。服務能作為木馬的重要特性 可以被指定為自啟動 在...