4.1 服务控制程序.htm
来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 628 行 · 第 1/5 页
HTM
628 行
<TR style="LINE-HEIGHT: 25px">
<TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>存取权限</FONT> </TH>
<TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>说明</FONT></TH></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_START</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫StartService以启动服务。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_STOP</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫ControlService以停止服务。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_PAUSE_CONTINUE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫ControlService以暂停与继续执行服务。此存取
也允许改变一个服务的参数。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_INTERROGATE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫ControlService以询问服务并立即回报它的状 态。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_USER_DEFINED_</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫ControlService以指定一个经使用者定义的控制 CONTROL 码。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_QUERY_STATUS</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫 QueryServiceStatus(Ex) 函数以询问服务控制管
理员有关服务的状态。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_ENUMERATE_DEPENDENTS</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫EnumDependentServices以依据服务而将所有的 服务列举出来。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_CHANGE_CONFIG</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫ChangeServiceConfig(2) 以改变服务的设定。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SERVICE_QUERY_CONFIG</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫QueryServiceConfig(2) 以询问服务的设定。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>DELETE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>能呼叫DeleteService以删除服务。</FONT></TD></TR></TBODY></TABLE></CENTER>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e80d7
size=2><B
style="LINE-HEIGHT: 25px"> CreateService </B></FONT>函数一个参数可接受一个SECURITY_ATTRIBUTES结构的指标。所以当一个新的服务被安装至SCM资料库时,SCM会对该服务设定预设之安全性。您可以使用QueryServiceObjectSecurity与SetServiceObjectSecurity函数来改变这些安全性设定。它们为SCM为服务设定的预设安全性:</FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
<UL style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">Administrators与System
Operators拥有SERVICE_CHANGE_CONFIG、SERVICE_ENUMERATE_DEPENDENTS、SERVICE_INTERROGATE、SERVICE_
PAUSE_CONTINUE、SERVICE_QUERY_CONFIG、SERVICE_QUERY_STATUS、SERVICE_START、SERVICE_STOP、SERVICE_USER_DEFINED_CONTROL、READ_CONTROL、WRITE_OWNER、WRITE_DAC与DELETE以存取服务。<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">本机帐户拥有
SERVICE_ENUMERATE_DEPENDENTS、SERVICE_INTERROGATE
、SERVICE_PAUSE_CONTINUE、SERVICE_QUERY_CONFIG、SERVICE_QUERY_STATUS、SERVICE_START、SERVICE_STOP、SERVICE_
USER_DEFINED_CONTROL 与 READ_CONTROL 以存取服务。<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">经过验证的使用者拥有
SERVICE_ENUMERATE_DEPENDENTS、SERVICE_
INTERROGATE、SERVICE_QUERY_CONFIG、SERVICE_QUERY_STATUS、SERVICE_USER_DEFINED_CONTROL
与 READ_CONTROL 以存取服务。<BR style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">在Windows 2000 Professional与Windows
2000 Server中,Power
Users拥有SERVICE_QUERY_CONFIG、SERVICE_QUERY_STATUS、SERVICE_
ENUMERATE_DEPENDENTS、SERVICE_INTERROGATE、SERVICE_START、SERVICE_STOP、SERVICE_PAUSE_CONTINUE、SERVICE_USER_
DEFINED_CONTROL与READ_CONTROL以存取服务。<BR style="LINE-HEIGHT: 25px">
</LI></UL></FONT>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>dwServiceType参数告诉系统哪一些可执行档中包含了一个或多个服务。当可执行档中实行单一的服务时,传递SERVICE_WIN32_OWN_PROCESS;而当可执行档中实行了二或多个服务时,则传递SERVICE_WIN32_
SHARE_PROCESS。如果您想要让服务在一个处理程序中与使用者的桌面互动时,您也可以结合SERVICE_INTERACTIVE_PROCESS标记与SERVICE_WIN32_
OWN_PROCESS或SERVICE_WIN32_SHARE_PROCESS二者之一。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3
Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>在SERVICE_WIN32_SHARE_PROCESS服务之可执行档中,如果该服务要求使用SERVICE_INTERACTIVE_PROCESS标记时,所有的服务即必须使用这个标记。当系统第一次启动该服务时,服务的设定会决定哪一个处理程序被允许与桌面互动。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>dwStartType参数告诉系统服务应该在何时被启动。当机器开机时,会有一个SERVICE_AUTO_START值指示SCM启动服务以及SERVICE_DEMAND_START值会指示系统不启动服务。管理员则可以手动地启动服务。此外,SERVICE_
DEMAND_START可指定一个服务为要求启动的服务,它告诉SCM如果管理员试图去启动一个服务时,便自动地启动服务。接下来会讨论更多有关服务的依存关系。一个SERVICE_DISABLED值可防止由系统完全地启动服务。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>服务在系统中是一个非常重要的部份,所以系统需要知道如果服务启动失败时,它应该做什么。这个指令是dwErrorControl参数的工作。传递一个SERVICE_ERROR_IGNORE或SERVICE_ERROR_NORMAL以告诉系统在系统之事件记录中记录服务的错误以及继续启动系统。这二个控制码的不同之处是设定为SERVICE_ERROR_NORMAL时系统会显示一个讯息方块以通知使用者服务启动失败。设定为要求启动的服务应该指定为SERVICE_ERROR_IGNORE。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>当服务启动失败时,SERVICE_ERROR_SEVERE与SERVICE_ERROR_CRITICAL会告诉系统中止启动它。当一个服务启动失败并且被指定为这些控制码之一时,系统会在系统之事件记录中记录此错误情形,并且自动地使用已知上次为良好的设定重新开机。如果系统以已知上次为良好的设定开机后,有一个服务在启动失败时的错误控制码为SERVICE_ERROR_SEVERE,则系统会继续开机。若有一个服务之启动失败的错误控制码为SERVICE_ERROR_CRITICAL,则系统也会中止已知上次为良好设定的开机动作。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>CreateService的pszPathName参数指示了包含一个或多个服务之可执行档的完整路径。许多服务文件被安装在
\WINNT\System32目录中,但是您可以将服务之可执行档放置在文件系统的任何一个地方。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>现在我们到达服务之依存关系的议题。简单地说,一个服务就像作业系统的一部份,而且除非他们知道另一个系统的一部份已经先执行,否则有很多服务不会正确地工作。当系统开机时,它会依照一个规定服务之启动顺序的演算法来执行。Microsoft将系统服务划分为一个事先已定义的群组中,列示如下:</FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
<UL style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">系统保留的<BR style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">启动汇流排延长器<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">系统汇流排延长器(支援PCMCIA)<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">SCSI miniport(SCSI设备驱动程序)<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">通讯埠<BR style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">主要的磁盘(软碟机/硬盘机驱动程序)<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">SCSI类别(SCSI驱动程序)<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">SCSI CDROM类别(CD-ROM驱动程序)<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">Filter(CD设备)<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">启动文件系统(快速的FAT驱动程序存取)<BR
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?