﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-longshen</title><link>http://www.cppblog.com/longshen/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:07:59 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:07:59 GMT</pubDate><ttl>60</ttl><item><title>【回车、换行】总结</title><link>http://www.cppblog.com/longshen/archive/2011/10/31/159399.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Mon, 31 Oct 2011 10:25:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2011/10/31/159399.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/159399.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2011/10/31/159399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/159399.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/159399.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Unix系统里，每行结尾只有“<换行>”，即“\n”；<br>Windows系统里面，每行结尾是“<回车><换行>”，即“\r\n”；<br>Mac系统里，每行结尾是“<回车>” ，即“\r”；&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2011/10/31/159399.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/159399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2011-10-31 18:25 <a href="http://www.cppblog.com/longshen/archive/2011/10/31/159399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】STL中sort的用法举例</title><link>http://www.cppblog.com/longshen/archive/2010/12/08/135831.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Wed, 08 Dec 2010 12:46:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2010/12/08/135831.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/135831.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2010/12/08/135831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/135831.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/135831.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: STL中sort的用法举例  如何调整升序还是降序&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2010/12/08/135831.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/135831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2010-12-08 20:46 <a href="http://www.cppblog.com/longshen/archive/2010/12/08/135831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC++的文件简介</title><link>http://www.cppblog.com/longshen/archive/2010/09/11/126398.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Sat, 11 Sep 2010 03:59:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2010/09/11/126398.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/126398.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2010/09/11/126398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/126398.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/126398.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: VC++的文件， pdb文件， cod文件， map文件，dsp文件，dsw文件，clw文件，rc文件，pch文件， sln文件， vcproj文件等&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2010/09/11/126398.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/126398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2010-09-11 11:59 <a href="http://www.cppblog.com/longshen/archive/2010/09/11/126398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win7下运行软件某些功能后无响应问题</title><link>http://www.cppblog.com/longshen/archive/2010/04/22/113273.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Thu, 22 Apr 2010 13:02:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2010/04/22/113273.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/113273.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2010/04/22/113273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/113273.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/113273.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有时运行软件的某些功能后，程序无响应....<br>例如运行vs2003的查找功能后，程序无响应&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2010/04/22/113273.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/113273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2010-04-22 21:02 <a href="http://www.cppblog.com/longshen/archive/2010/04/22/113273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式精解笔记 -- 提供代码和类图</title><link>http://www.cppblog.com/longshen/archive/2010/04/08/112004.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Thu, 08 Apr 2010 13:17:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2010/04/08/112004.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/112004.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2010/04/08/112004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/112004.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/112004.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 设计模式精解读书笔记，学习书籍的同时，按着自己的理解编写代码和类图。有误之处请网友指出，thanks。&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2010/04/08/112004.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/112004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2010-04-08 21:17 <a href="http://www.cppblog.com/longshen/archive/2010/04/08/112004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>成功编译emule Xtreme mod</title><link>http://www.cppblog.com/longshen/archive/2010/04/07/111830.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Wed, 07 Apr 2010 02:10:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2010/04/07/111830.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/111830.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2010/04/07/111830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/111830.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/111830.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 成功编译emule Xtreme mod； 1）编译生成除emule外的其他三方库 2）修改下载到的少量代码  3）使用Unicode_Debug编译&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2010/04/07/111830.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/111830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2010-04-07 10:10 <a href="http://www.cppblog.com/longshen/archive/2010/04/07/111830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决 error LNK2019: 无法解析的外部符号 问题</title><link>http://www.cppblog.com/longshen/archive/2010/04/02/111418.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Fri, 02 Apr 2010 04:51:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2010/04/02/111418.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/111418.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2010/04/02/111418.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/111418.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/111418.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 解决error LNK2019: 无法解析的外部符号&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2010/04/02/111418.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/111418.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2010-04-02 12:51 <a href="http://www.cppblog.com/longshen/archive/2010/04/02/111418.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>服务器应用程序不可用解决方案</title><link>http://www.cppblog.com/longshen/archive/2009/11/27/102060.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Fri, 27 Nov 2009 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2009/11/27/102060.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/102060.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2009/11/27/102060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/102060.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/102060.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: IIS 服务器应用程序不可用<br>Failed to execute request because the App-Domain could not be created解决办法&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2009/11/27/102060.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/102060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2009-11-27 14:38 <a href="http://www.cppblog.com/longshen/archive/2009/11/27/102060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第3章 内核对象 -- Windows核心编程</title><link>http://www.cppblog.com/longshen/archive/2009/11/26/101961.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Thu, 26 Nov 2009 03:06:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2009/11/26/101961.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/101961.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2009/11/26/101961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/101961.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/101961.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p><strong>1、何为内核对象</strong><br><font style="BACKGROUND-COLOR: #fffbf0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个内核对象都<span style="COLOR: red">只是一个内存块</span>，它由操作系统内核分配，并只能由操作系统内核访问。<span style="COLOR: red">这个内存块是一个数据结构</span>，其成员维护着于对象相关的信息。少数成员(安全描述符何使用计数等)是所有对象都有的，但其他大多数成员都是不同类型的对象特有的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.g. 访问令牌(access token)对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、邮件槽(mailsolt)对象、互斥量(mutex)对象、管道(pipe)对象等<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">*</span>可利用Sysintenals的WinObj(<a href="http://technet.microsoft.com/zh-cn/sysinternals/bb896657.aspx">http://technet.microsoft.com/zh-cn/sysinternals/bb896657.aspx</a>)工具查看内核对象类型的列表。<br>1.1、使用计数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用计数事所有内核对象类型都有的一个数据成员。初次创建对象事，其使用计数被设为<span style="COLOR: red">1</span>。如果另</font>一进程获得对现有内核对象的访问后，使用计数会<span style="COLOR: red">递增</span>。进程终止运行后，操作系统内核将自动<span style="COLOR: red">递减</span>进程仍然打开的所有内核对象的使用计数。一旦对象的使用计数变为<span style="COLOR: red">0</span>，操作系统内核就会销毁该对象。<br>1.2、内核对象的安全性<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内核对象可以用一个安全描述(security descriptor, SD)符来保护。它描述了谁拥有对象；哪些组和用户被允许访问或使用此对象；哪些组何用户被拒绝访问此对象。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用于创建内核对象的所有函数几乎都有指向一个<span style="COLOR: #0000ff">SECURITY_ATTRIBUTES</span>结构的指针<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct _SECURITY_ATTRIBUTES {&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp; <a class=synParam onclick=showTip(this) href=""><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>nLength</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Specifies the size, in bytes, of this structure，一般为sizeof(此结构变量)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPVOID <a class=synParam onclick=showTip(this) href=""><u><font color=#0000ff>lpSecurityDescriptor</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//和安全性有关的成员<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>lpSecurityDescriptor</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//和安全性有关的成员<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>lpSecurityDescriptor</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//和安全性有关的成员<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>lpSecurityDescriptor</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//和安全性有关的成员<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>lpSecurityDescriptor</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//和安全性有关的成员<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>lpSecurityDescriptor</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//和安全性有关的成员<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; <a class=synParam onclick=showTip(this) href="http://www.cppblog.com/longshen/admin/href_cetemp=" ?><u><font color=#0000ff>lpSecurityDescriptor</font></u></a>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//和安全性有关的成员<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; <a class=synParam onclick=showTip(this) href=""><u><font color=#0000ff>bInheritHandle</font></u></a>;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;&nbsp;&nbsp;&nbsp;&nbsp;<br><br><strong>2、进程内核对象句柄表</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进程的句柄表结构<br></p>
<p>
<table class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; WIDTH: 441pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 width=588 border=1>
    <tbody>
        <tr style="HEIGHT: 22.25pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 44.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 22.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=59>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">索引</span><span lang=EN-US><o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 140.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 22.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=188>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指向内核对象内存块的指针</span><span lang=EN-US><o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 192.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 22.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=257>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问掩码（包含标志位的一个</span><span lang=EN-US>DWORD</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span><span lang=EN-US><o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 63.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 22.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=84>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标志</span><span lang=EN-US><o:p></o:p></span></p>
            </td>
        </tr>
        <tr style="HEIGHT: 12pt; mso-yfti-irow: 1">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 44.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 12pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=59>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>1<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 140.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 12pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=188>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>0x?????????<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 192.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 12pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=257>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>0x?????????<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 63.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 12pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=84>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>0x?????????<o:p></o:p></span></p>
            </td>
        </tr>
        <tr style="HEIGHT: 20.25pt; mso-yfti-irow: 2">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 44.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 20.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=59>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>2<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 140.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 20.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=188>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>0x?????????<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 192.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 20.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=257>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>0x?????????<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 63.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 20.25pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=84>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>0x?????????<o:p></o:p></span></p>
            </td>
        </tr>
        <tr style="HEIGHT: 17.35pt; mso-yfti-irow: 3; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 44.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 17.35pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=59>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&#8230;<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 140.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 17.35pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=188>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&#8230;<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 192.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 17.35pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=257>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&#8230;<o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 63.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 17.35pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=84>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&#8230;<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>2.1、创建一个内核对象<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用于创建内核对象的任何函数都会返回一个与进程相关的句柄，这个句柄可由同一个进程中运行的所有线程使用。<span style="COLOR: red">由于句柄值实际事作为进程句柄表的索引来使用的，索引这些句柄是与当前这个进程相关的</span>，无法供其他进程使用。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;调用函数来创建一个内核对象时，如果调用失败，多数返回的句柄值是0(NULL)，但有几个函数会返回-1(也就是在Winbase.h中定义的INVALID_HANDLE_VALUE)。检查它们的返回值是，务必相当仔细。<br>2.2、关闭内核对象<br>&nbsp;&nbsp;&nbsp;无论以什么方式创建内核对象，我们都要调用CloseHandle向系统表明我们已经结束使用对象。<br><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL CloseHandle(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE</strong><em> <a class=synParam onclick=showTip(this) href=""><u><font color=#0000ff>hObject</font></u></a></em>&nbsp;&nbsp; // handle to object<br><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;在内部，该函数首先检查主调进程的句柄表，验证&#8220;传给函数的句柄值&#8221;标识的是&#8220;进程确实有权访问的一个对象&#8221;。<br>&nbsp;&nbsp;&nbsp;1)如果句柄是有效的，系统就将获得内核对象的数据结构的地址，并将结构中的&#8220;使用计数&#8221;成员递减，如果使用计数变成0，内核对象将被销毁，并从内存中去除。<br>&nbsp;&nbsp;&nbsp;2)如果句柄是无效的，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果进程是正常运行的，<strong>CloseHandle</strong>将返回FALSE，而<strong>GetLastError</strong>返回ERROR_INVALID_HANDLE。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果进程正在被调试，那么系统将抛出0xC0000008异常(&#8220;指定了无效的句柄&#8221;)。<br><span style="href_cetemp: " ?><u><font color=#0000ff>hObject</font></u></a></em>&nbsp;&nbsp; // handle to object<br><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;在内部，该函数首先检查主调进程的句柄表，验证&#8220;传给函数的句柄值&#8221;标识的是&#8220;进程确实有权访问的一个对象&#8221;。<br>&nbsp;&nbsp;&nbsp;1)如果句柄是有效的，系统就将获得内核对象的数据结构的地址，并将结构中的&#8220;使用计数&#8221;成员递减，如果使用计数变成0，内核对象将被销毁，并从内存中去除。<br>&nbsp;&nbsp;&nbsp;2)如果句柄是无效的，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果进程是正常运行的，<strong>CloseHandle</strong>将返回FALSE，而<strong>GetLastError</strong>返回ERROR_INVALID_HANDLE。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果进程正在被调试，那么系统将抛出0xC0000008异常(&#8220;指定了无效的句柄&#8221;)。<br><span style="href_cetemp: " ?>&nbsp;<span style="href_cetemp: " ?><span style="href_cetemp: " ?>&nbsp;&nbsp;<span style="COLOR: red">*<span style="COLOR: #000000">检测内核对象泄露</span></span>：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用Windows任务管理器，选择(查看)-&gt;(选择列)，然后选择显示(句柄数)。便可在进程出监视任何一个应用程序的内核对象数了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用Sysinternals提供的Process Explorer工具(<a href="http://technet.microsoft.com/zh-cn/sysinternals/bb896653.aspx">http://technet.microsoft.com/zh-cn/sysinternals/bb896653.aspx</a>)，选择(View)-&gt;(Select Columns)，选择(Handle)，选中所有列标题。 在顶部选择想要检查的进程，按F5来获得一份最新的内核对象列表。 然后启动应用程序并开始指向一个待查的工作流。完成之后，再次按F5。在此期间生成的每个内核对象都显示为<span style="COLOR: #ff0000">绿色</span>。<br><br><strong>3、跨进程边界共享内核对象</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内核对象的句柄是与每一个进程相关的，是为确保健壮性(可靠性)和安全性。<br>3.1、使用对象句柄继承<br>&nbsp;&nbsp;&nbsp;只有在<span style="COLOR: #ff0000">进程之间有一个父-子关系</span>的时候，才可以使用对象句柄继承。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<strong>首先</strong>，父进程必须向系统指出它希望这个对象的句柄是可继承的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.g. </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SECURITY_ATTRIBUTES&nbsp;sa;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;sa.nLength&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;siezof(sa);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;sa.lpSecurityDescriptor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;sa.bInheritHandle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Make&nbsp;the&nbsp;returned&nbsp;handle&nbsp;inheritable</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hMutex&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateMutex(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">sa,&nbsp;FALSE,&nbsp;NULL);</span></div>
&nbsp;&nbsp;&nbsp;<strong>然后</strong>，由父进程生成子进程，通过<strong>CreateProcess</strong>函数完成&nbsp;&nbsp;&nbsp;&nbsp;
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BOOL&nbsp;CreateProcess(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpApplicationName,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPTSTR&nbsp;lpCommandLine,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpProcessAttributes,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpThreadAttributes,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;BOOL&nbsp;bInheritHandles,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">通常情况下设为FALSE（表明我们不希望子进程继承父进程句柄表中的&#8220;可继承句柄&#8221;）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果传递TRUE，子进程就会继承父进程的&#8220;可继承句柄&#8221;的值。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">（系统会遍历符进程的句柄表，对它的每一个记录项进行检查，凡是包含一个<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">有效的&#8220;可继承句柄&#8221;的项，都会被完整地复制到子进程的句柄表）</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;DWORD&nbsp;dwCreationFlags,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPVOID&nbsp;lpEnvironment,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpCurrentDirectory,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPSTARTUPINFO&nbsp;lpStartupInfo,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPPROCESS_INFORMATION&nbsp;lpProcessInformation<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除了复制句柄表的记录项，系统还会递增内核对象的使用计数，引擎两个进程现在都在使用这个对象。<br>3.2改变句柄的标志<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1)父进程想控制哪些子进程能继承内核对象句柄。可以调用<strong>SetHandleInformation</strong>函数来改变内核对象句柄的继承标志。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BOOL&nbsp;SetHandleInformation(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;HANDLE&nbsp;hObject,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">有效句柄标志</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;DWORD&nbsp;dwMask,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">想要更改那个或哪些标志</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;DWORD&nbsp;dwFlags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">希望把标志设为什么</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">);</span></div>
&nbsp;&nbsp;&nbsp;每个句柄都关联了两个标志：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;HANDLE_FLAG_INHERIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000001</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;HANDLE_FLAG_PROTECT_FROM_CLOSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002</span></div>
&nbsp;&nbsp;&nbsp;如果想打开一个内核对象句柄的继承标志<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">SetHandleInformation(hObj,&nbsp;HANDLE_FLAG_INHERIT,&nbsp;HANDLE_FLAG_INHERIT);</span></div>
&nbsp;&nbsp;&nbsp;如果想关闭这个标志<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">SetHandleInformation(hObj,&nbsp;HANDLE_FLAG_INHERIT,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);</span></div>
</span>&nbsp;&nbsp;&nbsp;如果告诉系统不允许关闭句柄
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">SetHandleInformation(hObj,,HANDLE_FLAG_PROTECT_FROM_CLOSE,&nbsp;HANDLE_FLAG_PROTECT_FROM_CLOSE);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CloseHandle(hObj);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">会引发异常</span></div>
</span>&nbsp;&nbsp;&nbsp;2)使用<strong>GetHandleInformation</strong>函数返回句柄标志<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BOOL&nbsp;GetHandleInformation(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;HANDLE&nbsp;hObject,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPDWORD&nbsp;lpdwFlags<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);</span></div>
&nbsp;&nbsp;&nbsp;e.g.检查句柄是否可继承<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">DWORD&nbsp;dwFlags;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>GetHandleInformation(hObj,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwFlags);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;fHandleIsInheritable&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;(dwFlags&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;HANDLE_FLAG_INHERIT));</span></div>
3.3为对象命名<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">HANDLE&nbsp;CreateMutex(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpMutexAttributes,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;BOOL&nbsp;bInitialOwner,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpName<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>HANDLE&nbsp;CreateEvent(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpEventAttributes,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;BOOL&nbsp;bManualReset,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;BOOL&nbsp;bInitialState,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpName<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>HANDLE&nbsp;CreateEvent(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpEventAttributes,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;BOOL&nbsp;bManualReset,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;BOOL&nbsp;bInitialState,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpName<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);</span></div>
&nbsp;&nbsp;&nbsp;所有这些函数的最后一个参数都是pszName。传入NULL，相当于向系统表明我们要创建一个未命名的(即匿名)内核对象。<br>&nbsp;&nbsp;&nbsp;要根据对象名称来共享一个对象，我们必须为此对象指定一个名称。传入一个&#8220;以0为终止的名称字符串&#8221;的地址。
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">进程A</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">HANDLE&nbsp;hMutexProcessA&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateMutex(NULL,&nbsp;FALSE,&nbsp;TEXT（</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JeffMutex</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">进程B</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">HANDLE&nbsp;hMutexProcessB&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateMutex(NULL,&nbsp;FALSE,&nbsp;TEXT（</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JeffMutex</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当进程B调用CreateMutex时，系统会查看是否存在一个名为 "JeffMutex "("JeffMutex "的对象是一个互斥量对象)的内核对象。如果存在，接着检查对象的类型，和调用者是否拥有该对象的完全访问权限。 如果答案是肯定的，系统就会在进程B的句柄表中查找一个空白记录项，并将其初始化为指向现有的内核对象；否则，返回NULL(失败)。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也可以调用Open*函数：<br></span></span>
<img src ="http://www.cppblog.com/longshen/aggbug/101961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2009-11-26 11:06 <a href="http://www.cppblog.com/longshen/archive/2009/11/26/101961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unicode与多字节的基本运用 -- Windows编程</title><link>http://www.cppblog.com/longshen/archive/2009/11/21/101548.html</link><dc:creator>longshen</dc:creator><author>longshen</author><pubDate>Sat, 21 Nov 2009 03:48:00 GMT</pubDate><guid>http://www.cppblog.com/longshen/archive/2009/11/21/101548.html</guid><wfw:comment>http://www.cppblog.com/longshen/comments/101548.html</wfw:comment><comments>http://www.cppblog.com/longshen/archive/2009/11/21/101548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longshen/comments/commentRss/101548.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longshen/services/trackbacks/101548.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Unicode与多字节的基本运用：<br>（举例）WinNt中TCHAR和TEXT的使用、tchar中函数的运用、safe函数的使用&nbsp;&nbsp;<a href='http://www.cppblog.com/longshen/archive/2009/11/21/101548.html'>阅读全文</a><img src ="http://www.cppblog.com/longshen/aggbug/101548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longshen/" target="_blank">longshen</a> 2009-11-21 11:48 <a href="http://www.cppblog.com/longshen/archive/2009/11/21/101548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>