3.1.2 服务应用程序.htm

来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 559 行 · 第 1/4 页

HTM
559
字号
            size=2>虽然我称呼这个函数为HandlerEx,然而您可以为此函数另外命名为任何您选择的名称。它的实际名称为何并不重要,因为您将该函数之位址当成一个参数而传递到RegisterServiceCtrlHandlerEx函数中。不过,您不能在一个单一可执行档内使用二个名称相同的HandlerEx函数;如果您这么做了,在建构您的专案时,编译器或连结器会产生一个错误。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>在大部份的时间里,呼叫至StartServiceCtrlDispatcher内之处理程序的主要线程处于暂停状态。当一个SCP程序想要去控制一个服务时,SCM会与该处理程序之主要线程通讯。线程会醒来并且呼叫适当服务的HandlerEx函数。例如,当一个管理者使用服务嵌入式管理单元去停止一个服务时,该嵌入式管理单元会与管理者要求的本机或远端SCM沟通。接着SCM会唤醒该可执行服务之主要线程、呼叫服务的HandlerEx函数并传递一个SERVICE_CONTROL_STOP控制码。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>SCM也传送设备、硬体设定档以及电源事件通知给服务之HandlerEx函数。这些通知允许服务适当地重新设定自己并且同意或拒绝加入系统的变更。</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>因为处理程序的主要线程在每一个服务的HandlerEx函数执行,所以您应该要实作那些HandlerEx函数,以使它们快速地执行。不那么做会妨碍另一个在同一个处理程序内的服务在一个合理的时间内取得它们所需之动作。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>若主要线程执行了HandlerEx函数,而服务由另一个线程执行时,它可能会需要使HandlerEx与行动沟通或者通知服务线程。没有标准方法可以完成这个通讯;此方法完全依据您如何实作服务而定。您可以排队等候一个Asynchronous 
            Procedure 
            Call(APC)、宣告一个I/O完成端口状态、宣布一个像刚才所提之避免将HandleEx线程与ServiceMain做同步化动作之需求机制。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>HandlerEx函数传递了四个参数。第一个dwControl参数表示被要求的动作或通知。假如此参数指示为一个设备、硬体设定档或是电源事件通知,则dwEventType以及pvEventData参数会提供有关动作或通知的更多特殊资讯。pvContext参数是一个原来传送至RegisterServiceCtrlHandlerEx函数中的使用者定义值。在使用这个值时,您可以建立一个在单一可执行档内被所有服务使用之单一HandlerEx函数。pvContext值可被需要与之通讯的HandlerEx函数用来决定特定的服务。在下一节里,我会讨论如何处理这些控制码以及通知的方法。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>HandlerEx函数的回传值允许一个服务的控制者回传一些资讯至SCM。如果此函数没有处理一个特定的控制码,则回传ERROR_CALL_NOT_IMPLEMENTED;若此函数处理了一个设备、硬体设定档或是电源事件要求,则回传NO_ERROR。要拒绝一个要求,则回传任何其他的Win32之错误码。对任何其他的控制码,HandlerEx应该回传NO_ERROR。</FONT></P><A 
            style="LINE-HEIGHT: 25px" name=203004>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e70d7 
            size=5><B style="LINE-HEIGHT: 25px">控制码与状态回报<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>HandlerEx的责任是控制所有被要求之服务与所有通知的动作。它的第一个参数是指示一个动作要求或通知的控制码。表3-2描述了指示一个动作要求的控制码内容。一个动作要求告知服务去完成一些动作以改变执行状态。</FONT></P>
            <CENTER style="LINE-HEIGHT: 25px">
            <P></P>
            <P class=content_page><A 
            href="http://www.acejoy.com/Html/Article/network/5020061009101614.html">上一页</A>&nbsp;&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/5020061009101614.html">[1]</A>&nbsp;<STRONG><FONT 
            color=#ff0033>[2]</FONT></STRONG>&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/5020061009101614_P3.html">[3]</A>&nbsp;&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/5020061009101614_P3.html">下一页</A></P></DIV><BR><BR></CENTER></TD></TR></TBODY></TABLE>
      <TABLE style="CLEAR: both" cellSpacing=0 cellPadding=0 width="97%">
        <TBODY>
        <TR>
          <TD align=right>
            <TABLE>
              <TBODY>
              <TR>
                <TD>阅读:<SPAN id=news_hits></SPAN>
                  <SCRIPT src="3.1.2 服务应用程序.files/GetHits.htm" 
                  type=text/JavaScript></SCRIPT>
                   次<BR>录入:<A 
                  href="http://www.acejoy.com/User/Info.Asp?UserName=winston">winston</A><BR><BR></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD align=right>【 <A 
            href="http://www.acejoy.com/Comment.asp?ChannelID=1&amp;Action=Write&amp;InfoID=50">评论</A> 
            】 【 <A 
            href="http://www.acejoy.com/User/SendMail.asp?Title=Windows2000 服务器端应用程序开发设计指南- 服务应用程序(1)" 
            target=_blank>推荐</A> 】 【 <A href="javascript:window.print()">打印</A> 
            】 </TD></TR></TBODY></TABLE>
      <TABLE style="CLEAR: both" width="97%" align=center>
        <TBODY>
        <TR>
          <TD>上一篇:<A 
            title="标题:Windows2000 服务器端应用程序开发设计指南-设备I/O及线程间通讯(2)&#13;&#10;作者:Jeffrey Richter Jason D. Clark&#13;&#10;更新:2006-10-8 13:05:02&#13;&#10;点击:464" 
            href="http://www.acejoy.com/Html/Article/network/4920061008130502.html">Windows2000 
            服务器端应用程序开发设计指南-设备I/O及线程间通讯(2)</A><BR>下一篇:<A 
            title="标题:Windows2000 服务器端应用程序开发设计指南- 服务应用程序(2)&#13;&#10;作者:Jeffrey Richter Jason D. Clark&#13;&#10;更新:2006-10-9 10:26:24&#13;&#10;点击:557" 
            href="http://www.acejoy.com/Html/Article/network/5120061009102624.html">Windows2000 
            服务器端应用程序开发设计指南- 服务应用程序(2)</A> </TD></TR></TBODY></TABLE></TD>
    <TD class=mr></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV class=mframe>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
  <TBODY>
  <TR>
    <TD class=tl></TD>
    <TD class=tm><SPAN class=tt>相关新闻</SPAN> </TD>
    <TD class=tr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
  <TBODY>
  <TR>
    <TD class=ml></TD>
    <TD class=mm>
      <TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD vAlign=top>
            <SCRIPT language=javascript 
            src="3.1.2 服务应用程序.files/GetCorrelative.htm"></SCRIPT>
          </TD></TR></TBODY></TABLE></TD>
    <TD class=mr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
  <TBODY>
  <TR>
    <TD class=tl></TD>
    <TD class=tm><SPAN class=tt>本文评论</SPAN> </TD>
    <TD class=tr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
  <TBODY>
  <TR>
    <TD class=ml></TD>
    <TD class=mm>
      <P>&nbsp;</P>
      <TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD vAlign=top>
            <SCRIPT language=javascript 
            src="3.1.2 服务应用程序.files/Comment.htm"></SCRIPT>
          </TD></TR></TBODY></TABLE></TD>
    <TD class=mr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
  <TBODY>
  <TR>
    <TD class=ml></TD>
    <TD class=mm></TD>
    <TD class=mr></TD></TR></TBODY></TABLE></DIV>
<TABLE id=footer cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR style="LINE-HEIGHT: 130%" align=middle>
    <TD height=23>&nbsp;<A 
      href='javascript:window.external.addFavorite("http://www.acejoy.com","ACE开发者")'><FONT 
      color=#000000>加入收藏</FONT></A>&nbsp;- &nbsp;<A 
      href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT 
      color=#000000>关于本站</FONT></A>&nbsp;- &nbsp;<A class=Bottom 
      href="http://www.acejoy.com/Help.asp?Action=Copyright" target=_blank><FONT 
      color=#000000>版权申明</FONT></A>&nbsp;- &nbsp;<A class=Bottom 
      href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT 
      color=#000000>联系站长</FONT></A>&nbsp;- &nbsp;<A class=Bottom 
      href="http://www.acejoy.com/LinkSite.asp" target=_blank><FONT 
      color=#000000>友情链接</FONT></A>&nbsp;&nbsp; </TD></TR>
  <TR align=middle>
    <TD height=23>Copyright&copy; 2004-2006 <A 
      href="http://www.acejoy.com/">http://www.acejoy.com/</A> .All Rights 
      Reserved <A href="http://www.miibeian.gov.cn/" target=_blank>京ICP备06055248 
      </A>
      <SCRIPT language=JavaScript src="3.1.2 服务应用程序.files/stat.htm" 
      charset=gb2312></SCRIPT>
    </TD></TR></TBODY></TABLE>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV><!--Powered by:CreateLive CMS Version 3.1(www.acejoy.com) CreateDate:2007-3-4 10:50:42--></DIV></DIV></DIV></DIV></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?