服務(wù)程序框架

服務(wù)程序框架

ID:41032104

大小:32.00 KB

頁(yè)數(shù):4頁(yè)

時(shí)間:2019-08-14

服務(wù)程序框架_第1頁(yè)
服務(wù)程序框架_第2頁(yè)
服務(wù)程序框架_第3頁(yè)
服務(wù)程序框架_第4頁(yè)
資源描述:

《服務(wù)程序框架》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、1.什么是服務(wù)?它的特征是什么?  在NT/2000中,服務(wù)是一類(lèi)受到操作系統(tǒng)優(yōu)待的程序。一個(gè)服務(wù)首先是一個(gè)Win32可執(zhí)行程序,如果要寫(xiě)一個(gè)功能完備且強(qiáng)大的服務(wù),需要熟悉動(dòng)態(tài)連接庫(kù)(Dlls)、結(jié)構(gòu)異常處理、內(nèi)存映射文件、虛擬內(nèi)存、設(shè)備I/O、線(xiàn)程及其同步、Unicode以及其他的由WinAPI函數(shù)提供的應(yīng)用接口。簡(jiǎn)單的也可以只建立一個(gè)可以安裝、運(yùn)行、啟動(dòng)、停止的沒(méi)有任何其他功能的服務(wù).第二要知道的是一個(gè)服務(wù)決不需要用戶(hù)界面。大多數(shù)的服務(wù)將運(yùn)行在那些被鎖在某些黑暗的,冬暖夏涼的小屋子里的強(qiáng)大的服務(wù)器上面,即使有用戶(hù)界面一般也沒(méi)有人可以看到。如果服

2、務(wù)提供任何用戶(hù)界面如消息框,那么用戶(hù)錯(cuò)過(guò)這些消息的可能性就極高了,所以服務(wù)程序通常以控制臺(tái)程序的形式被編寫(xiě),進(jìn)入點(diǎn)函數(shù)是main()而不是WinMain()?! ?,服務(wù)的安全性…  想要寫(xiě)一個(gè)服務(wù),就必須熟悉WinNT/2000的安全機(jī)制,在上述操作系統(tǒng)之中,所有安全都是基于用戶(hù)的。換句話(huà)說(shuō)——進(jìn)程、線(xiàn)程、文件、注冊(cè)表鍵、信號(hào)、事件等等等等都屬于一個(gè)用戶(hù)。當(dāng)一個(gè)進(jìn)程被產(chǎn)生的時(shí)候,它都是執(zhí)行在一個(gè)用戶(hù)的上下文(context),這個(gè)用戶(hù)帳號(hào)可能在本機(jī),也可能在網(wǎng)絡(luò)中的其他機(jī)器上,或者是在一個(gè)特殊的賬號(hào):SystemAccount——即系統(tǒng)帳號(hào)的上下

3、文  如果一個(gè)進(jìn)程正在一個(gè)用戶(hù)帳號(hào)下執(zhí)行,那么這個(gè)進(jìn)程就同時(shí)擁有這個(gè)用戶(hù)所能擁有的一切訪(fǎng)問(wèn)權(quán)限,不論是在本機(jī)還是網(wǎng)絡(luò)。系統(tǒng)帳號(hào)則是一個(gè)特殊的賬號(hào),它用來(lái)標(biāo)識(shí)系統(tǒng)本身,而且運(yùn)行在這個(gè)帳號(hào)下的任何進(jìn)程都擁有系統(tǒng)上的所有訪(fǎng)問(wèn)權(quán)限,但是系統(tǒng)帳號(hào)不能在域上使用,無(wú)法訪(fǎng)問(wèn)網(wǎng)絡(luò)資源…3,務(wù)的三個(gè)組成部分  一個(gè)服務(wù)由三部分組成,第一部分是ServiceControlManager(SCM)。每個(gè)WindowsNT/2000系統(tǒng)都有一個(gè)SCM,SCM存在于Service.exe中,在Windows啟動(dòng)的時(shí)候會(huì)自動(dòng)運(yùn)行,伴隨著操作系統(tǒng)的啟動(dòng)和關(guān)閉而產(chǎn)生和終止。這個(gè)進(jìn)

4、程以系統(tǒng)特權(quán)運(yùn)行,并且提供一個(gè)統(tǒng)一的、安全的手段去控制服務(wù)。它其實(shí)是一個(gè)RPCServer,因此我們可以遠(yuǎn)程安裝和管理服務(wù),不過(guò)這不在本文討論的范圍之內(nèi)。SCM包含一個(gè)儲(chǔ)存著已安裝的服務(wù)和驅(qū)動(dòng)程序的信息的數(shù)據(jù)庫(kù),通過(guò)SCM可以統(tǒng)一的、安全的管理這些信息,因此一個(gè)服務(wù)程序的安裝過(guò)程就是將自身的信息寫(xiě)入這個(gè)數(shù)據(jù)庫(kù)。第二部分就是服務(wù)本身。一個(gè)服務(wù)擁有能從SCM收到信號(hào)和命令所必需的的特殊代碼,并且能夠在處理后將它的狀態(tài)回傳給SCM。  第三部分也就是最后一部分,是一個(gè)ServiceControlDispatcher(SCP)。它是一個(gè)擁有用戶(hù)界面,允許用

5、戶(hù)開(kāi)始、停止、暫停、繼續(xù),并且控制一個(gè)或多個(gè)安裝在計(jì)算機(jī)上服務(wù)的Win32應(yīng)用程序。SCP的作用是與SCM通訊,Windows2000管理工具中的“服務(wù)”就是一個(gè)典型的SCP。4.怎樣開(kāi)始設(shè)計(jì)服務(wù)  還記得前面我提到服務(wù)程序的入口點(diǎn)函數(shù)一般都是main()嗎?一個(gè)服務(wù)擁有很重要的三個(gè)函數(shù),第一個(gè)就是入口點(diǎn)函數(shù),其實(shí)用WinMain()作為入口點(diǎn)函數(shù)也不是不可以,雖然說(shuō)服務(wù)不應(yīng)該有用戶(hù)界面,但是其實(shí)存在很少的幾個(gè)例外,這就是下面圖中的選項(xiàng)存在的原因?! ∮捎谝陀脩?hù)桌面進(jìn)行信息交互,服務(wù)程序有時(shí)會(huì)以WinMain()作為入口點(diǎn)函數(shù)。  入口函數(shù)負(fù)責(zé)初

6、始化整個(gè)進(jìn)程,由這個(gè)進(jìn)程中的主線(xiàn)程來(lái)執(zhí)行。這意味著它應(yīng)用于這個(gè)可執(zhí)行文件中的所有服務(wù)。要知道,一個(gè)可執(zhí)行文件中能夠包含多個(gè)服務(wù)以使得執(zhí)行更加有效。主進(jìn)程通知SCM在可執(zhí)行文件中含有幾個(gè)服務(wù),并且給出每一個(gè)服務(wù)的ServiceMain回調(diào)(CallBack)函數(shù)的地址。一旦在可執(zhí)行文件內(nèi)的所有服務(wù)都已經(jīng)停止運(yùn)行,主線(xiàn)程就在進(jìn)程終止前對(duì)整個(gè)進(jìn)程進(jìn)行清除?! 〉诙€(gè)很重要的函數(shù)就是ServiceMain,我看過(guò)一些例子程序里面對(duì)自己的服務(wù)的進(jìn)入點(diǎn)函數(shù)都固定命名為ServiceMain,其實(shí)并沒(méi)有規(guī)定過(guò)一定要那樣命名,任何的函數(shù)只要符合下列的形式都可以作為

7、服務(wù)的進(jìn)入點(diǎn)函數(shù)。VOIDWINAPIServiceMain(DWORDdwArgc,//參數(shù)個(gè)數(shù)LPTSTR*lpszArgv//參數(shù)串);  這個(gè)函數(shù)由操作系統(tǒng)調(diào)用,并執(zhí)行能完成服務(wù)的代碼。一個(gè)專(zhuān)用的線(xiàn)程執(zhí)行每一個(gè)服務(wù)的ServiceMain函數(shù),注意是服務(wù)而不是服務(wù)程序,這是因?yàn)槊總€(gè)服務(wù)也都擁有與自己唯一對(duì)應(yīng)的ServiceMain函數(shù),關(guān)于這一點(diǎn)可以用“管理工具”里的“服務(wù)”去察看Win2000里面自帶的服務(wù),就會(huì)發(fā)現(xiàn)其實(shí)很多服務(wù)都是由service.exe單獨(dú)提供的。當(dāng)主線(xiàn)程調(diào)用Win32函數(shù)StartServiceCtrlDispatc

8、her的時(shí)候,SCM為這個(gè)進(jìn)程中的每一個(gè)服務(wù)產(chǎn)生一個(gè)線(xiàn)程。這些線(xiàn)程中的每一個(gè)都和它的相應(yīng)的服務(wù)的ServiceMain函數(shù)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。