編寫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...