`
btq293kr
  • 浏览: 12675 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

CreateService

阅读更多

CreateService
2012年01月09日
   VB C# C++ F# JScript Copy SC_HANDLE CreateService( SC_HANDLE hSCManager, //服务控制管理程序维护的登记数据库的句柄,由系统函数OpenSCManager 返回 LPCTSTR lpServiceName, //以NULL 结尾的服务名,用于创建登记数据库中的关键字 LPCTSTR lpDisplayName, //以NULL 结尾的服务名,用于用户界面标识服务 DWORD dwDesiredAccess, //指定服务返回类型 DWORD dwServiceType, //指定服务类型 DWORD dwStartType, //指定何时启动服务 DWORD dwErrorControl, //指定服务启动失败的严重程度 LPCTSTR lpBinaryPathName, //指定服务程序二进制文件的路径 LPCTSTR lpLoadOrderGroup, //指定顺序装入的服务组名 LPDWORD lpdwTagId, //忽略,NULL LPCTSTR lpDependencies, //指定启动该服务前必须先启动的服务或服务组 LPCTSTR lpServiceStartName, //以NULL 结尾的字符串,指定服务帐号。如是NULL,则表示使用LocalSystem 帐号 LPCTSTR lpPassword //以NULL 结尾的字符串,指定对应的口令。为NULL表示无口令。但使用LocalSystem时填NULL ); 参数 hSCManager 服务控制管理器数据库的句柄。 此句柄由 OpenSCManager 函数返回,并且必须 具有 SC_MANAGER_CREATE_SERVICE 的访问权限。 有关更多的信息请参阅 Service 安全和访问权限。 lpServiceName 要安装该服务的名称。 最大字符串长度为 256 个字符。服务控制管理器数据库将保留在的字符的大小写,但是服务名称比较总是区分大小写。 正斜杠和一个反斜线不是有效的服务名称字符。 lpDisplayName[可选] 对被用户界面程序用来识别服务的显示名称。 此字符串具有最大长度为 256 个字符。 服务控制管理器中的情况下保留名称。 显示名称比较总是不区分大小写。 dwDesiredAccess 对服务的访问。 请求的访问之前,系统将检查调用进程的访问令牌。一个值列表请参阅服务安全和访问权限。 dwServiceType 服务类型。 此参数可以是下列值之一: 
  值 作用 
  SERVICE_ADAPTER
  0x00000004 保留 
  SERVICE_FILE_SYSTEM_DRIVER
  0x00000002 文件系统驱动服务程序 
  SERVICE_KERNEL_DRIVER
  0x00000001 驱动服务程序 
  SERVICE_RECOGNIZER_DRIVER
  0x00000008 保留 
  SERVICE_WIN32_OWN_PROCESS
  0x00000010 运行于独立进程的服务程序 
  SERVICE_WIN32_SHARE_PROCESS
  0x00000020 被多个进程共享的服务程序。查询Service Programs以获取更多信息。 
  若使用了SERVICE_WIN32_OWN_PROCESS 或 SERVICE_WIN32_SHARE_PROCESS且使用LocalSystem帐号来运行该服务程序,则还可以附加使用下面的值: 
  值 含义 
  SERVICE_INTERACTIVE_PROCESS
  0x00000100 该服务可以与桌面程序进行交互操作。
  查询Interactive Services以获取更多消息。 
  值 含义 
  SERVICE_AUTO_START
  0x00000002 系统启动时由服务控制管理器自动启动该服务程序。
  查询Automatically Starting Services以获取更多信息。 
  SERVICE_BOOT_START
  0x00000000 用于由系统加载器创建的设备驱动程序。
  只能用于驱动服务程序。 
  SERVICE_DEMAND_START
  0x00000003 用于当有进程调用StartService 函数时由服务控制管理器(SCM)启动的服务。
  查询Starting Services on Demand以获取更多信息。 
  SERVICE_DISABLED
  0x00000004 表示该服务不可启动。
  尝试启动该服务将产生一个ERROR_SERVICE_DISABLED错误。 
  SERVICE_SYSTEM_START
  0x00000001 用于由IoInitSystem 函数创建的设备驱动程序。
  只能用于驱动服务程序。 
  dwErrorControl 当该启动服务失败时产生错误的严重程度以及采取的保护措施。此参数可以是下列值之一: 
  值 含义 
  SERVICE_ERROR_CRITICAL
  0x00000003 服务启动程序将把该错误记录到事件日志中。
  若最后一次正确配置可用,服务启动程序将以最后一次正确配置重新启动;
  否则将退出执行。 
  SERVICE_ERROR_IGNORE
  0x00000000 服务启动程序将忽略该错误并返回继续执行。 
  SERVICE_ERROR_NORMAL
  0x00000001 服务启动程序将把该错误记录到事件日志中并返回继续执行。 
  SERVICE_ERROR_SEVERE
  0x00000002 服务启动程序将把该错误记录到事件日志中。
  若最后一次正确配置可用,服务启动程序将以最后一次正确配置重新启动;
  否则将返回继续执行。 
  lpBinaryPathName [可选] 服务程序二进制文件,完全限定路径。如果路径中包含空格它必须被引用,以便它正确的解析。例如"d:\myshare\myservice.exe"应指定为""d:\myshare\myservice.exe""。该路径也可以包含一个自动启动服务的参数。例如"d:\myshare\myservice.exe arg1 arg2"。 这些参数被传递给服务的入口点通常主要作用。 如果另一台计算机上指定一个路径,共享必须可以访问由本地计算机的计算机帐户,因为这是在远程调用中使用的安全上下文。但是,这项规定会影响本地计算机远程计算机中允许任何潜在的漏洞。 因此,最好使用一个本地文件。  lpLoadOrderGroup [可选] 在加载顺序此服务所属的组的名称。 指定 NULL 或空字符串,如果该服务不属于组。 启动程序使用加载顺序组加载服务相对于其他组的指定顺序组。加载顺序组列表包含在下面的注册表值:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Contr ol\ServiceGroupOrder] lpdwTagId[可选] 指向接收 lpLoadOrderGroup 参数中指定的组中唯一的标记值的变量。如果不更改现有的标签,请指定 NULL。订购服务启动一个加载顺序通过在以下注册表值中指定标记顺序矢量的组中,您可以使用的标记:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Contr ol\GroupOrderList]。标记只能用于具有 SERVICE_BOOT_START 或启动类型的 SERVICE_SYSTEM_START 驱动程序服务。  lpDependencies [可选] 空分隔名称的服务或加载顺序组系统必须在这个服务开始之前的双空终止数组的指针。 如果服务没有任何依赖关系,请指定为 NULL 或空字符串。一组依赖意味着如果至少一个组的成员运行后试图启动组的所有成员,可以运行此服务。当需要区分各服务由于服务和服务组共享相同的命名空间前缀与 SC_GROUP_IDENTIFIER 的组名时必须加上此参数。 lpServiceStartName [可选] 该服务应在其下运行的帐户的名称。如果SERVICE_WIN32_OWN_PROCESS 服务类型 DomainNameUserName 窗体中使用一个帐户名。服务进程将被作为此用户登录。 如果该帐户属于内置域,您可以指定.UserName。 如果为 NULL 此参数 CreateService 使用 LocalSystem 帐户。 如果服务类型指定 SERVICE_INTERACTIVE_PROCESS,该服务必须运行在 LocalSystem 帐户。 如果 NT AUTHORITYLocalService 此参数 CreateService 使用 LocalService 帐户。 如果 NT AUTHORITYNetworkService 参数 CreateService 使用 NetworkService 帐户。 共享的处理可以运行于任何用户。 如果服务类型 SERVICE_KERNEL_DRIVER 或 SERVICE_FILE_SYSTEM_DRIVER 名称是系统用来加载设备驱动程序的驱动程序对象名称。 如果该驱动程序将使用由 IO 系统创建的默认对象名称,请指定 NULL。 可以将服务配置为使用一个托管的帐户或虚拟帐户。 如果该服务被配置为使用一个托管的服务帐户,名称是托管的服务帐户名称。如果该服务被配置为使用一个虚拟帐户,作为 NT SERVICEServiceName 指定名称。有关托管的服务帐户和虚拟帐户的详细信息请参阅服务帐户的分步指南。 Windows Server 2008、 Windows Vista、 Windows Server 2003 和 Windows XP2000: Windows 7 和 Windows Server 2008 R2 之前不支持托管的服务帐户和虚拟帐户。 lpPassword [in, optional] 由 lpServiceStartName 参数指定的帐户名的密码。 如果该帐户没有密码,或者如果在 LocalService,NetworkService 或 LocalSystem 帐户中运行该服务,请指定一个空字符串。 更多的信息请参阅服务记录列表。 如果托管的服务帐户或虚拟帐户名称的名称由 lpServiceStartName 参数指定的帐户名称 lpPassword 参数必须为 NULL。 密码将被忽略,对驱动程序服务。 返回值 如果函数成功,返回值将是该服务的句柄。 如果函数失败,则返回值为 NULL。 若要扩展的错误了解调用 GetLastError。 下面的错误代码可以由服务控制管理器设置。 其他错误代码可以设置的由服务控制管理器调用注册表函数。 
  返回值 描述 
  ERROR_ACCESS_DENIED 提供的hSCManager参数没有SC_MANAGER_CREATE_SERVICE权限。 
  ERROR_CIRCULAR_DEPENDENCY 存在循环嵌套的服务依赖关系。 
  ERROR_DUPLICATE_SERVICE_NAME 显示名称已在SCM中被其他服务注册为服务名称或显示名称。 
  ERROR_INVALID_HANDLE 提供的hSCManager参数无效。 
  ERROR_INVALID_NAME 提供的服务名称无效。 
  ERROR_INVALID_PARAMETER 其他参数无效。 
  ERROR_INVALID_SERVICE_ACCOUNT 由lpServiceStartName参数指定的用户名不存在。 
  ERROR_SERVICE_EXISTS 已存在完全相同的服务。 
  CreateService函数创建一个服务对象并将其安装在SCM数据库中,同时在注册表以下位置中创建同名键值:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servi ces]CreateServiceChangeServiceConfigChangeServiceConfig2 等函数创建服务时提供的服务相关信息就存放于这个键值中。以下是一些键值的描述: 
  值 描述 
  DependOnGroup 由lpDependencies参数指定的依赖性服务群组,包含加载顺序。 
  DependOnService 由lpDependencies参数指定的依赖性服务。 
  Description ChangeServiceConfig2函数写入的描述信息。 
  DisplayName 由lpDisplayName参数指定的服务显示名称。 
  ErrorControl 由dwErrorControl参数指定的纠错方案。 
  FailureActions ChangeServiceConfig2函数写入的异常信息。 
  Group 由lpLoadOrderGroup参数指定的服务群组,包含加载顺序。
  (设置该值将有可能覆盖DependOnService的值。) 
  ImagePath 由lpBinaryPathName参数指定的服务程序文件位置。 
  ObjectName 由lpServiceStartName参数指定的名称。 
  Start 由dwStartType参数指定的服务启动时间。 
  Tag 由lpdwTagId参数指定的识别信息。 
  Type 由dwServiceType参数指定的服务类型。 
  服务安装程序可以创建子键来提供更多额外的信息。 CreateService函数返回的句柄只能由调用它的进程使用,可以调用CloseServiceHandle函数来关掉这个句柄。若创建进程共享服务,请不要随意调用可能影响其他进程的函数,如ExitProcess。另外,请不要卸载服务程序的动态链接库(DLL文件)。 
  搜索“如何安装服务程序”以查询一个示例。本页最下方包含一个Delphi示例。 
  [/b][b] SC_HANDLE CreateService( SC_HANDLE hSCManager, //服务控制管理程序维护的登记数据库的句柄,由系统函数OpenSCManager 返回 LPCTSTR lpServiceName, //以NULL 结尾的服务名,用于创建登记数据库中的关键字 LPCTSTR lpDisplayName, //以NULL 结尾的服务名,用于用户界面标识服务 DWORD dwDesiredAccess, //指定服务返回类型 DWORD dwServiceType, //指定服务类型 DWORD dwStartType, //指定何时启动服务 DWORD dwErrorControl, //指定服务启动失败的严重程度 LPCTSTR lpBinaryPathName, //指定服务程序二进制文件的路径 LPCTSTR lpLoadOrderGroup, //指定顺序装入的服务组名 LPDWORD lpdwTagId, //忽略,NULL LPCTSTR lpDependencies, //指定启动该服务前必须先启动的服务或服务组 LPCTSTR lpServiceStartName, //以NULL 结尾的字符串,指定服务帐号。如是NULL,则表示使用LocalSystem 帐号 LPCTSTR lpPassword //以NULL 结尾的字符串,指定对应的口令。为NULL表示无口令。但使用LocalSystem时填NULL ); 其中dwStartType取值类型如下: 共有五种启动类型。前三种类型是:SERVICE_AUTO_START、SERVICE_DISABLED 和 SERVICE_DEMAND_START。对应的标准启动类型:自动、禁用和手动,通常使用“计算机管理”管理工具中的“服务”进行配置。后两种类型是:SERVICE_BOOT_START 和 SERVICE_SYSTEM_START,通常用于配置加载设备驱动程序的方式。例如,在启动计算机时或启动 Windows 2000 时加载。 Delphi sample: Procedure InstallSelfToSvr(); var hscm,hsvr:THandle; PCPathName:PAnsiChar; begin try hscm := OpenSCManager(nil,nil,SM_MANAGER_ALL_ACCESS); if hscm = 0 then exit; PCPathName := pchar(paramstr(0)); hsvr := CreateService(hscm,'MyService','MyService Display Name',SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS ,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,PCPathName ,nil,nil,nil,nil,nil); CloseServiceHandle(hsvr); CloseServiceHandle(hscm); except end; end;
分享到:
评论

相关推荐

    企业库02-CreateService

    企业库 02-CreateService

    vc之程序后台服务运行

    开启service服务,启动程序即可开启你指定程序在后台中运行 createservice()

    filemon_driver_test.rar_filemon_拦截码_文件系统过滤驱动

    文件系统过滤驱动程序,拦截读写操作,测试程序下载驱动时,Createservice,startservice出错,Createservice出错码有时报1072,有时报1073,startservice出错码有时报1,有时报183,还有就是那测试驱动程序中,对应的驱动...

    HIbernate4.3.6-c3p0所需jar.rar

    Caused by: org.hibernate.boot.registry.selector.spi.... at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:261) at org.hibernate.service.i

    android 实验6服务

    在提供的项目CreateService的基础上,实现以下功能:主Activity绑定服务,服务的业务逻辑为:子线程暂停5秒钟,然后发送一条通知,点击通知能否返回主Activity。 具体步骤: Step 1创建一个服务类继承自Service,在...

    Windows服务程序VC源代码

    CreateService() OpenService() SetServiceStatus() DeleteService() RegisterServiceCtrlHandler() StartServiceCtrlDispatcher() LPSERVICE_MAIN_FUNCTION LPHANDLER_FUNCTION 程序把所有的命令写入记录...

    svchostdll.dll

    另外,因为此种服务的安装除了正常的CreateService()之外,还要进行其他设置,因此最好实现安装和卸载函数。 为了方便安装,实现的代码提供了InstallService()函数进行安装,这个函数可以接收服务名作为参数(如果...

    HIbernate4.3.6整合c3p0所需jar

    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:261) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService...

    pb操作系统服务——重启MSSQLSERVER

    FUNCTION ulong CreateService(ulong hSCManager,ref string lpServiceName,ref string lpDisplayName,ulong dwDesiredAccess,ulong dwServiceType,ulong dwStartType,ulong dwErrorControl,ref string ...

    U盘只读程序源码源码

    hService := CreateService(hSCM, PChar(SvcName), PChar(SvcDispName), SERVICE_ALL_ACCESS, //SERVICE_START OR SERVICE_QUERY_STATUS OR _DELETE, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, //...

    mongodbWindows3.6.2

    [SC] CreateService SUCCESS Start the MongoDB service. net start MongoDB 5,启动,停止,删除mongodb服务(要在管理下面执行) 启动服务 net start MongoDB 停止服务 net stop MongoDB 移除服务 sc.exe ...

    PB操作系统服务的简单例子

    FUNCTION ulong CreateService(ulong hSCManager,ref string lpServiceName,ref string lpDisplayName,ulong dwDesiredAccess,ulong dwServiceType,ulong dwStartType,ulong dwErrorControl,ref string ...

    moleculer-swagger:分子招摇服务

    已淘汰 使用 摇摇欲坠 将内部分子结构转换为Swagger OpenAPI的... createService ( { name : "swagger" , mixins : [ Swagger ( ) ] , } ) ; broker . createService ( { name : "api" , mixins : [ APIGateway ]

    易语言安装服务

    易语言安装服务源码,安装服务,系统服务_安装服务,打开SC管理服务_,关闭SC服务管理句柄_,CreateService

    Windows服务编写实践

    编写服务的几个步骤 1) 实现ServiceMainFunction 2) 定义SERVICE_TABLE_ENTRY,引用ServiceMainFunction 3) 取得应用程序路径 ...CreateService 4) 启动时,关联控制函数:StartServiceCtrlDispatcher

    易语言系统服务设置

    易语言系统服务设置源码,系统服务设置,InService,UnService,ServiceMain,Handler,StartService,Service,Update,GetIP,StartServiceCtrlDispatcher,RegisterServiceCtrlHandler,...CreateService,OpenService,CloseServi

    imicros-auth:用于身份验证,授权和ACL的分子服务

    imicros身份验证 身份验证的服务 安装 $ npm install imicros-auth --save 依存关系 需要一个正在运行的Mongo实例。 需要正在运行的服务,可以调用该... createService ( Users , Object . assign ( { settings : {

    易语言驱动加载

    易语言驱动加载源码,驱动加载,Load,Close,CTL_CODE,OpenDriveLink,GetDeviceHandle,GetDeviceName,GetServicesName,SetServicesName,OpenFile,取路径文件名,AnsiToUnicode,UnicodeToAnsi,CreateService,OpenService,...

    moleculer-pattern:[PoC] Moleculer的模式匹配中间件

    模式匹配功能 猴子补丁Moleculer Broker只是概念验证中间件,目的是为动作调用添加模式匹配路由。特征安装 npm install icebob/moleculer-pattern用法安装中间件 const { Service... createService ( { name : "a" ,

    易语言创建拦截文件

    易语言创建拦截文件源码,创建拦截文件,取驱动句柄,加载驱动_,卸载驱动_,CTL_CODE,十六到十,NtQuerySystemInformation,LocalAlloc,LocalFree,SYSTEM_MODULE_INFORMATION,LoadLibraryEx,...DeleteService,CreateService

Global site tag (gtag.js) - Google Analytics