CreateService【CreateService】CreateService是一个创建一个服务对象,并将其添加到指定的服务控制管理器资料库的函式 。
基本介绍中文名:CreateService
外文名:CreateService
功能:创建一个服务对象
备注:参数介绍
函式功能创建一个服务对象,并将其添加到指定的服务控制管理器资料库 。函式原型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, //忽略,NULLLPCTSTR 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_ADAPTER0x00000004保留SERVICE_FILE_SYSTEM_DRIVER0x00000002档案系统驱动服务程式SERVICE_KERNEL_DRIVER0x00000001驱动服务程式SERVICE_RECOGNIZER_DRIVER0x00000008保留SERVICE_WIN32_OWN_PROCESS0x00000010运行于独立进程的服务程式SERVICE_WIN32_SHARE_PROCESS0x00000020被多个进程共享的服务程式 。若使用了SERVICE_WIN32_OWN_PROCESS 或 SERVICE_WIN32_SHARE_PROCESS且使用LocalSystem帐号来运行该服务程式,则还可以附加使用下面的值:值含义SERVICE_INTERACTIVE_PROCESS0x00000100该服务可以与桌面程式进行互动操作 。dwStartType服务启动选项 。此参数可以是下列值之一:值含义SERVICE_AUTO_START0x00000002系统启动时由服务控制管理器自动启动该服务程式 。SERVICE_BOOT_START0x00000000用于由系统载入器创建的设备驱动程式 。只能用于驱动服务程式 。SERVICE_DEMAND_START0x00000003由服务控制管理器(SCM)启动的服务 。SERVICE_DISABLED0x00000004表示该服务不可启动 。SERVICE_SYSTEM_START0x00000001用于由IoInitSystem函式创建的设备驱动程式 。dwErrorControl当该启动服务失败时产生错误的严重程度以及採取的保护措施 。此参数可以是下列值之一:值含义SERVICE_ERROR_CRITICAL0x00000003服务启动程式将把该错误记录到事件日誌中 。若最后一次正确配置可用,服务启动程式将以最后一次正确配置重新启动;否则将退出执行 。SERVICE_ERROR_IGNORE0x00000000服务启动程式将忽略该错误并返回继续执行 。SERVICE_ERROR_NORMAL0x00000001服务启动程式将把该错误记录到事件日誌中并返回继续执行 。SERVICE_ERROR_SEVERE0x00000002服务启动程式将把该错误记录到事件日誌中 。若最后一次正确配置可用,服务启动程式将以最后一次正确配置重新启动;否则将返回继续执行 。lpBinaryPathName服务程式二进制档案,完全限定路径 。如果路径中包含空格它必须被引用,以便它正确的解析 。例如"d:\myshare\myservice.exe"应指定为""d:\myshare\myservice.exe"" 。该路径也可以包含一个自动启动服务的参数 。例如"d:\myshare\myservice.exe arg1 arg2" 。这些参数被传递给服务的入口点通常主要作用 。如果另一台计算机上指定一个路径,共享必须可以访问由本地计算机的计算机帐户,因为这是在远程调用中使用的安全上下文 。但是,这项规定会影响本地计算机远程计算机中允许任何潜在的漏洞 。因此,最好使用一个本地档案 。lpLoadOrderGroup在载入顺序此服务所属的组的名称 。指定 NULL 或空字元串,如果该服务不属于组 。启动程式使用载入顺序组载入服务相对于其他组的指定顺序组 。载入顺序组列表包含在下面的注册表值:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder]lpdwTagId指向接收 lpLoadOrderGroup 参数中指定的组中唯一的标记值的变数 。如果不更改现有的标籤,请指定 NULL 。订购服务启动一个载入顺序通过在以下注册表值中指定标记顺序矢量的组中,您可以使用的标记:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\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帐户 。如果NTAUTHORITYLocalService此参数CreateService使用LocalService帐户 。如果NTAUTHORITYNetworkService参数CreateService使用NetworkService帐户 。共享的处理可以运行于任何用户 。如果服务类型 SERVICE_KERNEL_DRIVER 或 SERVICE_FILE_SYSTEM_DRIVER 名称是系统用来载入设备驱动程式的驱动程式对象名称 。如果该驱动程式将使用由IO系统创建的默认对象名称,请指定NULL 。可以将服务配置为使用一个託管的帐户或虚拟帐户 。如果该服务被配置为使用一个託管的服务帐户,名称是託管的服务帐户名称 。如果该服务被配置为使用一个虚拟帐户,作为NTSERVICEServiceName指定名称 。有关託管的服务帐户和虚拟帐户的详细信息请参阅服务帐户的分步指南 。WindowsServer2008、WindowsVista、WindowsServer2003 和WindowsXP2000:Windows7 和WindowsServer2008 R2 之前不支持託管的服务帐户和虚拟帐户 。lpPassword由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由