服務的基本操作: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介面標準。他們會在登入系統是自動執行。服務能作為木馬的重要特性 可以被指定為自啟動 在...