C++中的C++代碼真的這么復(fù)雜嗎
下面著重講述學(xué)習(xí)C++時碰到的C++代碼編程的相關(guān)問題,以及如何進(jìn)行編制C++代碼的技巧,如何更好的進(jìn)行C++代碼編制,掌握了C++代碼編制問題就等于說是整個軟件開發(fā)周期少了不少彎路,降低工作的復(fù)雜性。
- void main()
 - {
 - SERVICE_TABLE_ENTRY ServiceTable[2];
 - ServiceTable[0].lpServiceName = "Name";//線程名字
 - ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;//線程入口地址
 - ServiceTable[1].lpServiceName = NULL;
 - ServiceTable[1].lpServiceProc = NULL;//最后一個必須為NULL
 - StartServiceCtrlDispatcher(ServiceTable);// 啟動服務(wù)的控制分派機(jī)線程
 - }
 
對于Service程序來說,它一般又由以下四部分組成:main(),ServiceMain()和Handler()當(dāng)然還有我們的功能實現(xiàn)函數(shù)比如MyWork()它們之間的關(guān)系,用一個簡單的圖示就可以了然。
其服務(wù)程序的基本流程就是由main()調(diào)用ServiceMain()而由ServiceMain()調(diào)用Handler()和執(zhí)行功能函數(shù)MyWork()到現(xiàn)在為止,你以經(jīng)大體了解了服務(wù)程序的流程,按上面的流程一步一步來實現(xiàn)這個后門程序。
1.程序的入口main()函數(shù)
服務(wù)程序的入口與普通程序一樣也是從main()開始,但不同的是服務(wù)程序的main極為簡單,因為它只負(fù)責(zé)創(chuàng)建分派表并啟動控制分派機(jī),其C++代碼如下:
- void main()
 - {
 - SERVICE_TABLE_ENTRY ServiceTable[2];
 - ServiceTable[0].lpServiceName = "Name";//線程名字
 - ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;//線程入口地址
 - ServiceTable[1].lpServiceName = NULL;
 - ServiceTable[1].lpServiceProc = NULL;//最后一個必須為NULL
 - StartServiceCtrlDispatcher(ServiceTable);// 啟動服務(wù)的控制分派機(jī)線程
 - }
 
2. 服務(wù)的真正入口ServiceMain()
ServiceMain()是Service程序的真正入口點,它主要完成以下功能,首先注冊一個Handler去處理控制程序或控制面板,Service的控制要求,比如 啟動,停止,暫停重起等,其次就是實現(xiàn)我們的功能操作,其實現(xiàn)C++代碼如下:
- VOID WINAPI ServiceMain( DWORD dwArgc, LPTSTR *lpszArgv )
 - {
 - DWORD status = 0;
 - DWORD specificError = 0xfffffff;
 - ServiceStatus.dwServiceType = SERVICE_WIN32;
 - ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
 - ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
 - ServiceStatus.dwWin32ExitCode = 0;
 - ServiceStatus.dwServiceSpecificExitCode = 0;
 - ServiceStatus.dwCheckPoint = 0;
 - ServiceStatus.dwWaitHint = 0;
 - //調(diào)用RegisterServiceCtrlHandler()注冊一個ServiceHandler函數(shù)用來處理程序?qū)ervice的控制要求
 - hStatus = RegisterServiceCtrlHandler("ServiceName",(LPHANDLER_FUNCTION)ServiceHandler);
 - if (hStatus==0)
 - return;
 - // Handle error condition
 - status = GetLastError();
 - if (status!=NO_ERROR)
 - {
 - ServiceStatus.dwCurrentState = SERVICE_STOPPED;
 - ServiceStatus.dwCheckPoint = 0;
 - ServiceStatus.dwWaitHint = 0;
 - ServiceStatus.dwWin32ExitCode = status;
 - ServiceStatus.dwServiceSpecificExitCode = specificError;
 - SetServiceStatus(hStatus, &ServiceStatus);
 - return;
 - }
 - // Initialization complete - report running status
 - ServiceStatus.dwCurrentState = SERVICE_RUNNING;
 - ServiceStatus.dwCheckPoint = 0;
 - ServiceStatus.dwWaitHint = 0;
 - SetServiceStatus(hStatus, &ServiceStatus);
 - //啟動自己的工作線程
 - HANDLE hThread=CreateThread(NULL,0,mainfun,NULL,0,NULL);
 - if(hThread==NULL)
 - return;
 - }
 
【編輯推薦】















 
 
 

 
 
 
 