編寫NT服務

2021-07-30 05:29:02 字數 2545 閱讀 5591

編寫nt服務

先介紹一下什麼是nt服務,實際上就是乙個可以在系統啟動時自動在一定身份下啟動的,伴隨著系統長期存在的程序.

乙個nt服務有三部分構成:

1:service control manager(scm) 每個win nt/2k都有乙個scm,他存在於service.exe中.

2:服務本身 乙個服務擁有能從scm受到訊號和命令所必需的特殊**,並能夠在處理後將他的狀態返回scm.

3:service control dispatcher(scp) 他是乙個擁有使用者截面,允許使用者開始,暫停,繼續,並且控制已經安裝在計算機上作為服務執行的win32

應用程式

下面我們來看編寫乙個nt服務:(這是乙個服務框架,只要在他後面新增自己的後門**,那麼後門就可以實現服務方式啟動)

請大家對照注釋仔細研究!

#include #include service_status m_servicestatus;

service_status_handle m_servicestatushandle;

bool brunning=true;

void winapi servicemain(dword argc, lptstr *argv); //服務主函式

void winapi servicectrlhandler(dword opcode); //服務控制函式

void winapi cmdstart(void); //要啟動的程式函式

bool installservice(); //安裝服務的函式

bool deleteservice(); //刪除服務的函式

int main(int argc, char* argv)

if(strcmp(argv[1],"-install")==0) //安裝

else if(strcmp(argv[1],"-remove")==0) // 刪除

else

//在進入點函式裡面要完成servicemain的初始化,

//準確點說是初始化乙個service_table_entry結構陣列,

//這個結構記錄了這個服務程式裡面所包含的所有服務的名稱

//和服務的進入點函式

service_table_entry

dispatchtable=,};

//最後的null指明陣列的結束

startservicectrldispatcher(dispatchtable);

return 0;

}void winapi servicemain(dword argc, lptstr *argv)

void winapi servicectrlhandler(dword opcode) //服務控制函式

return;

}bool installservice() //安裝服務函式

lpctstr lpszbinarypathname=strdir;

schservice = createservice(schscmanager,"windowsmgr","windows manger control", //將服務的資訊新增到scm的資料庫

service_all_access,

service_win32_own_process, // 服務型別

service_auto_start, // 啟動型別

service_error_normal,

lpszbinarypathname, // 服務名

null,

null,

null,

null,

null);

if (schservice == null)

closeservicehandle(schservice);

return true;

}bool deleteservice()

hservice=openservice(schscmanager,"windowsmgr",service_all_access);

if (hservice == null)

if(deletefile(chsyspath)==0)

else printf("delete file ok!\n");

if(deleteservice(hservice)==0)

return false;

if(closeservicehandle(hservice)==0)

return false;

else

return true;

}void winapi cmdstart(void)

ps:可以在登錄檔中和服務管理器中檢視到服務,但是無法啟動;不知道原因在**。

編寫NT服務 (供大家學習 )

先介紹一下什麼是nt服務,實際上就是乙個可以在系統啟動時自動在一定身份下啟動的,伴隨著系統長期存在的程序.乙個nt服務有三部分構成 1 service control manager scm 每個win nt 2k都有乙個scm,他存在於service.exe中.2 服務本身 乙個服務擁有能從scm...

用DELPHI編寫NT服務時,如何指定依存關係?

q 我用delphi編寫了乙個nt的服務,且設定為自動啟動,可每次伺服器重啟後,該服務不能自動啟動。我感覺是由於該服務啟動時使用了sqlserver資料庫,可能由於sqlserver服務沒有啟動完成,導致該服務無法啟動,所以我想指定該服務的依存關係,讓它在sqlserver服務啟動完畢後再啟動,如何...

D7中編寫NT服務運算元據庫的簡單方法

2.file new other thread object 3.thread unit tpostmessage uses adodb,inifiles,activex procedure tpostmessage.writelog const logstr string var f textfi...