⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_c++学习笔记-后台服务程序开发模式(一).htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                width=261>
                  <P align=center class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan"><B><SPAN 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">类型<SPAN 
                  lang=EN-US><o:p></o:p></SPAN></SPAN></B></P></TD>
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 190.3pt" 
                width=254>
                  <P align=center class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan"><B><SPAN 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">说明<SPAN 
                  lang=EN-US><o:p></o:p></SPAN></SPAN></B></P></TD></TR>
              <TR style="mso-yfti-irow: 1">
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 195.75pt" 
                width=261>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  lang=EN-US 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SERVICE_FILE_SYSTEM_DRIVER=2<o:p></o:p></SPAN></P></TD>
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 190.3pt" 
                width=254>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">文件系统驱动服务。<SPAN 
                  lang=EN-US><o:p></o:p></SPAN></SPAN></P></TD></TR>
              <TR style="mso-yfti-irow: 2">
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 195.75pt" 
                width=261>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  lang=EN-US 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SERVICE_KERNEL_DRIVER=1<o:p></o:p></SPAN></P></TD>
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 190.3pt" 
                width=254>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">驱动服务。<SPAN 
                  lang=EN-US><o:p></o:p></SPAN></SPAN></P></TD></TR>
              <TR style="mso-yfti-irow: 3">
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 195.75pt" 
                width=261>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  lang=EN-US 
                  style="BACKGROUND: navy; COLOR: white; FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SERVICE_WIN32_OWN_PROCESS=16</SPAN><SPAN 
                  lang=EN-US 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P></TD>
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 190.3pt" 
                width=254>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">独占一个进程的服务。<SPAN 
                  lang=EN-US><o:p></o:p></SPAN></SPAN></P></TD></TR>
              <TR style="mso-yfti-irow: 4; mso-yfti-lastrow: yes">
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 195.75pt" 
                width=261>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  lang=EN-US 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SERVICE_WIN32_SHARE_PROCESS=32<o:p></o:p></SPAN></P></TD>
                <TD 
                style="BACKGROUND-COLOR: transparent; BORDER-BOTTOM: #88c0b8; BORDER-LEFT: #88c0b8; BORDER-RIGHT: #88c0b8; BORDER-TOP: #88c0b8; PADDING-BOTTOM: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; PADDING-TOP: 0.75pt; WIDTH: 190.3pt" 
                width=254>
                  <P align=left class=MsoNormal 
                  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><SPAN 
                  style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">与其他服务共享一个进程的服务。<SPAN 
                  lang=EN-US><o:p></o:p></SPAN></SPAN></P></TD></TR></TBODY></TABLE>
            <P><SPAN 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 宋体">新建<SPAN 
            lang=EN-US>WIN32控制台程序, 其源文件名为service.cpp 
            。我用的开发工具是VC++.NET。<o:p></o:p></SPAN></SPAN></P>
            <P><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P>
            <P><SPAN lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 新宋体; FONT-SIZE: 24pt; mso-hansi-font-family: 宋体">1.服务程序主函数<o:p></o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>服务控制管理程序启动服务程序后,等待服务程序主函数调用系统函StartServiceCtrlDispatcher。一个SERVICE_WIN32_OWN_PROCESS 
            类型的服务应该立即调用 StartServiceCtrlDispatcher 函数,可以在服务启动后让服务入口点函数完成初始化工作。对于 
            SERVICE_WIN32_OWN_PROCESS 
            类型的服务和程序中所有服务共同的初始化工作可以在主函数中完成,但不要超过30秒。否则必须建立另外的线程完成这些共同的初始化工作,从而保证服务程序主函数能及时地调用 
            StartServiceCtrlDispatcher 函数。</SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"></SPAN>&nbsp;</P><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-layout-grid-align: none"><SPAN 
            style="FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">主函数处理了三中命令行参数:<SPAN 
            lang=EN-US>- install,- remove,- 
            debug,分别用于安装,删除和调试服务程序。如果不带参数运行,则认为是服务控制管理出现启动该服务程序。参数不正确则给出提示信息。<o:p></o:p></SPAN></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">StartServiceCtrlDispatcher 
            函数负责把程序主线程连接到服务控制管理程序。具体描述如下:<o:p></o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">BOOL 
            StartServiceCtrlDispatcher(<o:p></o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp; </SPAN>const LPSERVICE_TABLE_ENTRY 
            lpServiceTable);<o:p></o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">lpServiceStartTable 
            指向 SERVICE_TABLE_ENTRY 
            结构类型的数组,他包含了调用进程所提供的每个服务的入口函数和字符串名。表中的最后一个元素必须为 
            NULL,指明入口表结束。SERVICE_TABLE_ENTRY 结构具体描述如下:<o:p></o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">typedef 
            struct _SERVICE_TABLE_ENTRY {<SPAN style="mso-spacerun: yes">&nbsp; 
            </SPAN>LPTSTR lpServiceName;<SPAN style="mso-spacerun: yes">&nbsp; 
            </SPAN>LPSERVICE_MAIN_FUNCTION lpServiceProc;<o:p></o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 新宋体; FONT-SIZE: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">} 
            SERVICE_TABLE_ENTRY, *LPSERVICE_TABLE_ENTRY;<o:p></o:p></SPAN></P>
            <P align=left class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN 

⌨️ 快捷键说明

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