windows 9系统,九章 编程

  windows 9系统,九章 编程

  文章目录前言一、Windows服务的概念和管理1.1 管理窗子服务sc.exe管理Windows操作系统操作系统服务1.2 服务控制器二、Windows服务编程2.1 与持有国家证书的助产士建立连接OpenSCManager 2.2创建服务创建服务2.5完整创建Windows操作系统操作系统服务前言一、Windows服务的概念和管理1.1 管理窗子服务打开Windows操作系统操作系统服务管理器窗口

  快捷键命令:

  services.mscsc.exe管理Windows操作系统操作系统服务南卡罗来纳州服务器[命令][服务名称]选项一选项2.

  1.2 服务控制器服务控制器(服务控制管理器,SCM)是窗子操作系统家族操作系统中的一个系统进程,它可以启动、停止Windows操作系统操作系统服务,并与Windows操作系统操作系统服务交流。

  服务控制器对应的可执行文件是%SystemRoot%\services.exe,它以Windows操作系统操作系统控制台程序的形式运行。在系统启动时,由Wininit进程加载。

  持有国家证书的助产士的主函数是SvcCtrlMain(),它将加载被配置为自动启动的服务列表。

  Windows操作系统操作系统服务的信息保存在注册表的如下位置中:

  HKEY _ LOCAL _ MACHINE \ SYSTEM \ current control set \ Services二、Windows服务编程在开发工具程序中,可以对Windows操作系统操作系统服务进行控制,例如:

  创建服务启动服务停止服务查询服务的状态枚举服务列表等2.1 与持有国家证书的助产士建立连接要在程序中访问Windows操作系统操作系统服务,首先需要与服务控制器(供应链管理)建立连接。

  OpenSCManagerSC _ HANDLE OpenSCManager(

  【在,可选] LPCSTR lpMachineName,

  【在,可选] LPCSTR lpDatabaseName,

  [in]DWORD dwdesireddaccess

  );lpMachineName:目标计算机的名称。如果指针是空或空字符串,函数连接到本地计算机上的服务控制管理器。

  lpDatabaseName:服务控制管理器数据库的名称。这个参数应该设置为服务_活动_数据库。如果是空,

  服务_活动_数据库数据库默认打开。

  dwDesiredAccess:对服务的访问控制管理。

  相关权限查看访问

  2.2 创建服务创建服务调用创建服务()函数可以创建一个服务对象,并将其添加到数据库中,函数原型如下:

  SC_HANDLE创建服务(

  [in] SC_HANDLE hSCManager,

  [in] LPCSTR lpServiceName,

  【在,可选] LPCSTR lpDisplayName,

  [in]DWORD dwdesireddaccess,

  [in] DWORD dwServiceType,

  [in] DWORD dwStartType,

  [in] DWORD dwErrorControl,

  【在,可选] LPCSTR lpBinaryPathName,

  【在,可选] LPCSTR lpLoadOrderGroup,

  【出去,可选] LPDWORD lpdwTagId,

  【在,可选] LPCSTR lpDependencies,

  【在,可选] LPCSTR lpServiceStartName,

  【在,可选] LPCSTR lpPassword

  );2.5 完整创建Windows操作系统操作系统服务https://份文件。微软。com/en-us/windows/win32/services/SVC-CPP

  #包含windows.h

  #包含查尔. h

  #包含strsafe.h

  #杂注注释(lib, advapi32.lib )

  #定义服务名称文本(服务名称)

  服务状态gSvcStatus

  SERVICE _ STATUS _ HANDLE gSvcStatusHandle;

  句柄ghSvcStopEvent=NULL

  VOID SvcInstall(VOID);

  VOID WINAPI SvcCtrlHandler(DWORD);

  VOID WINAPI SvcMain(DWORD,LPTSTR *);

  VOID ReportSvcStatus(DWORD,DWORD,DWORD);

  VOID SvcInit(DWORD,LPTSTR *);

  VOID SvcReportEvent(LPCTSTR);

  #定义SVC_ERROR -11

  //int __cdecl _tmain(int argc,TCHAR* argv[])

  //{

  ////如果命令行参数为“安装”,则安装该服务。

  ////否则,服务可能正在由持有国家证书的助产士启动。

  //

  //if (lstrcmpi(argv[1],TEXT( install )==0)

  //{

  //SvcInstall();

  //返回0;

  //}

  //TCHAR SVC名称[]=SVC名称;

  ////待办事项:将进程的任何附加服务添加到此表中。

  //SERVICE _ TABLE _ ENTRY调度表[]=

  //{

  //{ svcname,(LP service _ MAIN _ FUNCTION)SVC MAIN },

  //{ NULL,NULL }

  //};

  //

  ////当服务停止时,此调用返回。

  ////当调用返回时,进程应该简单地终止。

  //

  //如果(!StartServiceCtrlDispatcher(调度表))

  //{

  //SvcReportEvent(TEXT( StartServiceCtrlDispatcher ));

  //}

  //返回0;

  //}

  VOID SvcInstall()

  {

  SC _ HANDLE schSCManager

  SC _ HANDLE schService

  TCHAR深圳路径[MAX _ PATH];

  如果(!GetModuleFileName(NULL,szPath,MAX_PATH))

  {

  printf(无法安装服务(%d)\n ,GetLastError());

  返回;

  }

  //获取持有国家证书的助产士数据库的句柄。

  schSCManager=OpenSCManager(

  空,//本地计算机

  空,//服务活动数据库

  SC _ MANAGER _ ALL _ ACCESS);//完全访问权限

  if (NULL==schSCManager)

  {

  printf(OpenSCManager失败(%d)\n ,GetLastError());

  返回;

  }

  //创建服务

  schService=CreateService(

  schSCManager,//SCM数据库

  服务名称,//服务名称

  SVCNAME,//要显示的服务名称

  SERVICE_ALL_ACCESS,//期望的访问

  SERVICE_WIN32_OWN_PROCESS,//服务类型

  服务需求启动,//启动类型

  服务错误正常,//错误控制类型

  szPath,//服务二进制文件路径

  空,//无加载顺序组

  空,//没有标记标识符

  空,//没有依赖关系

  NULL,//LocalSystem帐户

  NULL);//没有密码

  if (schService==NULL)

  {

  printf(CreateService失败(%d)\n ,GetLastError());

  CloseServiceHandle(schsc管理器);

  返回;

  }

  else printf(服务安装成功\ n’);

  CloseServiceHandle(sch服务);

  CloseServiceHandle(schsc管理器);

  }

  VOID WINAPI SvcMain(DWORD dwArgc,LPTSTR* lpszArgv)

  {

  //注册服务的处理函数

  gSvcStatusHandle=RegisterServiceCtrlHandler(

  SVCNAME,

  SvcCtrlHandler);

  如果(!gSvcStatusHandle)

  {

  SvcReportEvent(TEXT( registerservicectrl handler ));

  返回;

  }

  //这些服务状态成员保持此处设置的状态

  gsvc状态。dwservicetype=SERVICE _ WIN32 _ OWN _ PROCESS;

  gsvc状态。dwservicespecificexitcode=0;

  //向持有国家证书的助产士报告初始状态

  ReportSvcStatus(服务启动挂起,无错误,3000);

  //执行特定于服务的初始化和工作。

  SvcInit(dwArgc,lpszArgv);

  }

  VOID SvcInit(DWORD dwArgc,LPTSTR* lpszArgv)

  {

  //TO_DO:声明并设置任何必需的变量。

  //确保定期调用ReportSvcStatus()

  //服务启动挂起。如果初始化失败,调用

  //带有服务_已停止的报告状态.

  //创建一个事件。控制处理函数SvcCtrlHandler,

  //当接收到停止控制代码时发出此事件的信号。

  ghSvcStopEvent=CreateEvent(

  空,//默认安全属性

  真,//手动重置事件

  FALSE,//无信号

  NULL);//没有名字

  if (ghSvcStopEvent==NULL)

  {

  ReportSvcStatus(服务停止,无错误,0);

  返回;

  }

  //初始化完成时报告运行状态。

  ReportSvcStatus(SERVICE _ RUNNING,NO_ERROR,0);

  //TO_DO:执行工作直到服务停止。

  while (1)

  {

  //检查是否停止服务。

  WaitForSingleObject(ghSvcStopEvent,INFINITE);

  ReportSvcStatus(服务停止,无错误,0);

  返回;

  }

  }

  VOID ReportSvcStatus(DWORD dwCurrentState,

  DWORD dwWin32ExitCode,

  DWORD dwWaitHint)

  {

  静态DWORD dw检查点=1;

  //填写服务状态结构。

  gsvc状态。dwCurrentState=dwCurrentState

  gsvc状态。dw win 32退出代码=dw win 32退出代码;

  gsvc状态。dwWaitHint=dwWaitHint

  if(dwCurrentState==SERVICE _ START _ PENDING)

  gsvc状态。dwcontrolsaccepted=0;

  否则gsvc状态。dwcontrolsaccepted=SERVICE _ ACCEPT _ STOP;

  if((dwCurrentState==SERVICE _ RUNNING)

  (dwCurrentState==SERVICE _ STOPPED))

  gsvc状态。dw检查点=0;

  否则gsvc状态。dw检查点=dw检查点;

  //向持有国家证书的助产士报告服务的状态。

  SetServiceStatus(gSvcStatusHandle,gSvcStatus);

  }

  VOID WINAPI SvcCtrlHandler(DWORD dw ctrl)

  {

  //处理请求的控制代码。

  开关(dwCtrl)

  {

  案例服务_控制_停止:

  ReportSvcStatus(SERVICE _ STOP _ PENDING,NO_ERROR,0);

  //通知服务停止。

  SetEvent(ghSvcStopEvent);

  ReportSvcStatus(gsvc状态。dwcurrentstate,NO_ERROR,0);

  返回;

  案例服务_控制_询问:

  打破;

  默认值:

  打破;

  }

  }

  VOID SvcReportEvent(LPCTSTR SZ函数)

  {

  处理hEventSource

  LPCTSTR lpsz字符串[2];

  通用字符缓冲区[80];

  hEventSource=RegisterEventSource(NULL,SVCNAME);

  if (NULL!=hEventSource)

  {

  stringchprintf(Buffer,80,TEXT(%s以%d 失败)、szFunction、GetLastError());

  lpsz strings[0]=SVCNAME;

  lpsz strings[1]=缓冲区;

  ReportEvent(hEventSource,//事件日志句柄

  事件日志错误类型,//事件类型

  0,//事件类别

  SVC_ERROR,//事件标识符

  空,//没有安全标识符

  2,lpszStrings数组的大小

  0,//没有二进制数据

  lpszStrings,//字符串数组

  NULL);//没有二进制数据

  注销事件源(hEventSource);

  }

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: