下面着重讲述学习C++时碰到的C++代码编程的相关问题,以及如何进行编制C++代码的技巧,如何更好的进行C++代码编制,掌握了C++代码编制问题就等于说是整个软件开发周期少了不少弯路,降低工作的复杂性。
创新互联是专业的桂东网站建设公司,桂东接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行桂东网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
- 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);// 启动服务的控制分派机线程
- }
对于Service程序来说,它一般又由以下四部分组成:main(),ServiceMain()和Handler()当然还有我们的功能实现函数比如MyWork()它们之间的关系,用一个简单的图示就可以了然。
其服务程序的基本流程就是由main()调用ServiceMain()而由ServiceMain()调用Handler()和执行功能函数MyWork()到现在为止,你以经大体了解了服务程序的流程,按上面的流程一步一步来实现这个后门程序。
1.程序的入口main()函数
服务程序的入口与普通程序一样也是从main()开始,但不同的是服务程序的main极为简单,因为它只负责创建分派表并启动控制分派机,其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);// 启动服务的控制分派机线程
- }
2. 服务的真正入口ServiceMain()
ServiceMain()是Service程序的真正入口点,它主要完成以下功能,首先注册一个Handler去处理控制程序或控制面板,Service的控制要求,比如 启动,停止,暂停重起等,其次就是实现我们的功能操作,其实现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;
- //调用RegisterServiceCtrlHandler()注册一个ServiceHandler函数用来处理程序对Service的控制要求
- 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;
- }
【编辑推荐】
分享名称:C++中的C++代码真的这么复杂吗
本文地址:http://www.mswzjz.cn/qtweb/news8/407908.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能