C++中的C++代码真的这么复杂吗

开发 后端
对第一次接触到C++代码的用户和学者来说,了解C++代码的编制基础是非常重要的,那么就先说一下什么是C++语言,所谓C++语言:是一种使用非常广泛的计算机编程语言。

下面着重讲述学习C++时碰到的C++代码编程的相关问题,以及如何进行编制C++代码的技巧,如何更好的进行C++代码编制,掌握了C++代码编制问题就等于说是整个软件开发周期少了不少弯路,降低工作的复杂性。

  1. void main()  
  2. {  
  3.     SERVICE_TABLE_ENTRY ServiceTable[2];  
  4.     ServiceTable[0].lpServiceName = "Name";//线程名字  
  5.     ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;//线程入口地址  
  6.     ServiceTable[1].lpServiceName = NULL;  
  7.     ServiceTable[1].lpServiceProc = NULL;//最后一个必须为NULL  
  8.     StartServiceCtrlDispatcher(ServiceTable);// 启动服务的控制分派机线程  

对于Service程序来说,它一般又由以下四部分组成:main(),ServiceMain()和Handler()当然还有我们的功能实现函数比如MyWork()它们之间的关系,用一个简单的图示就可以了然。

其服务程序的基本流程就是由main()调用ServiceMain()而由ServiceMain()调用Handler()和执行功能函数MyWork()到现在为止,你以经大体了解了服务程序的流程,按上面的流程一步一步来实现这个后门程序。

1.程序的入口main()函数

服务程序的入口与普通程序一样也是从main()开始,但不同的是服务程序的main极为简单,因为它只负责创建分派表并启动控制分派机,其C++代码如下:

  1. void main()  
  2. {  
  3.     SERVICE_TABLE_ENTRY ServiceTable[2];  
  4.     ServiceTable[0].lpServiceName = "Name";//线程名字  
  5.     ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;//线程入口地址  
  6.     ServiceTable[1].lpServiceName = NULL;  
  7.     ServiceTable[1].lpServiceProc = NULL;//最后一个必须为NULL  
  8.     StartServiceCtrlDispatcher(ServiceTable);// 启动服务的控制分派机线程  

2. 服务的真正入口ServiceMain()

ServiceMain()是Service程序的真正入口点,它主要完成以下功能,首先注册一个Handler去处理控制程序或控制面板,Service的控制要求,比如 启动,停止,暂停重起等,其次就是实现我们的功能操作,其实现C++代码如下:

  1. VOID WINAPI ServiceMain( DWORD dwArgc, LPTSTR *lpszArgv )  
  2. {  
  3.     DWORD   status = 0;   
  4.     DWORD   specificError = 0xfffffff;   
  5.     ServiceStatus.dwServiceType        = SERVICE_WIN32;   
  6.     ServiceStatus.dwCurrentState       = SERVICE_START_PENDING;   
  7.     ServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;   
  8.     ServiceStatus.dwWin32ExitCode      = 0;   
  9.     ServiceStatus.dwServiceSpecificExitCode = 0;   
  10.     ServiceStatus.dwCheckPoint         = 0;   
  11.     ServiceStatus.dwWaitHint           = 0;   
  12.     //调用RegisterServiceCtrlHandler()注册一个ServiceHandler函数用来处理程序对Service的控制要求  
  13.     hStatus = RegisterServiceCtrlHandler("ServiceName",(LPHANDLER_FUNCTION)ServiceHandler);   
  14.     if (hStatus==0)   
  15.         return;   
  16.  
  17.     // Handle error condition   
  18.     status = GetLastError();   
  19.     if (status!=NO_ERROR)   
  20.     {   
  21.         ServiceStatus.dwCurrentState       = SERVICE_STOPPED;   
  22.         ServiceStatus.dwCheckPoint         = 0;   
  23.         ServiceStatus.dwWaitHint           = 0;   
  24.         ServiceStatus.dwWin32ExitCode      = status;   
  25.         ServiceStatus.dwServiceSpecificExitCode = specificError;   
  26.         SetServiceStatus(hStatus, &ServiceStatus);   
  27.         return;   
  28.     }   
  29.  
  30.     // Initialization complete - report running status   
  31.     ServiceStatus.dwCurrentState       = SERVICE_RUNNING;   
  32.     ServiceStatus.dwCheckPoint         = 0;   
  33.     ServiceStatus.dwWaitHint           = 0;    
  34.     SetServiceStatus(hStatus, &ServiceStatus);  
  35.  
  36.   //启动自己的工作线程  
  37.    HANDLE hThread=CreateThread(NULL,0,mainfun,NULL,0,NULL);  
  38.    if(hThread==NULL)  
  39.        return;  

【编辑推荐】

  1. 简介学习C++总结之谈
  2. C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法
责任编辑:chenqingxiang 来源: 深度
相关推荐

2010-01-20 17:23:03

C++编程语言

2010-01-20 10:14:53

C++程序

2010-01-21 14:07:14

CC++声明

2022-08-22 15:32:59

C++C代码

2010-01-26 09:24:53

C++语言

2010-01-15 16:45:35

C++语言

2010-01-14 10:34:02

C++语言

2010-01-22 16:10:12

C++ Builder

2010-01-21 09:34:57

C++语法

2010-01-27 16:05:06

C++堆栈

2010-01-14 13:24:49

CC++语言

2011-03-31 09:30:07

CC++声明

2010-01-25 10:25:19

C++变量

2010-01-28 16:31:54

C++类型

2010-01-20 10:19:55

C++数组

2010-01-27 17:16:52

C++构造函数

2010-01-21 13:33:44

C++基类

2020-08-21 13:20:36

C++If ElseLinux

2010-01-26 10:42:26

C++函数

2010-01-21 17:14:40

C++兼容
点赞
收藏

51CTO技术栈公众号