<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Windows 7_博客园|网站分类</title><subtitle type="text">代码改变世界</subtitle><id>http://feed.cnblogs.com/blog/sitecateogry/win7/rss</id><updated>2012-05-30T18:25:28Z</updated><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cate/win7/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/sitecateogry/win7/rss"/><entry><id>http://www.cnblogs.com/yanjielong/archive/2012/05/26/2519071.html</id><title type="text">Everyone SECURITY_ATTRIBUTES</title><summary type="text"/><published>2012-05-26T03:03:00Z</published><updated>2012-05-26T03:03:00Z</updated><author><name>yanjielong</name><uri>http://www.cnblogs.com/yanjielong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yanjielong/archive/2012/05/26/2519071.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yanjielong/archive/2012/05/26/2519071.html"/><content type="html">&lt;p&gt;这周遇到这样一个问题: 在win7下, 一个管理员权限的程序创建的named pipe, 不能被另外一个普通运行的程序使用CreateFile去连接。GetLastError发现是ERROR_ACCESS_DENIED.&lt;/p&gt;&lt;p&gt;网上找来的代码, 创建出来的权限就是每一个人都可以访问的权限:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;SECURITY_ATTRIBUTES sa;&lt;br/&gt;SECURITY_DESCRIPTOR sd;&lt;br/&gt;&lt;br/&gt;InitializeSecurityDescriptor(&amp;amp;sd,SECURITY_DESCRIPTOR_REVISION);&lt;br/&gt;SetSecurityDescriptorDacl(&amp;amp;sd,TRUE,NULL,FALSE);&lt;br/&gt;&lt;br/&gt;sa.nLength = sizeof(SECURITY_ATTRIBUTES);&lt;br/&gt;sa.bInheritHandle = TRUE;&lt;br/&gt;sa.lpSecurityDescriptor = &amp;amp;sd;&lt;img src="http://www.cnblogs.com/yanjielong/aggbug/2519071.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yanjielong/archive/2012/05/26/2519071.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cuteshongshong/archive/2012/05/25/2506374.html</id><title type="text">Distinctive Image Features from Scale-Invariant Keypoints-SIFT算法译文</title><summary type="text"/><published>2012-05-25T02:57:00Z</published><updated>2012-05-25T02:57:00Z</updated><author><name>yifeier12</name><uri>http://www.cnblogs.com/cuteshongshong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cuteshongshong/archive/2012/05/25/2506374.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cuteshongshong/archive/2012/05/25/2506374.html"/><content type="html">&lt;p&gt;&lt;strong&gt;从尺度不变的关键点选择可区分的图像特征&lt;/strong&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;strong&gt;David G.Lowe&lt;/strong&gt;&lt;/p&gt;&lt;p align="center"&gt;温哥华不列颠哥伦比亚省加拿大英属哥伦比亚大学计算机科学系&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="mailto:Lowe@cs.ubc.ca"&gt;&lt;strong&gt;Lowe@cs.ubc.ca&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="center"&gt;2003年1月10日接受，2004年1月7日修改，2004年1月22日采用&lt;/p&gt;&lt;p align="center"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;摘要：&lt;/strong&gt;本文提出了一种从图像中提取独特不变特征的方法，可用于完成不同视角之间目标或场景的可靠匹配的方法。这种特点对图像的尺度和旋转具有不变性。并跨越很大范围的对仿射变换，三维视点的变化，添加的噪音和光照变化的图像匹配具有鲁棒性。特征是非常鲜明的，场景中的一个单一特征和一个许多图像的大型特征数据库也有很高的概率进行正确匹配。本文还介绍了一个使用该功能来识别目标的方法。通过将个别特征与由已知目标特征组成的数据库进行快速最近邻算法的匹配，然后使用Hough变换来识别属于单一目标的聚类（clusters），最后通过最小二乘解执行一致的姿态参数的核查确认。这种识别方法可以在有力确定对象之间的聚类和遮挡的同时实现近实时性能。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;关键词：&lt;/strong&gt;不变特征，目标识别，尺度不变性，图像匹配&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 引言&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p align="left"&gt;图像匹配是计算机视觉领域中很多问题的关键，包括目标和场景识别、多幅影像进行三维构建、立体对应（correspondence）、运动追踪等。本文描述的图像特征很实用，因为它具备很多可以将一个目标或场景的不同影像进行匹配的特性。这些特征对于图像尺度和旋转具有不变性，并在光照变化和三维相机视点变化的情况下具有部分的不变性。它在空间域和频率域都可以很好地定位，减少了遮挡（occlusion）、聚类和噪音的影响。有了有效的算法，海量的特征就可以从典型的图像中提取出来。另外，这些特征是非常鲜明的，使一个单一特征可以无误地与大型数据库中的特征进行匹配，为目标和场景识别提供了基础。&lt;/p&gt;&lt;p&gt;通过一个层叠的过滤算法将提取这些特征的代价最小化，这样，最昂贵的运算仅在最初测试通过处。下面是生成图像特征集计算的一些主要步骤：&lt;/p&gt;&lt;p align="left"&gt;1）&amp;nbsp;&amp;nbsp;&lt;em&gt;尺度空间极值探测&lt;/em&gt;：第一阶段对整个尺度和图像位置进行搜索。通过使用高斯差分函数来有效地识别对于尺度和方向具有不变性的可能的兴趣点。&lt;/p&gt;&lt;p align="left"&gt;2）&amp;nbsp;&amp;nbsp;&lt;em&gt;关键点定位&lt;/em&gt;：在每一个候选区，都可以确定一个详细模型的位置和尺度。基于关键点的稳定性进行选择。&lt;/p&gt;&lt;p align="left"&gt;3）&amp;nbsp;&amp;nbsp;&lt;em&gt;定向任务&lt;/em&gt;：基于局部图像的梯度方向，给每个关键点指定一个或多个方向。所有随后的图像数据操作都是将每个特征的方向、尺度和位置进行相关变换得到的，因此这些变换具有不变性。&lt;/p&gt;&lt;p align="left"&gt;4）&amp;nbsp;&amp;nbsp;&lt;em&gt;关键点描述子&lt;/em&gt;：局部梯度是在每个关键点附近的区域所选尺度上测量得到的。这些可以转化成为一个允许显著的局部形状变化和光照变化的表示法。&lt;/p&gt;&lt;p align="left"&gt;这种方法被命名为尺度不变的特征转换法（SIFT），因为它可以基于局部特征把图像数据转换到尺度不变的坐标上。&lt;/p&gt;&lt;p align="left"&gt;该方法的一个重要方面是它生成了大量特征，它们密集的覆盖了整个图像尺度和位置。一幅500*500像素的典型图片可以产生约2000个稳定的特征（&lt;strong&gt;这个数字依赖于图像内容和几个参数的选择&lt;/strong&gt;）。特征的数量对目标识别尤为重要，要具备探测杂乱背景下的小目标的能力，要求每个目标至少有三个特征被正确匹配才是可靠的识别。&lt;/p&gt;&lt;p align="left"&gt;对于图像匹配和识别，SIFT特征被第一个从一组参考图像中提取并存储在数据库中。一个新的图像通过将这幅新图像中的各个特征与原有数据库进行一一对比并基于欧氏距离找到候选的匹配特征。本文将讨论可以在大型数据库中快速执行的快速近邻算法。&lt;/p&gt;&lt;p align="left"&gt;关键点描述子是非常鲜明的，可以使单个特征在大型特征数据库中以很大概率进行正确匹配。然而，在杂乱的图像中，很多背景中的特征不能与数据库进行正确匹配，产生了很多错误的配对。通过确定与新图像在目标、目标的位置、尺度和定向一致的关键点的子集，可以将正确的匹配从匹配的全集中过滤出来。多种功能恰好与这些参数一致的可能性比任一个特征匹配错误的可能性要小很多。确定这些一致的聚类，可以通过一个高效的广义Hough变换的散列表快速执行。&lt;/p&gt;&lt;p align="left"&gt;每个拥有三个及三个以上特征与目标一致的聚类，它们的姿态都要进行下一步更精细的确认。首先，最小二乘估计是用于目标姿态的仿射近似。其他已识别的与此姿态相一致的图像特征以及异常值都忽略不计。最后，通过一个精细的计算可以得出一组可以表明目标存在的详细特征，并给出符合的准确度和可能的错误匹配数。经过所有的这些实验，可以得出这个结论：目标匹配的成功率很高。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;相关研究&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;使用一组局部兴趣点来进行图像匹配的发展可以追溯到1981年Moravec在立体匹配中使用的角探测器。Moravec的探测器在1988年被Harris和Stephens改进，在小的图像变动和近边缘区域具有了更高的重复性。Harris还展示了它在高效运动追踪和由运动恢复进行三维建模中的价值（Harris，1992），Harris的角探测器自此在很多其他的图像匹配工作中被广泛的使用。尽管这个特征探测器被称为角探测器，但它并不是只能选择角，而是可以在一个确定尺度的各个方向上选择所有具有大的梯度的图像位置。&lt;/p&gt;&lt;p align="left"&gt;该方法的最初应用是立体或短距离运动追踪，而后来被扩展到解决一些更困难的问题。Zhang等人在1995年在每个角的周围使用相关窗口来选择可能的匹配，使得Harris的角进行大幅图像范围的匹配成为可能。计算精确场景中两个视角间的几何约束的基础矩阵，移除异常值，同时移除那些与多数方法不一致的配对。同年（1995），Torr研发了一种类似的方法来进行大间距的运动匹配，使用几何约束来移除图像中移动刚体的异常值。&lt;/p&gt;&lt;p align="left"&gt;1997年，Schmid和Mohr的开创性工作展示了不变的局部特征匹配可以被扩展到解决一般的图像识别问题，即使用一个特征与大型图像数据库进行匹配。他们还使用Harris角探测器来选择兴趣点，但他们使用的是一个图像局部区域的旋转不变的描述子来代替相关窗口。这是特征可以在两幅图像之间进行任意方向变化时进行匹配。此外，他们还证明多特征匹配可以通过识别一致的匹配特征聚类，在遮挡和混杂的情况下完成一般的识别工作。&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;Harris&lt;/strong&gt;&lt;strong&gt;角探测器对图像尺度的变化非常敏感。&lt;/strong&gt;因此，对于不同尺度的图像匹配，Harris的角反射器并不能提供很好的基础。本文作者（Lowe）在1999年的早期工作中扩展了这种局部特征方法来实现尺度不变性。这个工作还阐述了一种新的局部描述子，可以降低对局部图像变形的敏感度（如三维视点的变换），同时找到更加鲜明的特征。本文提出了对这一方法更加深入的研发，并分析了这些早期的工作，在稳定性和特征不变性上进行了大量改进。&lt;/p&gt;&lt;p align="left"&gt;在之前的研究中，关于在尺度变换下表征（representation）的稳定识别占了很大的篇幅。最早在这个领域进行研究的有Crowley和Parker，1984年，他们在尺度空间发现了一种表征可以识别峰和脊，并把它们与树结构联系起来。然后，就可以在任意尺度变换的图像间进行树结构的匹配。在近期基于图像匹配的工作中，Shokoufandeh等人在1999年使用小波系数提出了一种更加鲜明的特征描述子。Lindeberg在1993-1994年对为特征探测识别一个合适并且一致的尺度这一问题进行了深入研究。他称之为尺度选择问题，我们在下面使用了这一结论。&lt;/p&gt;&lt;p align="left"&gt;最近，有了大量令人印象深刻的将局部特征扩展为全局仿射变换不变量的工作（Baumberg，2000；Tuytelaars和Van Gool，2000；Mikolajczyk和Schmid，2002；Schaffalitzky和Zisserman，2002；Brown和Lowe,2002）。这使得在变化的正射三维投影平面上的特征匹配具备了不变性，多数情况下采用对图像局部仿射框架进行重采样的方法。然而，还没有一个方法实现了完全的仿射不变性，由于充分勘探仿射空间的成本过高，因此他们用一个非仿射不变的方式对最初特征、尺度和位置进行选择。仿射框架与尺度不变的特征相比，对噪音更加敏感，因此，实践中除非在仿射变形与平面倾斜程度大于40度时（Mikolajczyk，2002），仿射特征比尺度不变的特征重复率要低。对于很多应用，更宽的仿射不变性可能并不重要，因为为了获得三维目标的非平面变化和遮挡的影响，瞄准视角至少每30度旋转一下视点（也就是说对于最靠近的瞄准视角，识别也是在15度以内进行的）。&lt;/p&gt;&lt;p align="left"&gt;尽管本文中的方法不具备完全的仿射不变性，但它使用了一种独特的方法来使局部描述子可以随着描述子很小的变化来显著地改变相关特征的位置。这种方法不仅使描述子可以在相当大范围的仿射变形时进行可靠地匹配，还可以使特征在非平面的三维视点变化时具有更好的鲁棒性。另一个优点是它可以提取出更多的有效特征，并可以识别大量特征。另一方面，在非常大尺度的视角变化下，仿射不变性是匹配平面非常有价值的属性，以后的研究应该在一个有效稳定的方式下，将这一点与非平面的三维视点不变性很好地结合的条件下开展。&lt;/p&gt;&lt;p align="left"&gt;还有许多其他的被推荐进行识别的特征类型，有的可以用于协助本文所述方法在不同环境中进行进一步的匹配工作。其中一种是利用图像轮廓或区域边缘的特征，可被用来减少目标边界附近的聚类背景所带来的干扰。Matas等人在2002年称他们的最大稳定极端区域可以产生大量具有良好稳定性的匹配特征。Mikolajczyk等人在2003年使用局部边缘（edge）而忽略附近的无关边缘，发现了一种新的描述子，即使在重叠背景聚类上狭窄形状的边界附近也可以在寻找稳定的特征。Nelson和Selinger在1998年使用基于图像轮廓分组的局部特征得到了很好的结果。类似的，Pope和Lowe在2000年使用的是基于图像轮廓的等级分类的特征，尤其是对于缺少详尽纹理的目标非常有用。&lt;/p&gt;&lt;p align="left"&gt;对于视觉识别的研究历史包括致力于不同的可被用作特征测量的其他图像属性数集的工作。Carneiro和Jepson在2002年描述了一种基于相位的局部特征，它们用相位来表示而不是局部空间频率的量级，这种方法更有利于光照不变量的提高。Schiele和Crowley在2000年建议使用多维直方图来概括图像区域内的测量值的分布。这种特征对于纹理明显的形状畸变的目标尤为有效。Basri和Jacobs在1997年证明了提取局部区域边界对于识别的价值。其他可以吸纳的有用属性有诸如颜色、运动、图形背景识别、区域形状描述子和立体景深提示等。当有对鲁棒性有提高的可以增强匹配成功率的新特征类型时，只要它们的计算成本对其他特征的影响较小，都可以简单地被局部特征方法采纳作为额外的特征。因此，以后的系统可能会由很多特征类型组合而成。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. 尺度空间极值的发现&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;引言中已经提到了，我们使用一种高效的先识别候选位置然后进一步确认的层叠过滤方法来探测关键点。关键点探测的第一步是识别同一目标在不同视角下可被重复分配的位置和尺度。使用被称为尺度空间的尺度连续函数，通过搜索对所有尺度的稳定特征进行搜索，可以完成对图像尺度变换具有不变性的位置探测。（Witkin，1983）。&lt;/p&gt;&lt;p&gt;Koenderink和Lindeberg分别在1984年和1994年提出经过一系列合理的假设，尺度空间唯一可行的核就是高斯函数。因此，被定义为一幅图像尺度空间函数的L(x,y,&amp;sigma;)是由尺度可变的高斯函数G(x,y,&amp;sigma;)和输入图像I(x,y)的卷积产生：&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051910374575.jpg" alt="" width="228" height="36" /&gt;其中*为x和y之间的卷积运算。而&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051910383825.jpg" alt="" width="220" height="44" /&gt;&lt;/p&gt;&lt;p&gt;为了在尺度空间中高效地探测出稳定的关键点位置，我们假设（Lowe，1999）使用尺度空间在高斯差分中的极值与图像卷积。可以计算得到两个相邻的由常数乘系数k分离的尺度的差值：&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051910395311.jpg" alt="" width="483" height="27" /&gt;&lt;/p&gt;&lt;p&gt;有很多选择这个函数的理由。首先，这是一个高效计算的函数，因为平滑图像L需要计算尺度空间特征描述的任何情况，而D只需计算简单的图像减法。&lt;/p&gt;&lt;p&gt;另外，Lindeberg于1994年研究表明，高斯差分函数可以提供高斯拉普拉斯的尺度规范化解得近似值&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910402923.jpg" alt="" width="47" height="26" /&gt;。Lindeberg展示了拉普拉斯在真实尺度不变性所要求的&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910414026.jpg" alt="" width="24" height="24" /&gt;因素下的标准化。在更加精细的实验对比中，Mikolajczyk于2002年发现，与其他可能的图像函数如梯度法、Hessian法和Harris角函数相比，&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910402923.jpg" alt="" width="47" height="26" /&gt;的最大值和最小值产生了最稳定的图像特征。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D和&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910402923.jpg" alt="" width="47" height="26" /&gt;的关系可以从热扩散公式来理解（参数以&amp;sigma;而不是常见的&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910422969.jpg" alt="" width="44" height="24" /&gt;形式）：&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051910432696.jpg" alt="" width="72" height="41" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由此，我们可以看出&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910440831.jpg" alt="" width="31" height="28" /&gt;可以用在两个相邻的尺度k&amp;sigma;,&amp;sigma;求解最终的差分近似为&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910444153.jpg" alt="" width="26" height="40" /&gt;：&lt;/p&gt;&lt;p align="center"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910450739.jpg" alt="" width="240" height="47" /&gt;&lt;/p&gt;&lt;p&gt;因此，&lt;/p&gt;&lt;p align="center"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910453316.jpg" alt="" width="256" height="33" /&gt;&lt;/p&gt;&lt;p&gt;这表明，当高斯差分函数的尺度被常系数区分开后，它就包含了拉普拉斯尺度不变性要求的&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910414026.jpg" alt="" width="24" height="24" /&gt;尺度标准化。等式中的系数（k-1）是所有尺度的常数，因此不影响极值的位置。K越接近1，估计误差就越趋向于0，但是实践中我们发现估值对极值探测的稳定性和即使是最显著的尺度差距的定位，如 &lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910462213.jpg" alt="" width="52" height="23" /&gt;几乎没有影响。&lt;/p&gt;&lt;p&gt;构建D(x,y,&amp;sigma;)的有效方法如图1所示。初始图像与高斯函数递增地卷积形成图像，通过尺度空间的常系数k被分开，如左图的堆放的层。我们将尺度空间中的每个组（如&amp;sigma;的两倍）分为整数，间距为s，所以&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910482091.jpg" alt="" width="52" height="26" /&gt;。我们必须在每个组的堆中建立s+3幅模糊的图像才能完成覆盖全部组的极值探测。临近的图像尺度相减便产生了高斯差分图像，如右图所示。一旦完成了所有组的处理，我们就用&amp;sigma;代替初始值2&amp;sigma;（顶层的堆中会产生2幅图像）在每行每列的每个亚像素（second pixel）对高斯图像进行重采样。相对于&amp;sigma;，采样的精度与第一个组没有差别，但计算量被很大程度上地降低了。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051909013587.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图1. 对于每个尺度空间的组，初始图像与高斯函数多次卷积所得尺度空间如图像左边所示。相邻的高斯图像相减产生了右边的差分高斯图像。每个组后，高斯图像被降采样2倍，重复该过程。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;3.1 &lt;strong&gt;局部机制探测&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;为了探测到D(x,y,&amp;sigma;)的局部最大值和最小值，每个样本点都要和它当前图像的八个近邻已经上下尺度上的各九个近邻相比较（如图2）。只有在它比所有近邻大或者小时才会被选择。因为在前几次检查中大多数的样本点会被排除，因此，这个检查的代价相对较小。&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051909024549.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图2. 在现下的尺度和邻近度（记为圆），通过将一个像素（记为叉）与其临近的3*3区域内的26个像素进行对比，得到高斯差分图像的最大值和最小值。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 确定图像和尺度空间中样本的频率非常重要，需要对极值进行可靠地探测。不幸的是，无法找到可以探测到所有极值的最小采样间隔，因为极值之间可以任意程度的接近，无规律可循。可以想象黑色背景上有一个白色的圆圈，在尺度空间的最大值处为圆形高斯差分函数区域的正中心，它与圆的大小和位置匹配。对于一个被拉长的椭圆形，它的每个端点（end）都有一个最大值。最大值的位置是一个图像的连续函数，对于那些中间被拉长的椭圆形将有从一个极值到两个极值的过渡，在过渡中，极值会任意的接近彼此。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 因此，我们必须使用一个权衡效率和完整性的方案。实际上，正如我们所想，也被我们的实验所证实，相邻近的极值对图像很小的摄动是很不稳定的。我们可以通过对很大范围内采样频率的研究和使用那些在匹配任务的逼真模拟中提供了最可靠结果（的数据）来决定最好的选择。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2 &lt;/strong&gt;&lt;strong&gt;尺度采样的频率&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051910320865.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图3. 第一幅图上一条线是关键点在一幅被转换的图像的同一位置和尺度被重复探测的百分率，作为一个组采样的尺度数的值。下面的那条线是关键点的描述子与大型数据库正确匹配的百分率。第二幅图表示的是在一幅典型图像中被探测到的关键点总数，以此作为尺度采样的数值。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;如图3和图4所示为采样频率所决定的取极大值的稳定性实验。这些图（以及本文中的大多数模拟）是基于一组32幅不同范围的真实图像的匹配工作，图像包括外景、人脸、航空影像和工业图像（经研究发现图像域对结果无任何影响）。每幅图像都经过了一系列的变换，包括旋转、缩放、仿射拉伸、明亮度对比度变化和增加图像噪声。改变是综合的，这样才有可能精确地推断初始图像的每个特征在转换后的图像中如何呈现，从而可以对每个特征测量正确的重复率和位置的准确性。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051910330615.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图4. 图中顶部的那条线表现的是关键点位置在转换的图像中被重复探测到的百分率，被作为对每个组第一级优先图像平滑的函数。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;图3所示为用于检查在极值探测前采样的图像函数每个组尺度数变化的效果。在这个情况下，每幅图像都经过随机角旋转和初始图像0.2-0.9倍的随机缩放，然后被重采样。降分辨率图像的关键点与初始图像进行匹配，因此所有关键点的尺度将被呈现在匹配图像中。另外，添加了1%的图像噪声，也就是说在[0,1]范围内变化的像素值将被随机添加一个在[-0.01,0.01]内等间距变化的随机数字（相当于降低图像像素6比特的准确度）。&lt;/p&gt;&lt;p align="left"&gt;图3中的首行为关键点在一幅转换后图像进行匹配，位置和尺度被探测到的百分率。本文中所有的例子，我们都将匹配尺度定义为正确尺度的&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012051910495214.jpg" alt="" width="26" height="23" /&gt;倍，匹配位置为&amp;sigma;个像素以内，&amp;sigma;为关键点的尺度（定义为高斯差分函数中使用的最小高斯函数的标准差）。图中下面的一行为使用最近邻匹配法，与有40,000个关键点的大型数据库正确匹配的关键点数，详细过程在第六章讲述（这表明关键点被重复定位对识别和匹配工作非常有利）。这幅图表示当每个组采样3个尺度时，重复率最高，这也是本文中其它实验所使用的采样尺度数。&lt;/p&gt;&lt;p align="left"&gt;采样的尺度是不是越高重复率就越好，这一点可能让人觉得有些奇怪。这是因为在很多被探测到的局部极值结果中，这些（尺度高的）结果稳定性较差，因此在转换图像中被探测到的几率也就降低了。可以由图3中的第二幅图看出，关键点被探测出来的平均数以及每幅图像中正确的匹配数。关键点数随采样尺度增加而提高。由于目标识别成功与否更多的是依赖于关键点正确匹配的数量，而不是它们匹配的正确率，因此对于很多应用而言，选择较大的尺度采样才是最佳选择。然而，计算成本也会随之增大，因此本文中的实验我们选择使用每个组3个采样尺度。&lt;/p&gt;&lt;p align="left"&gt;总而言之，这些实验表明高斯差分函数的尺度空间有很多的极值，但是完全的探测到它们成本很高。幸运的是，我们只使用一些较大的采样尺度就可以探测到很多有用而稳定的子集。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.3&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;空间域采样的频率&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;我们刚决定尺度空间每组的采样频率，接下来要确定与平滑尺度相关的图像域中的采样频率。极值可能任意程度上的接近彼此，这里有一个类似的堆采样频率和探测率的权衡。图4所示为优先平滑函数的决策实验，应用于建立每个组的尺度空间代表前。同样，图中顶部的那条线表示关键点探测的重复率，结果显示重复率随&amp;sigma;的增大而增大。然而，使用大的&amp;sigma;对效率有所影响，所以我们选用&amp;sigma;=1.6来实现近似最佳的结果。这个值在本文中（包括图3中的结果）被普遍应用。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当然，如果我们在极值探测前对图像进行预平滑处理，我们就有效地剔除了最高的空间频率。这样，要充分利用输入，相比初始图像，图像可以被扩展来获取更多的采样点。在建立金字塔第一层之前，我们使用线性插值使输入图像的大小加倍。对原始图像使用亚像素补偿滤波可以有效的等价运算，但图像加倍的实现更加有效。我们假设原始图像有至少&amp;sigma;=0.5的模糊（防止显著混淆现象的最小值），因此相对新的像素空间，加倍的图像有&amp;sigma;=1.0。这意味着在创建第一组的尺度空间前，增加小量的平滑是必要的。图像加倍使稳定的关键点数增加了近4倍，但使用更大的扩展系数没有更明显的提高。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. 准确的关键点定位&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;完成了像素与其近邻的比较就可以得到关键点的候选值，下一步就是完成附近数据位置、尺度和主曲率的精细配置（fit）。这个信息使低对比度的点（对噪音敏感）或定位在边角的差点被淘汰。&lt;/p&gt;&lt;p&gt;这个方法的初步（Lowe，1999）简单地实现了关键点定位于中心样本点的位置和尺度。然而，Brown最近改进了此方法（Brown和Lowe，2002）。通过局部样本点的三维二次方程配置来决定最大值的插值位置。他的实验表明这一改进很大程度地提高了匹配和稳定性。他的方法对尺度空间方程D(x,y,&amp;sigma;)使用了泰勒级数展开（到二阶）变换，把样本点作为原点。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052311081323.jpg" alt="" /&gt;　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 　（2）&lt;/p&gt;&lt;p&gt;其中D和它的导数是样本点的估值，而&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311101374.jpg" alt="" /&gt;为这一点的补偿。通过对函数求关于x的偏导并设为零得到极值的位置 ：&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052311103077.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;如Brown建议的，Hessian法和对D求导都是对相邻样本点使用差分来求估计值的。可以在最小的成本下得到3*3的线性系统的结果。如果&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311101374.jpg" alt="" /&gt;在任何维度的补偿大于0.5，就意味着极值与另一个样本点更为接近。这时，样本点改变，并进行插值取代该点。最终的补偿值&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311101374.jpg" alt="" /&gt;加到样本点的位置上来获取极值位置的插值估计值。&lt;/p&gt;&lt;p&gt;极值处的函数值&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311140230.jpg" alt="" /&gt;对排除低对比度的不稳定极值非常有用。这个可以通过用公式（3）代替（2）得到。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311134138.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;对于本文中的实验来说，所有极值的&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311140230.jpg" alt="" /&gt;小于0.03的都要被排除（如前假设，我们设图像像素值在[0,1]的范围内）。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;图5所示为在自然图像上进行关键点选择的结果。为了防止太多的聚类，我们使用了一个233*189像素的低分辨率图像，关键点被变现为矢量形式，给出了每个关键点的位置、尺度和方向（方向的指定见下文）。图5（a）所示为原始图像，后面的图像对其进行了降对比度。图5（b）所示为高斯差分函数探测到的所有最大值和最小值。而（c）所示为除去&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311140230.jpg" alt="" /&gt;值小于0.03所剩的729个关键点，（d）部分将在后面的章节中介绍。&lt;/span&gt;&amp;nbsp;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052311150979.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;图5. 本图表示的是关键点选择的阶段。（a）233*189个像素的初始图像。（b）高斯差分公式最大值和最小值确定出的832个关键点位置，关键点被显示为矢量形式，表示尺度，方向和位置。（c）对最小值对比设置临界值后，还剩下729个关键点。（d）附加一个主曲率极限后，最终剩下的536个关键点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4.1&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;排除角反射&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对稳定性而言，只去除低对比度的关键点是不够的。即便在边缘处的点具有很差的决策性并且对很小的噪声很不稳定，高斯差分函数也会有很强的反应。高斯差分函数中一个定义不好的峰值将会对边缘处产生很大的主曲率，而在垂直方向上产生很小的主曲率。主曲率可以通过一个2*2的Hessian矩阵来计算。H在关键点的位置和尺度上。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052311161118.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt; （4）&lt;/p&gt;&lt;p&gt;通过对近邻样本点的差分来估计导数值。&lt;/p&gt;&lt;p&gt;H的特征值与D的主曲率成比例。借用Harris和Stephens（1988）的方法，我们可以明确地避免特征值的计算，而只关心它们的比值。设&amp;alpha;为最大量级的特征值，而&amp;beta;为最小量级的。然后我们可以通过求H的迹来获得特征值的和，从行列式获得它们的积：&lt;/p&gt;&lt;p align="center"&gt;&amp;nbsp;&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052311154829.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;行列式不可能为负，曲率符号不同时，点不为极值，舍去。设r为最大量级特征值和最小特征值之比。所以&amp;alpha;=r&amp;beta;。接下来，&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052311170639.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;只取决于特征值的比而不是它们各自的值。当两个特征值相等时，（r+1）&lt;sup&gt;2&lt;/sup&gt;/r最小，并随r的增加而增加。因此，要看主曲率是否低于某个极限，我们只需要检查：&amp;nbsp;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052311175436.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;这个计算非常高效，当对每个关键点只需进行小于20次的浮点运算检测。本文中的实验使用的r值为10，这意味着认为关键点在主曲率间的比值大于10。图5中（c）到（d）的转换即为这个运算的结果。&lt;/p&gt;&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5. &lt;/strong&gt;&lt;strong&gt;定向任务&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;通过局部图像属性给每个关键点指定一个的方向，关键点描述子可以与这个方向相关，从而实现图像旋转的不变性。这个方法和Schmid和Mohr（1997）的方法相比，他们的每个图像属性都是基于一个旋转不变的测量。他们方法的缺点就是它限制了可用的描述子，并因为没有要求所有测量都基于一个一致的旋转而丢失了图像信息。&lt;/p&gt;&lt;p&gt;下面的实验使用了很多方法来指定局部方向，下面的方法为找到最多稳定结果的。关键点的尺度是用来选择尺度最接近的高斯平滑图像L的，这样所有的计算都是在一个尺度不变条件下进行的。对于每个图像样本L(x，y)，在这个尺度下，梯度量级m（x，y）和方向&amp;theta;（x，y）是用像素差预计算出来的：&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052315423937.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;一个方向直方图是用关键点周围区域的样本点的梯度方向组成的。方向直方图有36个柱子，覆盖360度方位角。每个加到直方图的样本都被它的梯度量级定权，再被该处关键点尺度1.5倍的&amp;sigma;的高斯圆形窗口定权。&lt;/p&gt;&lt;p&gt;方向直方图的峰值与局部梯度的主方向相对应。直方图中的最高峰值首先被探测到，然后是占最高峰80%以上的局部峰值也会在该方向建立一个关键点。因此，对于有多个相似量级的位置，可以在该位置和尺度创建多个不同向的关键点。只有15%的点会被指定多个方向，但它们对匹配的稳定性意义很大。最后，得到一个与3个直方图值配准（fit）的过每个峰值最接近的更准确峰位的插值抛物线。&lt;/p&gt;&lt;p&gt;图6所示为在不同数量的图像噪声下，位置、尺度和方向指定的实验稳定性。如前，图像被随机地旋转缩放过。顶端的线为关键点位置和尺度指定的稳定性。第二条线为当方向指定在15度以内的匹配稳定性。上面两条线之间的差距可以看出，即使加了10%的像素噪声。方向指定保留了时间95%的准确性（相当于相机有小于3比特的准确度）。正确匹配的方向量测变化为25度左右，当有10%的噪声时，升为3.9度。图6最下面一条线为一个关键点描述子与一个有40,000个关键点的数据库匹配正确的最终准确率（下文讨论）。如图所示，SIFT特征对大量的像素噪声具有抵抗性，而错误的主要原因在初始位置和尺度的探测。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052315404894.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图6. 图中顶行显示的百分率为像素噪声的函数，是可重复检测的关键点的位置和尺度。第二行显示的是之后的重复率，同样要求方向一致。最下一行为最后与大型数据库正确匹配的描述子的百分率。&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="center"&gt;&lt;strong&gt;6. 局部图像描述子&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;之前的操作已经指定了图像的位置，尺度和每个关键点的方向。这些参数定义（impose）了一个可重复的局部二维坐标系统，可以在里面定义局部图像区域，从而为这些参数提供不变式。下一步就是为局部图像区域计算描述子，它要非常鲜明，同时对于剩下的变化尽可能的保持不变性，如光照或三维视点的改变。&lt;/p&gt;&lt;p&gt;一个明显的方法就是在合适的尺度的关键点周围的局部图像亮度进行采样，使用归一化的相关方法进行匹配。然而，简单的图像块的相关性对变化非常敏感，，从而导致样本的误匹配，如仿射变化或三维视点变化或非刚性变形。Edelman等人在1997年提出了一个更好的方法。他们提出的方法是基于生物视觉的，尤其是主视觉皮层中复杂的神经细胞。这些复杂的神经细胞对某个方向和空间频率的梯度变化反应，但梯度在视网膜上的位置却是在一个可以接受的范围（field）内变化而不是精确地固定。Edelman等人假设这些复杂神经细胞的函数使得我们进行匹配和一定视点范围内三维目标的识别。他们展示了详细的实验，通过三维计算机目标和动物形状的模型表明在允许位置变化下的匹配梯度比在三维旋转下的分类结果要好得多。（They have performed de-tailed experiments using 3D computer models of object and animal shapes which show that matching gradients while allowing for shifts in their position results in much better classification under 3D rotation.）比如说，在使用复杂的细胞模型后，三维目标在20度景深下旋转的识别准确率从35%的梯度相关性升为94%。我们的下面的实践正是受这个思想的启发，但使用的是另一种计算机制来允许位置变化。&amp;nbsp;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052421160915.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图7. 要创建一个关键点描述子首先要计算关键点位置附近区域的每个图像样本点的梯度大小和方向，如左图所示。它们由高斯窗口定权，由重叠的圆形表示。然后如右图所示，将这些样本聚集为方向直方图，每4*4个子区域概括为一个。这里的每个箭头的长度均为该区域内这个方向附近梯度模值的总和相对应。图中所示的2*2的描述子箭头就是由8*8的样本集计算出来的，本文所使用的是由16*16的样本集中计算出来的4*4的描述子。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6.1 &lt;/strong&gt;&lt;strong&gt;描述子表达&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;图7表明关键点描述子的计算。首先，图像的梯度量级和方向是在关键点周围的采样，使用关键点的尺度来选择图像高斯模糊的程度。为了达到方向不变性，我们描述子的坐标和梯度方向都是随关键点方向进行旋转的。为了高效性，如第五章中所提到的，金字塔中所有等级的梯度都被预计算出来了。在图7的左边，它们在每个样本位置处以小箭头标出。&lt;/p&gt;&lt;p&gt;&amp;sigma;为描述子窗口宽度1.5倍的高斯定权公式用来指定每个样本点的权。这个如图7左边的圆形窗口所示，使得权重可以平滑的减弱。高斯窗口的目的是为了防止描述子在窗口位置发生微小变化下的突变，给远离描述子中心的梯度更少的关注，这些梯度对误匹配影响最大。&lt;/p&gt;&lt;p&gt;关键点描述子如图7右侧所示。它通过在4*4的样本区域建立方向直方图使得梯度位置可以发生较大的变化。每个方向直方图有八个方向，每个箭头的长度与该直方图输入的量级有关。一个左边的梯度样本可以变为四个样本位置，并向右边的直方图输出值，从而实现了更大的局部位置变化的目的。&lt;/p&gt;&lt;p&gt;当描述子在从一个直方图到另一个直方图或从一个方向平滑地变向另一个方向时发生突变，防止所有的边缘影响很重要。因此，三线性插值用来给每个梯度样本向邻近的箱（柱子）内分配值。换句话说，就是每个箱中的输入都是乘过了1-d各个方向的权值的，其中d为以直方图各柱子之间的空间为单位测量的样本到中心柱子的距离值。&lt;/p&gt;&lt;p&gt;描述子由保存所有方向直方图的值得矢量得到，对应于图7右边图中箭头的长度。图像显示了一个2*2阵列的方向直方图，而我们下面的实验表明每个方框里有八个方向的4*4阵列的直方图所得结果最优。因此，本文所用的为每个关键点有4*4*8=128个元素特征矢量的。&lt;/p&gt;&lt;p&gt;最终，为了减弱光照变化的影响，特征矢量被修改。首先，矢量被标准化为单位长度。对图像对比度的改变就是讲每个像素值乘以一个常数，这样整个梯度也会乘上同一个常数，这种对比度变化会被矢量归一化抵消掉。亮度变化中图像里的每个像素都会加一个常数，这不会影响到梯度值，因为梯度值是像素值之差。因此，描述子对于光照的仿射变化是具有不变性的。然而，非线性光照变化也可能是由于相机饱和度或光照变化影响了不同数量不同方向的三维表面。这些影响可能会造成一些梯度相关量级的巨大变化，但对梯度方向影响很小。因此，我们减少将每个单位特征矢量不大于0.2的这个限定对大的梯度量级的影响，然后对单位长度进行重归一化。这意味着匹配大梯度量级不再是一件重要的事，而更加强调方向的分布。值0.2是通过图像对相同的三维目标保留不同光照的实验得到的。&lt;/p&gt;&lt;p&gt;6.2 &lt;strong&gt;描述子测试&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;有两个参数可被用为变化描述子的复杂度：在直方图中的方向数r和n*n方位直方图阵列的宽n。最终描述子矢量的大小为&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052421173623.jpg" alt="" /&gt;。当描述子的复杂度增加时，在大型数据库中的区分度更好，但它对形状畸变和闭塞也更为敏感。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052421175984.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&amp;nbsp;&lt;span style="font-size: 12px;"&gt;图8. 本图描述的为宽为n*n的关键点描述子以及每个直方图方向数的函数，是关键点与数据库中40,000个关键点正确匹配的百分率。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;图8所示的实验结果，其中方向数和描述子大小为变化的。图是用一个视点变换得到的，其中平面相比观察者倾斜了50度，并添加了4%的噪声。这接近了可靠匹配的极限，也是在这种更加困难的情况下，描述子的表现才更为重要。结果为在40，000个关键点的数据库在找到正确匹配的最近邻单点的关键点百分数。图中显示所得，单个方向的直方图（n=1）的区分度很差，但增加直至一个4*4阵列的八方向直方图的过程中结果一直在改善。这之后，再增加方向或加大描述子只对匹配造成了影响，使得描述子对畸变更加的敏感。在其他视角角度变化和噪声情况下，结果是相似的。尽管在一些简单的情况下，区分度（从最高级）继续提高直至5*5和更高的描述子大小。但我们在本文中仍使用4*4的8方向描述子，可产生128维的特征矢量。尽管描述子的维数好像很高，但我们发现这在一系列匹配任务中比低维度表现更好，而且匹配的计算成本在使用如下介绍的近似的最近邻方法中也很低。&lt;/p&gt;&lt;p&gt;6.3 &lt;strong&gt;仿射变化敏感度&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052421182626.jpg" alt="" width="483" height="329" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&amp;nbsp;&lt;span style="font-size: 12px;"&gt;图9. 本图所示为关键点位置、方向和最终与数据库匹配的探测的稳定度，作为仿射变换的一个函数。仿射变换的程度由平面内一组等视点景深旋转来表示。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;描述子对仿射变化的敏感度如图9所示。图中所示为关键点位置和尺度选择、方向分配和与一个与远离观察者的平面中进行深度旋转函数的数据库进行最近邻匹配的可靠性。可以看出，每个计算阶段中，随着仿射畸变的增加，重复率的下降，但在最后，对于一个视点变化50度时，匹配的准确度仍是保持在50%之上。&lt;/p&gt;&lt;p&gt;为了实现大视点角情况下可靠的匹配，如第二章所讲，可以使用一种仿射不变的探测器来对图像区域进行选择和重采样。那里提到，由于这些方法都是起源于一个非仿射不变的图像的初始特征位置，所以它们并不具有真正的仿射不变性。在看起来最具有仿射不变性的方法中，Mikolajczyk（2002）对Harris仿射探测器假设并执行了详细的实验。他发现，它的关键点重复率比这里给出的50度的视点角要低，但在角度为70度时，保持在接近40%的重复率上，在极值仿射变换中表现更好。缺点是计算成本高，关键点数量少和在噪声下设定一致仿射变换框架误差对小的仿射变换稳定性差。实际上，三维目标允许的范围是远少于对平面的，所以仿射不变性在匹配视点变化时并不是限制因素。如果要求大范围的仿射不变性，如要求表面为平面，那么一个简单的解决方案就是去采用Pritchard和Heidrich（2003）的方法，生成由训练图像的4仿射变换的版本到60度视点的变化的附加SIFT特征。这使得标准SIFT特征的使用在图像识别处理中没有增加新的运算成本，但在因素为3的特征数据库的大小增加了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6.4 &lt;/strong&gt;&lt;strong&gt;与大型数据库匹配&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052421185937.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图10. 虚线表明关键点与数据库正确匹配的百分率，为数据库大小的一个函数（使用对数尺度）。实线为关键点分配正确的位置、尺度和方向。图像有随机尺度和旋转变换，30&amp;deg;的仿射变换和2%的图像噪声被预先加入匹配中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;一个测量特征鲜明性的重要遗留问题是匹配重复率如何作为一个匹配数据库中的特征数的函数变化。本文中大多数的例子是使用一个32幅图像，40,000个关键点的数据库而生成的。图10所示匹配重复率如何作为一个数据库大小的函数变化的。这幅图像是使用一个更大的有112幅图像的数据库生成的，视点旋转深度为30度，添加了2%的噪声，图像进行了随机地尺度变化和旋转。&lt;/p&gt;&lt;p&gt;虚线表明数据库中以最近邻为正确匹配的图像特征的部分，它作为数据库大小的函数以对数的形式显示出来。最左端的点是与由一张图像中得到的特征进行匹配而最右端的点是从含有112幅图像的数据库的所有特征中选择的匹配。可以看出匹配的可靠性在以干扰项数目为函数时降低了，而所有的显示表明在更大的数据库大小下更多的正确匹配将继续被找到。&lt;/p&gt;&lt;p&gt;实线为关键点在转换图像的正确匹配的位置和方向被识别的百分率，所以只有这些点在数据库中有机会有匹配的描述子。这条线平缓（flat）的原因是测试在整个数据库中运行了每个值，但只改变了数据库中一部分用来干扰的部分。有趣的是，两条线之间的间隔很小，表明匹配失败更多的是因为初始特征定位和方向分配的问题，而不是特征鲜明性的问题，而不是大型数据库大小的问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7. &lt;/strong&gt;&lt;strong&gt;目标识别的应用&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如上所示，本文主要讨论的是鲜明不变性关键点的派生。为了展示它们的应用，我们给出它们在目标遮挡和聚类情况下进行识别的应用。更多关于这些特征的识别应用参见其它文献（Lowe，1999；Se等人，2002）。&lt;/p&gt;&lt;p&gt;目标识别首先要将每个关键点独立的与从训练图像中提取的关键点进行匹配。由于模糊的特征和从背景聚类中得到的特征，很多这些最初的匹配是不正确的。因此，首先识别那些与一个目标或其姿态一致的至少有三个特征的聚类，因为他们比那些独立特征有更高的可能被正确匹配。接下来，通过履行一个与模型合适的精细几何来检查每个聚类，并判断结果，决定采纳还是放弃解译。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7.1&lt;/strong&gt;&lt;strong&gt;关键点匹配&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;通过在由训练图像得到的关键点数据库中识别最近邻，我们找到了每个关键点的最佳候选匹配。如第六章所述，最近邻定义为每个关键点的不变描述子矢量之间的最短欧氏距离。&lt;/p&gt;&lt;p&gt;然而，图像中的很多特征与训练数据库可能没有任何正确的匹配，因为它们是从背景聚类中提出的或没有在训练图像中被探测到。因此，有一种方法来丢弃与数据库没有很好地匹配的特征很有用。对最近距离特征的全局限值执行的并不尽如人意，因为一些描述子比其他的要鲜明很多。更有效的方法是使用最近距离与次近距离的比值。如果有同一目标的很多训练图像时，我们定义与第一个来自不同目标的次近距离为最近距离，就像使用含有不同目标的已知图像一样。这个方法执行很好，因为正确匹配需要最近邻显著地接近那些最接近的错误匹配来达到可靠性匹配。对于错误的匹配，由于特征空间的高维度，相似距离内会有很多其他的错误匹配。我们可以把次近距离匹配作为对特征空间的这一部分错误匹配密度的一个估计并同时识别特征不明确的特殊实例。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052510471089.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图11. 匹配的正确性可由距离比率决定，即用最近邻距离除以次近邻的距离得到。使用一个有40,000个关键点的数据库，实线显示的为正确匹配距离比率的概率密度函数，而点线为错误的概率密度函数。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;图11表明用这种方法对真实图像数据的测量值。正确和不正确匹配的可能性密度函数以每个关键点最近邻与次近邻之比表示。最近邻为正确匹配的概率密度函数的中心比错误匹配的比率低很多。对于我们的目标识别的执行，我们丢弃那些距离比值大于0.8的匹配，这样可以在仅仅丢弃5%的正确匹配的前提下，减少90%的错误匹配。图像是在一个40,000关键点的数据库中，以随机尺度和方向变化下匹配图像生成的，旋转深度为30度，添加了2%的噪声。&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;7.2 &lt;/strong&gt;&lt;strong&gt;有效的最近邻函数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;没有一个现行算法可以在识别高维空间点的准确最近距离时优于穷搜索法（exhaustive search）。我们的关键点描述子有128维的特征矢量，而最好的算法，如k-d树（Friedman等人，1977年）也无法在多于10维的空间中提供比穷搜索法更快速的性能。因此，我们用了一种近似的算法，叫做最优盒优先（BBF）算法（Beis和Lowe，1997）。这是在场景中近似的返回具有最高可能性的最近邻。&lt;/p&gt;&lt;p align="left"&gt;BBF算法使用了一种k-d树算法的改进算法，使得特征空间中的箱是以它们在队列位置中最的近距离的顺序被检索。这种优先顺序最早是由Arya和Mount（1993）实践的，他们在Arya等人（1998）的文献中对其计算性能提供了更进一步的研究。这个搜索顺序要求使用一种基于堆优先的队列来实现搜索顺序的高效决策。在检索了特定量的最近箱之后，中断进一步的搜索可以低计算成本的返回一个近似结果。在我们的实现中，我们在检查了最开始的200个最近邻候选值后，中断了搜索。对于一个有100,000个关键点的数据库，它比准确的最近邻搜索加速了约两个数量级，而正确匹配的结果只损失了不到5%。BBF算法运行如此良好的一个原因是我们只考虑了最近邻比次近邻小于0.8以内的这些匹配（如前面章节中提到的），因此无需考虑那些很多近邻距离非常接近的困难情况。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7.3 &lt;/strong&gt;&lt;strong&gt;霍夫变换的聚类&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对小而高度遮挡的目标识别实现最大化，我们希望以最少的可能的特征匹配数进行目标识别。我们发现在最少使用3个特征的情况下可靠识别是可能的。一个有着2，000个或更多特征的典型图像可能会有很多不同的目标和聚类背景。而第七章中所述的距离比率实验允许我们从聚类背景中丢弃大量的错误匹配，而这并不减少其他有效目标的匹配。通常，我们仍需要从含有99%异常值的匹配中找到那少于1%的正常值识别正确的子集。很多众所周知的稳健地配置（fitting）方法，如RANSAC或最小平方中值，在正常值小于50%时运算结果就会很差。幸运的是，在姿态（pose）空间使用Hough转换（Hough，1962；Ballard，1981；Grimson，1990）的聚类特征可以很好的表现。&lt;/p&gt;&lt;p align="left"&gt;霍夫转换通过每个特征与所有目标中特征一致的姿态进行投票通过（vote for）的一致性解译来识别聚类。当发现特征聚类与一个目标投票通过了同一姿态，这种解译正确的可能性比任何单一特征要高很多。我们的每个关键点都有4个参数：二维位置，尺度和方向，而数据库中每个匹配的关键点都有这个关键点与找到的训练图像相关联的记录。因此，我们可以建立一个霍夫变换，由匹配假设输入预计的模型位置，方向和尺度。这个预计有很大的误差界限，因为这四个参数的相似变换只是一个三维目标全六自由度的姿态空间的估计值，并且没有做任何非刚性的变换。因此，我们30度方向的宽箱大小，2因素的尺度以及投影训练图像位置维数（使用预计的尺度）最大值的0.25倍。为了防止边界效应在箱指定中的问题，每个关键点匹配在每个维度中都指定（vote for）了两个最近的箱，这个假设共有16个输入，姿态范围扩宽更多。&lt;/p&gt;&lt;p&gt;在多数霍夫转换的实现中，用多维阵列来表现箱。然而，很多潜在的箱保持为空，由于它们共有的依赖性，很难计算箱值可能的范围（比如说，选择范围上可能的位置离散值的依赖性）。这些问题可通过使用箱值的伪随机散列函数向一维散列表中插入投票（votes），从而可以简单的探测到冲突。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;strong&gt;7.4 &lt;/strong&gt;&lt;strong&gt;仿射参数的解决方法&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;霍夫转换是用来识别箱中至少有三个实体的所有聚类。每一个这样的聚类都要进入一个用最小二乘法来计算与训练图像向新图像转换有关的最佳的仿射投影参数的几何验证程序。&lt;/p&gt;&lt;p align="left"&gt;在正射投影下，仿射变换可以正确求解（account for）一个平面的三维旋转，但对于非平面的目标的三维旋转估值就很差了。更普遍的方法是解基础矩阵（Luong和Faugeras，1996；Hartley和Zisserman，2000）。然而，与仿射法只需要3个点匹配相比，一个基础矩阵式要求至少7个，而实际中，为了更好的稳定性，需要更多的匹配。我们希望只用三个特征匹配就完成识别，因此仿射变换就提供了一个很好的起始点，我们可以通过将允许的残差值增大来计算（account for）仿射估计中的误差。想象在目标周围放了一个球形，然后将球形旋转30度，球内的任意点不会移动超过球形投影直径的0.25倍。对于本文中的一个典型三维目标的例子，在我们允许残差不大于目标投影维数的最大值的0.25倍时，仿射方法可以很好地解决问题。Brown和Lowe（2002）提出了一种更普遍的方法，初值由相似变换得到，然后计算已经找到足够匹配数的基础矩阵。&lt;/p&gt;&lt;p align="left"&gt;模型点&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052510525149.jpg" alt="" /&gt;对于图像&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052510530518.jpg" alt="" /&gt;的仿射变换可以被写为：&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052510532049.jpg" alt="" /&gt;其中，&lt;img src="http://pic002.cnblogs.com/images/2012/398076/2012052510534146.jpg" alt="" /&gt;为模型变换，而m&lt;sub&gt;i&lt;/sub&gt;参数表示仿射旋转、缩放和拉伸。&lt;/p&gt;&lt;p align="left"&gt;我们希望解出变换参数，因此，上式可以被重写为将未知量变为列向量的形式：&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052510542079.jpg" alt="" width="204" height="151" /&gt;&lt;/p&gt;&lt;p align="left"&gt;这个等式表示的是一个单独的匹配，但可以添加后续匹配的数值，每个匹配都要在第一个和最后一个矩阵中加两行。要解这个式子，至少需要三对匹配。&lt;/p&gt;&lt;p align="left"&gt;我们可以把这个线性系统写为：&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052510545140.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="left"&gt;参数x的最小二乘法可以通过解对应的法方程得到，&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012052510551617.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="left"&gt;它为投影模型的位置到图像位置的距离平方和的最小值。这个最小二乘法可以扩展来解决铰接的灵活的目标的三维姿态和内部参数（Lowe，1991）。&lt;/p&gt;&lt;p align="left"&gt;通过检查每个图像特征和模型之间的一致度就可以移除异常值。有了更加准确的最小二乘法，我们要求每个匹配要在霍夫转换箱（bin）中的参数的误差一半的范围以内。如果排除异常值后少于三个点，则这次匹配失败。当排除异常值后，要用最小二乘法再次计算留下的点，依次迭代下去。另外，自上而下的进行相位（phase）是为了增加与投影模型位置一致的匹配。可能会在霍夫转换箱时丢失的一些匹配是由于转换的相似性或其它错误。&lt;/p&gt;&lt;p align="left"&gt;最后是否接受这个假设取决于之前文章中提到过的精细概率模型（Lowe，2001）。这个方法首先用来在给出模型的投影大小，区域中的特征数和配置（fit）的准确度的情况下，解决模型姿态的错误匹配期望数。贝叶斯分析给出了目标基于实际找到的匹配特征被表现出来的可能性。如果最终正确解译出的可能性大于0.98，我们就接收这个模型。对于投影到图像很小的区域的情况，3个特征就足够进行可靠地识别了。对于纹理较多的大面积目标，错误匹配的期望值较高，可能会需要是个特征匹配这么多。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;8. 识别实例&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;图12所示为一个从包含三维目标的聚类遮挡图像中进行目标识别的例子。如左图所示，测试图像为一个玩具火车和青蛙。中图（大小为600*480像素）为含有被遮蔽的测试目标，并有大量聚类背景的图片。因此，即使是人眼也很难立即发现。右图所示为最后正确识别后叠加在一个降对比度版本下的图像。用于识别的关键点显示为小方形，有一条线来指示方向。方形的大小与用于构建描述子的图像区域对应。在每个识别目标的外围有一个外包的平行四边形，它的边界是测试图像在识别过程中在仿射变换下的投影。&lt;/p&gt;&lt;p&gt;另一个潜在的方法应用是位置识别，这样运动的车辆和设备就可以通过识别熟悉的位置来确定位置了。图13给出了这个应用的一个例子，其中训练图像是从场景中很多地方拍摄的。如左上图所示，这些目标看起来都不太显眼，如木墙或是垃圾桶旁的树。而右上方的测试图像（大小为640*315像素）是将初始图像场景旋转30度后的视点拍摄的，但是，训练图像还是很容易的被找到了。&lt;/p&gt;&lt;p&gt;识别的全部过程都被高效完成，所以图12和图13的所有目标在一台2GHz的奔腾4处理器上的识别总用时少于0.3秒。我们在一台笔记本上用一台摄影照相机实施该算法，并在多种环境下广泛的测试了它们。一般来说，有纹理的平面在被旋转50度以内，在提供做够光亮的或不是过度强烈的几乎任何光照条件下，都可以被可靠地识别。对于三维目标，可靠识别的任意向深度旋转范围只有30度，而光照变化的干扰性也更明显。因此，三维目标的识别最好是从多视角的综合特征入手，如局部特征视角聚类法（Lowe，2002）。&lt;/p&gt;&lt;p&gt;这些关键点还被用于解决机器人定位和制图的问题，这个在其他文章中有详细的阐述（Se等人，2001）。在这个应用中，一个三目的立体系统被用来决策关键点定位的三维估计决策。关键点只有同时出现在三幅图像中，并有一致的不同性时才被使用，这样可以保证出现较少的异常值。机器人运动时，它通过与现有的三维地图进行特征匹配来确定自己的位置，然后在更新它们的三维位置时，使用卡尔曼滤波来递增地向地图添加特征。这为机器人在一个位置环境中定位提供了一种具有鲁棒性和准确性的解决方案。这项工作还处理了位置识别的问题，这样，机器人可以在一幅大型地图中被转换到可以识别自己的位置的状态（Se等人，2002），相当于目标识别的三维实现。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051814165493.jpg" alt="" /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size: 12px;"&gt;图12. 左图所示为两目标的测试图片。它们可以在大量遮挡的聚类图片中被识别出来，见中图。识别结果见右图。每个识别目标周围都画有一个平行四边形来显示初始测试图像的边界，识别过程中解决了仿射变换问题。小方形为用于进行识别的关键点。&lt;/span&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/398076/2012051814171136.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-size: 12px;"&gt;图13. 这个例子表明在复杂场景中的位置识别。用于定位的测试图像为左上方640*315像素的图像，是从右上角图像的不同视角拍摄的。识别区域如下图所示，小的方形为识别的关键点，外围的平行四边形为仿射变换后初始测试图像的边界。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;9. 结论&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;本文中所述的SIFT关键点在它的鲜明性方面尤为突出，可以是关键点与大型数据库中的其他关键点进行正确的匹配。这一鲜明性由装配在图像的局部区域内代表图像梯度高维的矢量来实现。关键点对图像旋转具有不变性，对大尺度的仿射变形具有鲁棒性。从典型图像中可以提取大量的关键点，从而使在混杂背景下提取小目标具有更好的鲁棒性。可以从整个尺度范围提取关键点意味着小的局部特征可以与小而高度遮挡的目标进行匹配，而大的关键点则在图像噪音和模糊时具有了更好的表现。它们的计算是高效的，在标配的PC机上，几千个关键点可以被近实时的从典型图像中提取出来。&lt;/p&gt;&lt;p&gt;本文还提出了一种用关键点进行目标识别的方法。这种方法使用了近似的近邻查找，用来识别与目标姿态一致的聚类的Hough变换和最小二乘法进行最后的决策和核查。另一个可能的应用是三维重建、运动跟踪和分割、机器人定位、图像全景集合（assembly）、对极（epipolar）配准和其他需要进行图像间匹配位置识别的视角匹配。&lt;/p&gt;&lt;p&gt;对于图像特征的不变性和鲜明性，未来的研究可以由有很多方向。全三维视点和光照变化数据点集需要进行系统的测试。本文所述特征只使用了单色亮度的图像，因此，进一步的鲜明性可以从光照不变的颜色描述子中得出（Funt and Finlayson, 1995; Brown and Lowe, 2002）。同样，局部纹理测量在人类视觉中也具有重要作用，合并在描述子中后，可以比当前这个从单个空间频率进行研究的描述子更具有普遍的形式。局部特征不变量匹配方法一个吸引人的地方在于这里无需挑选一个特征类型，因为最好的结果往往是使用很多不同特征得到的，因此，本方法可以贡献于获得有用的匹配并提高整体的鲁棒性。&lt;/p&gt;&lt;p&gt;另一个未来的研究方向是研究可以识别的目标分类的特征。这对类属目标尤为重要，分类必须包含所有可能的外形，这是一个巨大的范围。Weber等人的研究（2000）和Fergus等人的研究（2003）显示通过学习小型数据集的适合识别目标类属的局部特征，这种方法有实现的可能性。从长远角度来看，特征集应该包含优先的（prior）和博学的（learned）特征，这些特征将基于对大量目标分来有效的训练数据的数量来使用。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;致谢&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我要尤其感谢Matthew Brown，他对本文在内容和表述上给了我很多改进的建议，而他本人在特征定位和不变性上的工作也对本方法有贡献。另外，我想谢谢大家宝贵的建议，他们是Stephen Se，Jim Little，Krystian Mikolajczyk，Cordelia Schmid，Tony Lindeberg和Andrew Zisserman。这个研究是由加拿大国家科学工程研究协会（NSERC）、机器人学与智能系统协会（IRIS）和Excellence网络中心支持完成的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;参考文献&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Arya, S. and Mount, D.M. 1993. Approximate nearest neighbor queries in fixed dimensions. In &lt;em&gt;Fourth Annual ACM-SIAM Symposium on Discrete Algorithms (SODA&amp;rsquo;93), &lt;/em&gt;pp. 271&amp;ndash;280.&lt;/p&gt;&lt;p&gt;Arya, S., Mount, D.M., Netanyahu, N.S., Silverman, R., and Wu, A.Y. 1998. An optimal algorithm for approximate nearest neighbor searching. &lt;em&gt;Journal of the ACM&lt;/em&gt;, 45:891&amp;ndash;923.&lt;/p&gt;&lt;p&gt;Ballard, D.H. 1981. Generalizing the Hough transform to detect arbitrary patterns. &lt;em&gt;Pattern Recognition&lt;/em&gt;, 13(2):111&amp;ndash;122.&lt;/p&gt;&lt;p&gt;Basri, R. and Jacobs, D.W. 1997. Recognition using region correspondences. &lt;em&gt;International Journal of Computer Vision&lt;/em&gt;, 25(2):145&amp;ndash;166.&lt;/p&gt;&lt;p&gt;Baumberg, A. 2000. Reliable feature matching across widely separated views. In &lt;em&gt;Conference on Computer Vision and Pattern Recognition&lt;/em&gt;, Hilton Head, South Carolina, pp. 774&amp;ndash;781.&lt;/p&gt;&lt;p&gt;Beis, J. and Lowe, D.G. 1997. Shape indexing using approximate nearest-neighbour search in high-dimensional spaces. In &lt;em&gt;Conference on Computer Vision and Pattern Recognition &lt;/em&gt;, Puerto Rico, pp. 1000&amp;ndash;1006.&lt;/p&gt;&lt;p&gt;Brown, M. and Lowe, D.G. 2002. Invariant features from interest point groups. In &lt;em&gt;British Machine Vision Conference&lt;/em&gt;, Cardiff, Wales, pp. 656&amp;ndash;665.&lt;/p&gt;&lt;p&gt;Carneiro, G. and Jepson, A.D. 2002. Phase-based local features. In &lt;em&gt;European Conference on Computer Vision (ECCV)&lt;/em&gt;, Copenhagen, Denmark, pp. 282&amp;ndash;296.&lt;/p&gt;&lt;p&gt;Crowley, J.L. and Parker, A.C. 1984. A representation for shape based on peaks and ridges in the difference of low-pass transform. &lt;em&gt;IEEE Trans. on Pattern Analysis and Machine Intelligence&lt;/em&gt; , 6(2):156&amp;ndash; 170.&lt;/p&gt;&lt;p&gt;Edelman, S., Intrator, N., and Poggio, T. 1997. Complex cells and object recognition. Unpublished manuscript:&lt;/p&gt;&lt;p&gt;http://kybele.psych.cornell.edu/ &amp;sim;edelman/archive.html&lt;/p&gt;&lt;p&gt;Fergus, R., Perona, P., and Zisserman, A. 2003. Object class recognition by unsupervised scale-invariant learning. In &lt;em&gt;IEEE Conference on Computer Vision and Pattern Recognition&lt;/em&gt;, Madison, Wisconsin, pp. 264&amp;ndash;271.&lt;/p&gt;&lt;p&gt;Friedman, J.H., Bentley, J.L., and Finkel, R.A. 1977. An algorithm for finding best matches in logarithmic expected time. &lt;em&gt;ACM Transactions on Mathematical Software&lt;/em&gt;, 3(3):209&amp;ndash;226.&lt;/p&gt;&lt;p&gt;Funt, B.V. and Finlayson, G.D. 1995. Color constant color indexing. &lt;em&gt;IEEE Trans. on Pattern Analysis and Machine Intelligence&lt;/em&gt;, 17(5):522&amp;ndash;529.&lt;/p&gt;&lt;p&gt;Grimson, E. 1990. &lt;em&gt;Object Recognition by Computer: The Role of Geometric Constraints&lt;/em&gt;, The MIT Press: Cambridge, MA. Harris, C. 1992. Geometry from visual motion. In &lt;em&gt;Active Vision&lt;/em&gt;, A. Blake and A. Yuille (Eds.), MIT Press, pp. 263&amp;ndash;284.&lt;/p&gt;&lt;p&gt;Harris, C. and Stephens, M. 1988. A combined corner and edge detector. In &lt;em&gt;Fourth Alvey Vision Conference&lt;/em&gt;, Manchester, UK, pp. 147&amp;ndash; 151.&lt;/p&gt;&lt;p&gt;Hartley, R. and Zisserman, A. 2000.&lt;em&gt;Multiple view geometry in computer vision&lt;/em&gt;, Cambridge University Press: Cambridge, UK.&lt;/p&gt;&lt;p&gt;Hough, P.V.C. 1962. Method and means for recognizing complex patterns. U.S. Patent 3069654.&lt;/p&gt;&lt;p&gt;Koenderink, J.J. 1984. The structure of images.&lt;em&gt; Biological Cybernetics&lt;/em&gt;, 50:363&amp;ndash;396.&lt;/p&gt;&lt;p&gt;Lindeberg, T. 1993. Detecting salient blob-like image structures and their scales with a scale-space primal sketch: A method for focus-of-attention. &lt;em&gt;International Journal of Computer Vision&lt;/em&gt;, 11(3):283&amp;ndash;318.&lt;/p&gt;&lt;p&gt;Lindeberg, T. 1994. Scale-space theory: A basic tool for analyzing structures at different scales. &lt;em&gt;Journal of Applied Statistics&lt;/em&gt;, 21(2):224&amp;ndash;270.&lt;/p&gt;&lt;p&gt;Lowe, D.G. 1991. Fitting parameterized three-dimensional models to images. &lt;em&gt;IEEE Trans. on Pattern Analysis and Machine Intelligence&lt;/em&gt; , 13(5):441&amp;ndash;450.&lt;/p&gt;&lt;p&gt;Lowe, D.G. 1999. Object recognition from local scale-invariant features. In &lt;em&gt;International Conference on Computer Vision&lt;/em&gt; , Corfu, Greece, pp. 1150&amp;ndash;1157.&lt;/p&gt;&lt;p&gt;Lowe, D.G. 2001. Local feature view clustering for 3D object recognition. &lt;em&gt;IEEE Conference on Computer Vision and Pattern Recognition,&lt;/em&gt; Kauai, Hawaii, pp. 682&amp;ndash;688.&lt;/p&gt;&lt;p&gt;Luong, Q.T. and Faugeras, O.D. 1996. The fundamental matrix: Theory, algorithms, and stability analysis. &lt;em&gt;International Journal of Computer Vision&lt;/em&gt;, 17(1):43&amp;ndash;76.&lt;/p&gt;&lt;p&gt;Matas, J., Chum, O., Urban, M., and Pajdla, T. 2002. Robust wide baseline stereo from maximally stable extremal regions. In &lt;em&gt;British Machine Vision Conference&lt;/em&gt;, Cardiff, Wales, pp. 384&amp;ndash;393.&lt;/p&gt;&lt;p&gt;Mikolajczyk, K. 2002. Detection of local features invariant to affine transformations, Ph.D. thesis, Institut National Polytechnique de Grenoble, France.&lt;/p&gt;&lt;p&gt;Mikolajczyk, K. and Schmid, C. 2002. An affine invariant interest point detector. In &lt;em&gt;European Conference on Computer Vision (ECCV)&lt;/em&gt;, Copenhagen, Denmark, pp. 128&amp;ndash;142.&lt;/p&gt;&lt;p&gt;Mikolajczyk, K., Zisserman, A., and Schmid, C. 2003. Shape recognition with edge-based features. In &lt;em&gt;Proceedings of the British Ma-chine Vision Conference&lt;/em&gt;, Norwich, U.K.&lt;/p&gt;&lt;p&gt;Moravec, H. 1981. Rover visual obstacle avoidance. In &lt;em&gt;International Joint Conference on Artificial Intelligence&lt;/em&gt; ,Vancouver, Canada, pp. 785&amp;ndash;790.&lt;/p&gt;&lt;p&gt;Nelson, R.C. and Selinger, A. 1998. Large-scale tests of a keyed, appearance-based 3-D object recognition system. &lt;em&gt;Vision Research&lt;/em&gt;, 38(15):2469&amp;ndash;2488.&lt;/p&gt;&lt;p&gt;Pope, A.R. and Lowe, D.G. 2000. Probabilistic models of appearance for 3-D object recognition. International Journal of Computer Vision , 40(2):149&amp;ndash;167.&lt;/p&gt;&lt;p&gt;Pritchard, D. and Heidrich, W. 2003. Cloth motion capture. &lt;em&gt;Computer Graphics Forum (Eurographics 2003)&lt;/em&gt;, 22(3):263&amp;ndash;271.&lt;/p&gt;&lt;p&gt;Schaffalitzky, F. and Zisserman, A. 2002. Multi-view matching for unordered image sets, or &amp;lsquo;How do I organize my holiday snaps?&amp;rdquo;&amp;rsquo; In &lt;em&gt;European Conference on Computer Vision&lt;/em&gt; , Copenhagen, Den-mark, pp. 414&amp;ndash;431.&lt;/p&gt;&lt;p&gt;Schiele, B. and Crowley, J.L. 2000. Recognition without correspondence using multidimensional receptive field histograms. &lt;em&gt;International Journal of Computer Vision&lt;/em&gt; , 36(1):31&amp;ndash;50.&lt;/p&gt;&lt;p&gt;Schmid, C. and Mohr, R. 1997. Local gray value invariants for image retrieval.&lt;em&gt; IEEE Trans. on Pattern Analysis and Machine Intelligence&lt;/em&gt;，19(5):530&amp;ndash;534.&lt;/p&gt;&lt;p&gt;Se, S., Lowe, D.G., and Little, J. 2001. Vision-based mobile robot localization and mapping using scale-invariant features. In&lt;em&gt; International Conference on Robotics and Automation&lt;/em&gt; , Seoul, Korea, pp. 2051&amp;ndash;2058.&lt;/p&gt;&lt;p&gt;Se, S., Lowe, D.G., and Little, J. 2002. Global localization using distinctive visual features. In &lt;em&gt;International Conference on Intelligent Robots and Systems&lt;/em&gt;, IROS 2002 , Lausanne, Switzerland, pp. 226&amp;ndash;231.&lt;/p&gt;&lt;p&gt;Shokoufandeh, A., Marsic, I., and Dickinson, S.J. 1999. View-based object recognition using saliency maps. &lt;em&gt;Image and Vision Computing&lt;/em&gt; , 17:445&amp;ndash;460.&lt;/p&gt;&lt;p&gt;Torr, P. 1995. Motion segmentation and outlier detection, Ph.D. The-sis, Dept. of Engineering Science, University of Oxford, UK.&lt;/p&gt;&lt;p&gt;Tuytelaars, T. and Van Gool, L. 2000. Wide baseline stereo based on local, affinely invariant regions. In British Machine Vision Conference, Bristol, UK, pp. 412&amp;ndash;422.&lt;/p&gt;&lt;p&gt;Weber, M., Welling, M., and Perona, P. 2000. Unsupervised learning of models for recognition. In &lt;em&gt;European Conference on Computer Vision&lt;/em&gt;, Dublin, Ireland, pp. 18&amp;ndash;32.&lt;/p&gt;&lt;p&gt;Witkin, A.P. 1983. Scale-space filtering. In &lt;em&gt;International Joint Conference on Artificial Intelligence &lt;/em&gt;, Karlsruhe, Germany, pp. 1019&amp;ndash;1022.&lt;/p&gt;&lt;p&gt;Zhang, Z., Deriche, R., Faugeras, O., and Luong, Q.T. 1995. A robust technique for matching two uncalibrated images through the recovery of the unknown epipolar geometry. &lt;em&gt;Artificial Intelligence,&lt;/em&gt; 78:87&amp;ndash;119.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cuteshongshong/aggbug/2506374.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cuteshongshong/archive/2012/05/25/2506374.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mandrake/archive/2012/05/24/2516871.html</id><title type="text">Proxifier突破代理服务器上网的限制</title><summary type="text"/><published>2012-05-24T09:51:00Z</published><updated>2012-05-24T09:51:00Z</updated><author><name>Mandrake</name><uri>http://www.cnblogs.com/mandrake/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mandrake/archive/2012/05/24/2516871.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mandrake/archive/2012/05/24/2516871.html"/><content type="html">&lt;p&gt;在使用代理服务器上网的环境中，因为部分软件不支持或不能很好地支持代理服务器导致出现无法正常使用的问题，Proxifier可以很好地解决这个问题。&lt;/p&gt;&lt;p&gt;&amp;ldquo;Work with any Internet client through a proxy.&amp;rdquo;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;官方网址：&lt;a&gt;http://www.proxifier.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;官方提供安装版及便携版，可免费试用31天。汉化版可自行搜索。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一、安装&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;安装过程比较简单，按照安装向导操作即可：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747031723.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb38" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747052670.png" alt="image_thumb38" width="329" height="256" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;选择接受&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747072788.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb39" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747088686.png" alt="image_thumb39" width="331" height="259" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;确定安装路径&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747111486.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb40" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747137144.png" alt="image_thumb40" width="338" height="267" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;确定开始菜单中的显示名称&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/2012052417471443.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb41" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747167370.png" alt="image_thumb41" width="343" height="265" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;可以选择在桌面创建快捷方式，下面的选项是是否开机检测新版本&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747174173.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image3_thumb" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747186201.png" alt="image3_thumb" width="348" height="266" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;准备好后点击Install按钮开始安装进程&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747209067.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb42" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747233754.png" alt="image_thumb42" width="355" height="277" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;安装完毕，默认选择运行软件&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747258921.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb43" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747265408.png" alt="image_thumb43" width="360" height="281" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、基本设置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;安装向导默认会自动运行软件，也可以在系统开始菜单中找到"Proxifier&amp;rdquo;运行&amp;ldquo;Proxifier&amp;rdquo;。&lt;/p&gt;&lt;p&gt;第一次运行会显示试用说明，点击图中按钮开始试用&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747288275.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb44" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747301981.png" alt="image_thumb44" width="231" height="330" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;首先设置代理服务器信息：&lt;/p&gt;&lt;p&gt;点击菜单栏中的&amp;ldquo;Profile&amp;rdquo;-&amp;ldquo;Proxy Servers&amp;rdquo;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747313211.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb25" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747355323.png" alt="image_thumb25" width="456" height="307" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;点击&amp;ldquo;Add&amp;rdquo;按钮，添加代理服务器（支持多个代理服务器设置）&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/20120524174736174.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb45" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747387534.png" alt="image_thumb45" width="367" height="241" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;依次输入代理服务器的IP地址、端口，选择代理的协议类型、如果代理服务器需要权限验证则选择&amp;ldquo;4&amp;rdquo;处的&amp;ldquo;Enable&amp;rdquo;然后填写用户名和密码，这里略过，最后点击&amp;ldquo;Check&amp;rdquo;按钮，检查代理服务器是否正常&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747409462.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb51" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747426233.png" alt="image_thumb51" width="314" height="391" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;若代理服务器正常可看到如下信息，如有错误请核对代理服务器信息是否填写正确，关掉此窗口&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747436940.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb28" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747458411.png" alt="image_thumb28" width="373" height="250" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;提示是否将此代理服务器设置为默认代理，选择&amp;ldquo;是&amp;rdquo;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747461310.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb49" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747511720.png" alt="image_thumb49" width="329" height="96" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;随后提示默认代理设置完毕&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747521588.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb50" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747545501.png" alt="image_thumb50" width="329" height="89" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;可以看到我们新添加到代理服务器在列表中且被选为默认设置&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/20120524174757221.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb48" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747581484.png" alt="image_thumb48" width="380" height="253" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Proxifier运行后会在系统任务栏中建立一个图标，反应通过代理的数据情况，至此基本的Proxifier安装和设置已经完成，不必再在软件中另行设置代理服务器信息，轻松上网。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241747594973.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb19" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748037052.png" alt="image_thumb19" width="82" height="35" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;你可以选择需要使用代理时手工运行Proxifier，也可以设定为自动运行，选中图中箭头所示的&amp;ldquo;Autostart&amp;rdquo;即可。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748045251.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb37" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748071083.png" alt="image_thumb37" width="462" height="265" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三、高级设置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;自动代理很方便，但也会遇到一些不需要通过代理的网络访问受到影响而无法使用的问题，比如一些内网的应用，Proxifier提供代理规则设置功能，通过设置不但可以自动识别不需要走代理的网络访问，还支持不同应用走不同代理服务器的功能（本教程中不涉及，可自行摸索）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;点击菜单栏中的&amp;ldquo;Profile&amp;rdquo;-&amp;ldquo;Proxification Rules&amp;rdquo;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748082031.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb29" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748103261.png" alt="image_thumb29" width="468" height="139" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;软件中预置的规则如下图，蓝色规则表示符合&amp;ldquo;Target Hosts&amp;rdquo;的应用采取&amp;ldquo;Direct&amp;rdquo;直连的方式通讯。&lt;/p&gt;&lt;p&gt;第二天规则表示默认情况下所有的应用均通过我们的&amp;ldquo;默认代理服务器&amp;rdquo;。&lt;/p&gt;&lt;p&gt;此处我们介绍一下如何增加&amp;ldquo;直连&amp;rdquo;的应用程序设置，双击蓝色规则。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748125505.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb32" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748146735.png" alt="image_thumb32" width="470" height="282" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在箭头的输入框中输入走&amp;ldquo;直连&amp;rdquo;的主机地址，使用分号进行分隔，支持IP、域名且支持通配符。&lt;/p&gt;&lt;p&gt;设置完毕后点击&amp;ldquo;OK&amp;rdquo;按钮确认生效。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748167650.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb34" src="http://images.cnblogs.com/cnblogs_com/mandrake/201205/201205241748176056.png" alt="image_thumb34" width="354" height="388" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mandrake/aggbug/2516871.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mandrake/archive/2012/05/24/2516871.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhwx/archive/2012/05/16/2503524.html</id><title type="text">Delphi屏幕截图的实现</title><summary type="text"/><published>2012-05-16T02:25:00Z</published><updated>2012-05-16T02:25:00Z</updated><author><name>realnull</name><uri>http://www.cnblogs.com/zhwx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhwx/archive/2012/05/16/2503524.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhwx/archive/2012/05/16/2503524.html"/><content type="html">&lt;p&gt;&amp;nbsp; &amp;nbsp; 首先要获得设备环境的句柄，可以通过GetDC函数来获得，对于这个函数，MSDN上是这样说明的&lt;/p&gt;&lt;div style="background-color: #ccffff;"&gt;&lt;p&gt;&lt;span&gt;The GetDC function retrieves a handle to a &lt;span style="text-decoration: underline;"&gt;device context&lt;/span&gt; (DC) for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the DC. The device context is an opaque data structure, whose values are used internally by GDI.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;The GetDCEx function is an extension to GetDC, which gives an application more control over how and whether clipping occurs in the client area.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff; color: #ff0000;"&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;HDC GetDC(&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;  __in  HWND hWnd&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff; color: #ff0000;"&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt; hWnd [in] &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;A handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire screen.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff; color: #ff0000;"&gt;&lt;strong&gt;Return value&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;If the function succeeds, the return value is a handle to the DC for the specified window's client area.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;If the function fails, the return value is NULL.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;1.申明一全变量存储GetDC方法得到的句柄，HDC类型&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var&lt;br/&gt;  dc:HDC;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;2.在适当时候调用GetDC，將得到的句柄赋值给变量dc,并將得到的句柄赋值给Canvas的句柄（fullCanvas是变量）&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;   dc:=GetDC(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;   fullCanvas:=&lt;span style="color: #000000;"&gt;TCanvas.Create;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;   fullCanvas.Handle:=dc;&lt;/div&gt;&lt;p&gt;3.然后就是对fullCanvas进行操作，这里也要用到CopyRect函数&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px; background-color: #ffffff;"&gt;&lt;strong&gt;&lt;span style="color: #339966;"&gt;procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect); &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Copies part of an image from another canvas into the canvas.Use CopyRect to transfer part of the image on another canvas to the image of the&amp;nbsp;&lt;a title="Vcl.Graphics.TCanvas" href="http://www.cnblogs.com/zhwx/admin/"&gt;TCanvas&lt;/a&gt;&amp;nbsp;object.&lt;/p&gt;&lt;p&gt;Dest specifies the rectangle on the canvas where the source image will be copied. The Canvas parameter specifies the canvas with the source image.&lt;/p&gt;&lt;p&gt;Source specifies a rectangle bounding the portion of the source canvas that will be copied.The portion of the source canvas is copied using the mode specified by CopyMode.&amp;nbsp;&lt;/p&gt;&lt;p&gt;一句话就是，将Canvas中的Source大小的区域拷贝到目标canvas中的Dest區域中，如果这二个面积不相等，会有缩放效果，如果不想有此效果，这二个区域的长宽相等&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt;       &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; SavePictureDialog1.Execute &lt;span style="color: #0000ff;"&gt;then&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt;       &lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt;         bm:=&lt;span style="color: #000000;"&gt;TBitmap.Create;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt;           bm.Width:=abs(x2-&lt;span style="color: #000000;"&gt;x1);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;           bm.Height:=abs(y2-&lt;span style="color: #000000;"&gt;y1);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;           bm.Canvas.CopyRect(Rect(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,bm.Width,bm.Height),fullCanvas,Rect(x1,y1,x2,y2));&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;           bm.SaveToFile(SavePictureDialog1.FileName+&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;.bmp&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;finally&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #000000;"&gt;          bm.Free;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;其中bm.width:=ABS(x2-x1),bm.heigth:=ABS(y2-y1),如果要全屏截图，则将二个RECT都设置为Rect(0,0,Screen.Width,Screen.heigth)&lt;/p&gt;&lt;p&gt;程序运行如下&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/352162/2012051610151975.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;要实现有背景的黑层行是这样操作的&lt;/p&gt;&lt;p&gt;(1).设置窗体 AlphaBlend为True,AlphaBlendVaue为150,BorderStyle:=bsNone;&lt;/p&gt;&lt;p&gt;(2).在窗体创建时写如下语句&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;       SetWindowPos(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,HWND_TOP,&lt;span style="color: #800080;"&gt;0&lt;/span&gt;,&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,Screen.Width,Screen.Height,SWP_DRAWFRAME);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;       ClientHeight:=&lt;span style="color: #000000;"&gt;Screen.Height;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;       ClientWidth:=Screen.Width;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/zhwx/aggbug/2503524.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhwx/archive/2012/05/16/2503524.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ITBread/archive/2012/05/15/2501286.html</id><title type="text">windows 7局域网共享设置</title><summary type="text"/><published>2012-05-15T03:59:00Z</published><updated>2012-05-15T03:59:00Z</updated><author><name>ITBread</name><uri>http://www.cnblogs.com/ITBread/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ITBread/archive/2012/05/15/2501286.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ITBread/archive/2012/05/15/2501286.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;不同版本的Win7可能存在一定的差异。如果你用的是Home Basic版本，就不要再往下看了，因为Home Basic不提供文件共享功能。。&lt;/p&gt;  &lt;p&gt;二：必须开启的服务&lt;/p&gt;  &lt;p&gt;右键点击我的电脑 或计算机—管理----服务和应用程序，打开服务或者用WIN+R打开 运行---输入services.msc回车，打开服务设置&lt;/p&gt;  &lt;p&gt;将以下服务的[启动类型]选为[自动]，并确保[服务状态]为[已启动]&lt;/p&gt;  &lt;p&gt;Server&lt;/p&gt;  &lt;p&gt;Workstation&lt;/p&gt;  &lt;p&gt;Computer Browser&lt;/p&gt;  &lt;p&gt;DHCP Client&lt;/p&gt;  &lt;p&gt;Remote Procedure Call&lt;/p&gt;  &lt;p&gt;Remote Procedure Call (RPC) Locator&lt;/p&gt;  &lt;p&gt;DNS Client&lt;/p&gt;  &lt;p&gt;Function Discovery Resource Publication&lt;/p&gt;  &lt;p&gt;UPnP Device Host&lt;/p&gt;  &lt;p&gt;SSDP Discovery&lt;/p&gt;  &lt;p&gt;TIP/IP NetBIOSHelper //这个很重要，其他的条件即使都满足了，没有这个也不行。&lt;/p&gt;  &lt;p&gt;三：基本设置&lt;/p&gt;  &lt;p&gt;A: XP系统：&lt;/p&gt;  &lt;p&gt;下载XP局域网一键共享，按里边的操作设置后，重启即可。&lt;/p&gt;  &lt;p&gt;XP系统文件共享：右键单击要共享的文件夹，选择[共享和&lt;a href="http://antivirus.pchome.net/"&gt;安全&lt;/a&gt;]，勾选 在网络上共享这个文件夹。&lt;/p&gt;  &lt;p&gt;B:Win7系统：&lt;/p&gt;  &lt;p&gt;1.网络和共享中心---点击 网络 右边的 自定义---将网络类型设置为 专用网络&lt;/p&gt;  &lt;p&gt;2.共享和发现---启用 网络发现、文件共享、打印机共享。密码保护的共享则可以设置为关闭。&lt;/p&gt;  &lt;p&gt;3. 跨操作系统的打印机共享涉及到驱动的问题，为了避免麻烦，建议不要跨操作系统共享打印机。&lt;/p&gt;  &lt;p&gt;4.访问策略设置&lt;/p&gt;  &lt;p&gt;用WIN+R打开 运行---输入secpol.msc回车，打开本地安全设置&lt;/p&gt;  &lt;p&gt;安全设置----本地策略----安全选项&lt;/p&gt;  &lt;p&gt;帐户: 使用空白密码的本地帐户只允许进行控制台登录，设置为 已禁用。&lt;/p&gt;  &lt;p&gt;此选项默认为 已启用。这是很关键的一步，因为很多人的电脑都是没有加密码的的。如果你当前使用的帐号没有密码的话，只允许控制台登录，就无法通过 网上邻居(XP)或网络(Vista)来访问了。所以此处需要禁用。&lt;/p&gt;  &lt;p&gt;网络访问: 不允许 SAM 帐户和共享的匿名枚举] ，设置为 已禁用。&lt;/p&gt;  &lt;p&gt;此选项默认为 已禁用。Windows 允许匿名用户执行某些活动，如枚举域帐户和网络共享的名称。这提供了方便，也带来潜在的风险。有的版本的系统(比如GhostXP电脑公司版)为了安全起见，将其设置为启用，但这样一来，局域网其它电脑就会无法查看你共享的内容了。&lt;/p&gt;  &lt;p&gt;网络访问: 本地帐户的共享和安全模型，设置为 仅来宾。&lt;/p&gt;  &lt;p&gt;此选项对加入了域的计算机默认为[经典]，对独立的计算机默认为[仅来宾]。这是一个共享安全的辅助选项。小规模局域网内部的计算机彼此之间都是信任的，不存在非法访问的问题，为了方便起见，建议使用 仅来宾 方式。而使用 经典 模式可以更好地划定共享资源的访问权限，对于规模稍大的局域网，为了防止共享的资源被非法访问，就可以使用这种方式。&lt;/p&gt;  &lt;p&gt;安全设置---本地策略---用户权利指派&lt;/p&gt;  &lt;p&gt;从网络访问此计算机： 查看有没有本机来宾帐户即guest，如果没有就加上。&lt;/p&gt;  &lt;p&gt;拒绝从网络访问这台计算机：查看有没有本机来宾帐户名，如果有就删除。&lt;/p&gt;  &lt;p&gt;5. Win7系统文件共享设置&lt;/p&gt;  &lt;p&gt;文件夹右键---共享---选择要与其共享的用户---点击黑色的小三角箭头---在下拉菜单中选择---everyone(这个列表中的所有用户)。&lt;/p&gt;  &lt;p&gt;注意：在进行以上设置之前共享过的文件夹，可能需要重新共享后才能被正常访问。比如说以前使用 经典 模式共享了该文件夹，改为 仅来宾 模式后再访问就会出错，提示没权限。解决的办法就是先取消共享，再重新共享。&lt;/p&gt;  &lt;p&gt;ps：防火墙没必要关闭，毕竟开方共享不是开放黑客!安全依然重要，在享有共享的时候，不能丢弃安全。&lt;/p&gt;  &lt;p&gt;防火墙只要设定开放端口139和445的TCP口，还有137和138的UDP口就可以了。&lt;/p&gt;  &lt;p&gt;另外，在服务中，确保TCP/IP NetBIOSHelper服务是自动的没错，但是并不等于这个功能在WINS下启用了，必须还得到网卡的TCP/IP设置里，WINS里面打开TCP/IP上的NETBIOS启用勾勾，这才能真正生效!没这玩艺，就算前面所有工作都做到家了，还是不容易通!就算偶尔通了，也是暂时通，时而通时而不通，通通断断、断断通!只要这个小勾勾打上，就能稳稳地通!&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ITBread/aggbug/2501286.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ITBread/archive/2012/05/15/2501286.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/JustRun1983/archive/2012/05/13/2498140.html</id><title type="text">局域网中配置多台机器可以登录远程桌面</title><summary type="text"/><published>2012-05-13T07:14:00Z</published><updated>2012-05-13T07:14:00Z</updated><author><name>JustRun</name><uri>http://www.cnblogs.com/JustRun1983/</uri></author><link rel="alternate" href="http://www.cnblogs.com/JustRun1983/archive/2012/05/13/2498140.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/JustRun1983/archive/2012/05/13/2498140.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;在公司的路由器中可以配置端口转发，配置3389端口转发到你的内网机器上，这样你就可以通过外网IP在家中登录自己的公司的电脑。 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;对于单个机器这样做网上已经有很多文章介绍如何实现了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;现在的问题是，如果公司里面有多人有这个需求的时候，怎么办？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;由于3389是远程桌面连接的默认端口，使用其它端口转发是不能够实现目的的。解决的思路是改变PC中的远程连接的默认端口为其它端口。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;修改步骤如下:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;&lt;big&gt;&lt;small&gt;1) 点击开始, 运行          &lt;br /&gt;2) 输入REGEDIT, 回车           &lt;br /&gt;3) 在注册表中找到下面的节点&lt;/small&gt;&lt;/big&gt;&lt;/small&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;HKEY_LOCAL_MACHINE&lt;/small&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;System&lt;/small&gt;   &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;CurrentControlSet&lt;/small&gt;   &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;Control&lt;/small&gt;   &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;TerminalServer&lt;/small&gt;   &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;WinStations&lt;/small&gt;   &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;RDP-TCP&lt;/small&gt;   &lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;&lt;/small&gt;&lt;small&gt;4) 在右边你能返现一项PortNumber&lt;/small&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;5) 双击它&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;6) 选择 Decimal显示，能够看到默认的端口是3389，改成你想区别于默认3389的端口，&lt;/small&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;重启一下计算机， 配置路由转发， 这个时候就不是3389的端口了，而是上面的3390.&lt;/small&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;远程连接你的计算机也必须改成&lt;/small&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 15px;"&gt;&lt;small&gt;比如: 215.76.43.5:3390&lt;/small&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/JustRun1983/aggbug/2498140.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/JustRun1983/archive/2012/05/13/2498140.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heartstill/archive/2012/05/10/2495045.html</id><title type="text">Win7删除文件时，提示“操作无法完成，因为其中的文件夹或文件已在另一程序中打开”</title><summary type="text"/><published>2012-05-10T13:52:00Z</published><updated>2012-05-10T13:52:00Z</updated><author><name>开始测试</name><uri>http://www.cnblogs.com/heartstill/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heartstill/archive/2012/05/10/2495045.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heartstill/archive/2012/05/10/2495045.html"/><content type="html">&lt;div class="tit"&gt;Win7删除文件时，提示&amp;#8220;操作无法完成，因为其中的文件夹或文件已在另一程序中打开&amp;#8221;&lt;/div&gt;&lt;div class="date"&gt;2012-01-31 0:42&lt;/div&gt;&lt;table style="width: 100%; table-layout: fixed"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div id="blog_text" class="cnt"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;Win7删除文件时，提示&amp;#8220;操作无法完成，因为其中的文件夹或文件已在另一程序中打开&amp;#8221;问题解决&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;问题描述：&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;span&gt;删除文件时，提示&amp;#8220;操作无法完成，因为其中的文件夹或文件已在另一程序中打开&amp;#8221;是我们经常遇到的状况，我们需要关闭正在使用改文件的进程之后才能正常删除该文件或文件夹，不过对于新手来说，从任务管理器中的那么多进程中找到对应的进程项不是件容易的事，很多人都习惯借助于第三方强制删除软件。其实在&lt;span&gt;Win7&lt;/span&gt;系统下，遇到无法删除文件的情况，利用&amp;#8220;资源监视器&amp;#8221;便可轻松搞定。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;解决方案：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;（1）右键单击&lt;span&gt;Windows 7&lt;/span&gt;任务栏选择&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;启动任务管理器&lt;/span&gt;&lt;span&gt;&amp;#8221;&lt;/span&gt;&lt;span&gt;命令，在打开的&lt;/span&gt;&lt;span&gt;&amp;#8220;Windows&lt;/span&gt;&lt;span&gt;任务管理器&lt;/span&gt;&lt;span&gt;&amp;#8221;&lt;/span&gt;&lt;span&gt;控制台窗口中点击&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;性能&lt;/span&gt;&lt;span&gt;&amp;#8221;&lt;/span&gt;&lt;span&gt;标签，然后点击点击该标签页中的&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;资源监视器&lt;/span&gt;&lt;span&gt;&amp;#8221;&lt;/span&gt;&lt;span&gt;按钮进入&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;资源监视器&lt;/span&gt;&lt;span&gt;&amp;#8221;&lt;/span&gt;&lt;span&gt;控制台。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;（2）在控制台中点击&lt;/span&gt;&lt;span&gt;&amp;#8220;CPU&amp;#8221;&lt;/span&gt;&lt;span&gt;标签定位到该标签页下，然后在&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;关联的句柄&lt;/span&gt;&lt;span&gt;&amp;#8221;&lt;/span&gt;&lt;span&gt;右侧的搜索框中输入要删除的文件夹名&lt;/span&gt;&lt;span&gt;，此时系统会自动搜索与文件夹名&lt;span&gt;句柄相关联的系统进程。搜等片刻，可以看到搜索到调用文件夹的命令程序。由于命令程序进程正在调用文件夹，才造成了对该文件夹删除的失败。右键单击该进程，然后选择&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;结束进程&lt;/span&gt;&lt;span&gt;&amp;#8221;&lt;/span&gt;&lt;span&gt;命令弹出警告对话框，确认后即可结束该进程，然后就可以完美删除该文件夹了。。。。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/heartstill/aggbug/2495045.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heartstill/archive/2012/05/10/2495045.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zyl910/archive/2012/05/08/2490512.html</id><title type="text">使用GetLogicalProcessorInformation获取逻辑处理器的详细信息（NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache）</title><summary type="text"/><published>2012-05-08T10:06:00Z</published><updated>2012-05-08T10:06:00Z</updated><author><name>zyl910</name><uri>http://www.cnblogs.com/zyl910/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zyl910/archive/2012/05/08/2490512.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zyl910/archive/2012/05/08/2490512.html"/><content type="html">&lt;p&gt;现在多核处理器已经很普及了，市场主流是双核处理器，还有4核、8核等高端产品。而且Intel推广了超线程技术（Hyper-Threading Technology, HTT），可以将一个物理核心模拟为两个逻辑处理器。这一切使得&amp;ldquo;CPU数量&amp;rdquo;这一概念变得复杂起来，对于软件开发人员来说，希望能获得物理CPU数、CPU核心数、逻辑CPU数等详细信息。&lt;br /&gt;在Windows平台，可以调用GetLogicalProcessorInformation函数来获取它们的详细信息。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;一、背景知识&lt;/p&gt;&lt;p&gt;先来明确一下名词&amp;mdash;&amp;mdash;&lt;br /&gt;physical processor packages：物理处理器封装个数，即俗称的&amp;ldquo;物理CPU数&amp;rdquo;。例如一块&amp;ldquo;Intel Core i3-2310M&amp;rdquo;只有1个&amp;ldquo;物理处理器封装个数&amp;rdquo;。若对于有多个处理器插槽的服务器，&amp;ldquo;物理处理器封装个数&amp;rdquo;很可能会大于1。&lt;br /&gt;processor cores：处理器核心数，即俗称的&amp;ldquo;CPU核心数&amp;rdquo;。例如&amp;ldquo;Intel Core i3-2310M&amp;rdquo;是双核处理器，它有2个&amp;ldquo;处理器核心数&amp;rdquo;。&lt;br /&gt;logical processors：逻辑处理器数，即俗称的&amp;ldquo;逻辑CPU数&amp;rdquo;。例如&amp;ldquo;Intel Core i3-2310M&amp;rdquo;支持超线程，一个物理核心能模拟为两个逻辑处理器，即一块&amp;ldquo;Intel Core i3-2310M&amp;rdquo;有4个&amp;ldquo;逻辑处理器数&amp;rdquo;。&lt;/p&gt;&lt;p&gt;再来看看2个大家可能不太熟悉的名词&amp;mdash;&amp;mdash;&lt;br /&gt;SMP：Symmetrical Multi-Processing，对称多处理机。&lt;br /&gt;NUMA：Non Uniform Memory Access，非均匀访存模型。&lt;a href="http://msdn.microsoft.com/en-us/library/aa363804(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa363804(v=vs.85).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这个两个名词牵涉到很多专业知识，这里不做详细介绍，感兴趣的同学可以自行翻阅相关资料。&lt;br /&gt;老版本的Windows系统（例如Windows XP）采用的是SMP模型。但后来因多核处理器及异构计算的发展，从Windows Server 2003开始使用NUMA模型，系统中支持多个NUMA节点。对于开发人员来说，当只有1个NUMA节点时，与SMP模型是差不多的。&lt;br /&gt;对于 Windows XP，在打上SP3补丁后，也可以利用GetLogicalProcessorInformation函数获得NUMA等信息。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;二、GetLogicalProcessorInformation函数的使用心得&lt;/p&gt;&lt;p&gt;在MSDN上我们可以查到GetLogicalProcessorInformation函数的帮助&amp;mdash;&amp;mdash;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms683194(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms683194(v=vs.85).aspx&lt;/a&gt;&lt;br /&gt;GetLogicalProcessorInformation function&lt;/p&gt;&lt;p&gt;GetLogicalProcessorInformation函数还牵涉到一些结构体和枚举&amp;mdash;&amp;mdash;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms686694(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms686694(v=vs.85).aspx&lt;/a&gt;&lt;br /&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION structure&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms684197(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms684197(v=vs.85).aspx&lt;/a&gt;&lt;br /&gt;LOGICAL_PROCESSOR_RELATIONSHIP enumeration&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms681979(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms681979(v=vs.85).aspx&lt;/a&gt;&lt;br /&gt;CACHE_DESCRIPTOR structure&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms684844(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms684844(v=vs.85).aspx&lt;/a&gt;&lt;br /&gt;PROCESSOR_CACHE_TYPE enumeration&lt;/p&gt;&lt;p&gt;GetLogicalProcessorInformation函数用起来是有一定复杂性的。因为它返回的是SYSTEM_LOGICAL_PROCESSOR_INFORMATION数组，数组中的每一项分别描述了不同的信息，学习曲线较陡峭。&lt;br /&gt;虽然MSDN上有该函数的范例代码，但是它屏蔽了很多细节，对我们的帮助有限。于是我将该范例程序作了改进，显示了SYSTEM_LOGICAL_PROCESSOR_INFORMATION数组中每一项的详细信息。&lt;/p&gt;&lt;p&gt;心得&amp;mdash;&amp;mdash;&lt;br /&gt;1.SYSTEM_LOGICAL_PROCESSOR_INFORMATION结构ProcessorMask是ULONG_PTR类型的。在32位系统上是32位，64位系统上是64位。为了简化代码，建议强制转型为UINT64类型，调用printf等输出函数时使用&amp;ldquo;I64&amp;rdquo;格式码。&lt;br /&gt;2.ProcessorMask是处理器掩码，每一位代表一个逻辑处理器。所以一般来说，32位系统最多支持32个逻辑处理器，64位系统最多支持64个逻辑处理器。&lt;br /&gt;3.对于Windows 7和Windows Server 2008 R2来说，能突破64个逻辑处理器限制，最高支持256个逻辑处理器。新加了 处理器组（Processor Groups）概念，详见：&lt;a href="http://msdn.microsoft.com/en-us/library/dd405503(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd405503(v=vs.85).aspx&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;三、全部代码&lt;/p&gt;&lt;p&gt;全部代码&amp;mdash;&amp;mdash;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#include &amp;lt;windows.h&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;#include &lt;/span&gt;&amp;lt;malloc.h&amp;gt;&lt;span style="color: #000000;"&gt;    &lt;br/&gt;#include &lt;/span&gt;&amp;lt;stdio.h&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;#include &lt;/span&gt;&amp;lt;tchar.h&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;#if&lt;/span&gt; (_WIN32_WINNT &amp;lt; 0x0600)    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; [zyl910] 低版本的Windows SDK没有定义 RelationProcessorPackage 等常量&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt; RelationProcessorPackage    3&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt; RelationGroup    4&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;#endif&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; [zyl910] LOGICAL_PROCESSOR_RELATIONSHIP枚举的名称&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; LPTSTR Names_LOGICAL_PROCESSOR_RELATIONSHIP[] =&lt;span style="color: #000000;"&gt; {&lt;br/&gt;    _T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RelationProcessorCore&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;    ,_T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RelationNumaNode&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;    ,_T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RelationCache&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;    ,_T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RelationProcessorPackage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;    ,_T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;RelationGroup&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;};&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; [zyl910] PROCESSOR_CACHE_TYPE枚举的名称&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; LPTSTR Names_PROCESSOR_CACHE_TYPE[] =&lt;span style="color: #000000;"&gt; {&lt;br/&gt;    _T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CacheUnified&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;    ,_T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CacheInstruction&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;    ,_T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CacheData&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;    ,_T(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CacheTrace&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;typedef BOOL (WINAPI &lt;/span&gt;*&lt;span style="color: #000000;"&gt;LPFN_GLPI)(&lt;br/&gt;    PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, &lt;br/&gt;    PDWORD);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Helper function to count set bits in the processor mask.&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;DWORD CountSetBits(ULONG_PTR bitMask)&lt;br/&gt;{&lt;br/&gt;    DWORD LSHIFT &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;sizeof&lt;/span&gt;(ULONG_PTR)*&lt;span style="color: #800080;"&gt;8&lt;/span&gt; - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD bitSetCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    ULONG_PTR bitTest &lt;/span&gt;= (ULONG_PTR)&lt;span style="color: #800080;"&gt;1&lt;/span&gt; &amp;lt;&amp;lt;&lt;span style="color: #000000;"&gt; LSHIFT;    &lt;br/&gt;    DWORD i;&lt;br/&gt;    &lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt;= LSHIFT; ++&lt;span style="color: #000000;"&gt;i)&lt;br/&gt;    {&lt;br/&gt;        bitSetCount &lt;/span&gt;+= ((bitMask &amp;amp; bitTest)?&lt;span style="color: #800080;"&gt;1&lt;/span&gt;:&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;        bitTest&lt;/span&gt;/=&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; bitSetCount;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; _cdecl _tmain ()&lt;br/&gt;{&lt;br/&gt;    LPFN_GLPI glpi;&lt;br/&gt;    BOOL done &lt;/span&gt;=&lt;span style="color: #000000;"&gt; FALSE;&lt;br/&gt;    PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; NULL;&lt;br/&gt;    PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr &lt;/span&gt;=&lt;span style="color: #000000;"&gt; NULL;&lt;br/&gt;    DWORD returnLength &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD logicalProcessorCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD numaNodeCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD processorCoreCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD processorL1CacheCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD processorL2CacheCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD processorL3CacheCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD processorPackageCount &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    DWORD byteOffset &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    PCACHE_DESCRIPTOR Cache;&lt;br/&gt;&lt;br/&gt;    glpi &lt;/span&gt;=&lt;span style="color: #000000;"&gt; (LPFN_GLPI) GetProcAddress(&lt;br/&gt;                            GetModuleHandle(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;kernel32&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)),&lt;br/&gt;                            &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GetLogicalProcessorInformation&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (NULL ==&lt;span style="color: #000000;"&gt; glpi) &lt;br/&gt;    {&lt;br/&gt;        _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\nGetLogicalProcessorInformation is not supported.\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (!&lt;span style="color: #000000;"&gt;done)&lt;br/&gt;    {&lt;br/&gt;        DWORD rc &lt;/span&gt;= glpi(buffer, &amp;amp;&lt;span style="color: #000000;"&gt;returnLength);&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (FALSE ==&lt;span style="color: #000000;"&gt; rc) &lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (GetLastError() ==&lt;span style="color: #000000;"&gt; ERROR_INSUFFICIENT_BUFFER) &lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (buffer) &lt;br/&gt;                    free(buffer);&lt;br/&gt;&lt;br/&gt;                buffer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(&lt;br/&gt;                        returnLength);&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (NULL ==&lt;span style="color: #000000;"&gt; buffer) &lt;br/&gt;                {&lt;br/&gt;                    _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\nError: Allocation failure\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;                }&lt;br/&gt;            } &lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;            {&lt;br/&gt;                _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\nError %d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), GetLastError());&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            }&lt;br/&gt;        } &lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;        {&lt;br/&gt;            done &lt;/span&gt;=&lt;span style="color: #000000;"&gt; TRUE;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    ptr &lt;/span&gt;=&lt;span style="color: #000000;"&gt; buffer;&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;)    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; [zyl910] 显示SYSTEM_LOGICAL_PROCESSOR_INFORMATION结构体的详细信息&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;    {&lt;br/&gt;        DWORD cnt &lt;/span&gt;= returnLength / &lt;span style="color: #0000ff;"&gt;sizeof&lt;/span&gt;(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 计算SYSTEM_LOGICAL_PROCESSOR_INFORMATION结构体的数目&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;(DWORD i=&lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i&amp;lt;cnt; ++&lt;span style="color: #000000;"&gt;i)&lt;br/&gt;        {&lt;br/&gt;            _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[%d]\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), i);&lt;br/&gt;            _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.ProcessorMask:\t0x%.16I64X\t//%I64d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), (UINT64)ptr[i].ProcessorMask, (UINT64)ptr[i].ProcessorMask);&lt;br/&gt;            _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.Relationship:\t%d\t//%s\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;), ptr[i].Relationship, Names_LOGICAL_PROCESSOR_RELATIONSHIP[max(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,min(ptr[i].Relationship, RelationGroup))]);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; j=&lt;span style="color: #800080;"&gt;0&lt;/span&gt;; j&amp;lt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;; ++j)    _tprintf(TEXT(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.Reserved[%d]:\t//0x%.16I64X\t%I64d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), j, (UINT64)ptr[i].Reserved[j], (UINT64)ptr[i].Reserved[j]);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (RelationCache==&lt;span style="color: #000000;"&gt;ptr[i].Relationship)&lt;br/&gt;            {&lt;br/&gt;                _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.Cache.Level:\t%u\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), ptr[i].Cache.Level);&lt;br/&gt;                _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.Cache.Associativity:\t0x%.2X\t//%u\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), ptr[i].Cache.Associativity, ptr[i].Cache.Associativity);&lt;br/&gt;                _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.Cache.LineSize:\t0x%.4X\t//%u\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), ptr[i].Cache.LineSize, ptr[i].Cache.LineSize);&lt;br/&gt;                _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.Cache.Size:\t0x%.8X\t//%u\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), ptr[i].Cache.Size, ptr[i].Cache.Size);&lt;br/&gt;                _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\t.Cache.Type:\t%d\t//%s\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;), ptr[i].Cache.Type, Names_PROCESSOR_CACHE_TYPE[max(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,min(ptr[i].Cache.Type, CacheTrace))]);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (byteOffset + &lt;span style="color: #0000ff;"&gt;sizeof&lt;/span&gt;(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) &amp;lt;=&lt;span style="color: #000000;"&gt; returnLength) &lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt; (ptr-&amp;gt;&lt;span style="color: #000000;"&gt;Relationship) &lt;br/&gt;        {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; RelationNumaNode:&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Non-NUMA systems report a single record of this type.&lt;/span&gt;&lt;br/&gt;            numaNodeCount++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; RelationProcessorCore:&lt;br/&gt;            processorCoreCount&lt;/span&gt;++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; A hyperthreaded core supplies more than one logical processor.&lt;/span&gt;&lt;br/&gt;            logicalProcessorCount += CountSetBits(ptr-&amp;gt;&lt;span style="color: #000000;"&gt;ProcessorMask);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; RelationCache:&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Cache data is in ptr-&amp;gt;Cache, one CACHE_DESCRIPTOR structure for each cache. &lt;/span&gt;&lt;br/&gt;            Cache = &amp;amp;ptr-&amp;gt;&lt;span style="color: #000000;"&gt;Cache;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Cache-&amp;gt;Level == &lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                processorL1CacheCount&lt;/span&gt;++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Cache-&amp;gt;Level == &lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                processorL2CacheCount&lt;/span&gt;++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Cache-&amp;gt;Level == &lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                processorL3CacheCount&lt;/span&gt;++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; RelationProcessorPackage:&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Logical processors share a physical package.&lt;/span&gt;&lt;br/&gt;            processorPackageCount++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;br/&gt;            _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\nError: Unsupported LOGICAL_PROCESSOR_RELATIONSHIP value.\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;        }&lt;br/&gt;        byteOffset &lt;/span&gt;+= &lt;span style="color: #0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);&lt;br/&gt;        ptr&lt;/span&gt;++&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\nGetLogicalProcessorInformation results:\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br/&gt;    _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Number of NUMA nodes: %d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), &lt;br/&gt;             numaNodeCount);&lt;br/&gt;    _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Number of physical processor packages: %d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), &lt;br/&gt;             processorPackageCount);&lt;br/&gt;    _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Number of processor cores: %d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), &lt;br/&gt;             processorCoreCount);&lt;br/&gt;    _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Number of logical processors: %d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), &lt;br/&gt;             logicalProcessorCount);&lt;br/&gt;    _tprintf(TEXT(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Number of processor L1/L2/L3 caches: %d/%d/%d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;), &lt;br/&gt;             processorL1CacheCount,&lt;br/&gt;             processorL2CacheCount,&lt;br/&gt;             processorL3CacheCount);&lt;br/&gt;    &lt;br/&gt;    free(buffer);&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;四、输出信息&lt;/p&gt;&lt;p&gt;&lt;br /&gt;例如我的处理器是&amp;ldquo;Intel Core i3-2310M&amp;rdquo;，该程序的输出信息为&amp;mdash;&amp;mdash;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[0&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x0000000000000005    //5&lt;br/&gt;    .Relationship:    0    //&lt;span style="color: #000000;"&gt;RelationProcessorCore&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000000000000001    1&lt;br/&gt;    .Reserved[1]:    //0x0000000000000000    0&lt;span style="color: #000000;"&gt;&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;1&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x0000000000000005    //5&lt;br/&gt;    .Relationship:    2    //&lt;span style="color: #000000;"&gt;RelationCache&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000800000400801    140737492551681&lt;br/&gt;    .Reserved[1]:    //0x0000000000000002    2&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Level:    1&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Associativity:    0x08    //8&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.LineSize:    0x0040    //64&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Size:    0x00008000    //32768&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Type&lt;/span&gt;:    2    //&lt;span style="color: #000000;"&gt;CacheData&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;2&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x0000000000000005    //5&lt;br/&gt;    .Relationship:    2    //&lt;span style="color: #000000;"&gt;RelationCache&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000800000400801    140737492551681&lt;br/&gt;    .Reserved[1]:    //0x0000000000000001    1&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Level:    1&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Associativity:    0x08    //8&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.LineSize:    0x0040    //64&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Size:    0x00008000    //32768&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Type&lt;/span&gt;:    1    //&lt;span style="color: #000000;"&gt;CacheInstruction&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;3&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x0000000000000005    //5&lt;br/&gt;    .Relationship:    2    //&lt;span style="color: #000000;"&gt;RelationCache&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0004000000400802    1125899911038978&lt;br/&gt;    .Reserved[1]:    //0x0000000000000000    0&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Level:    2&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Associativity:    0x08    //8&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.LineSize:    0x0040    //64&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Size:    0x00040000    //262144&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Type&lt;/span&gt;:    0    //&lt;span style="color: #000000;"&gt;CacheUnified&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;4&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x000000000000000F    //15&lt;br/&gt;    .Relationship:    3    //&lt;span style="color: #000000;"&gt;RelationProcessorPackage&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000000000000000    0&lt;br/&gt;    .Reserved[1]:    //0x0000000000000000    0&lt;span style="color: #000000;"&gt;&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;5&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x000000000000000A    //10&lt;br/&gt;    .Relationship:    0    //&lt;span style="color: #000000;"&gt;RelationProcessorCore&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000000000000001    1&lt;br/&gt;    .Reserved[1]:    //0x0000000000000000    0&lt;span style="color: #000000;"&gt;&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;6&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x000000000000000A    //10&lt;br/&gt;    .Relationship:    2    //&lt;span style="color: #000000;"&gt;RelationCache&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000800000400801    140737492551681&lt;br/&gt;    .Reserved[1]:    //0x0000000000000002    2&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Level:    1&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Associativity:    0x08    //8&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.LineSize:    0x0040    //64&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Size:    0x00008000    //32768&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Type&lt;/span&gt;:    2    //&lt;span style="color: #000000;"&gt;CacheData&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;7&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x000000000000000A    //10&lt;br/&gt;    .Relationship:    2    //&lt;span style="color: #000000;"&gt;RelationCache&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000800000400801    140737492551681&lt;br/&gt;    .Reserved[1]:    //0x0000000000000001    1&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Level:    1&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Associativity:    0x08    //8&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.LineSize:    0x0040    //64&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Size:    0x00008000    //32768&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Type&lt;/span&gt;:    1    //&lt;span style="color: #000000;"&gt;CacheInstruction&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;8&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x000000000000000A    //10&lt;br/&gt;    .Relationship:    2    //&lt;span style="color: #000000;"&gt;RelationCache&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0004000000400802    1125899911038978&lt;br/&gt;    .Reserved[1]:    //0x0000000000000000    0&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Level:    2&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Associativity:    0x08    //8&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.LineSize:    0x0040    //64&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Size:    0x00040000    //262144&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Type&lt;/span&gt;:    0    //&lt;span style="color: #000000;"&gt;CacheUnified&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;9&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x000000000000000F    //15&lt;br/&gt;    .Relationship:    2    //&lt;span style="color: #000000;"&gt;RelationCache&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0030000000400C03    13510798886308867&lt;br/&gt;    .Reserved[1]:    //0x0000000000000000    0&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Level:    3&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Associativity:    0x0C    //12&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.LineSize:    0x0040    //64&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.Size:    0x00300000    //3145728&lt;br/&gt;    .&lt;span style="color: #0000ff;"&gt;Cache&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Type&lt;/span&gt;:    0    //&lt;span style="color: #000000;"&gt;CacheUnified&lt;br/&gt;SYSTEM_LOGICAL_PROCESSOR_INFORMATION[&lt;/span&gt;10&lt;span style="color: #000000;"&gt;]&lt;br/&gt;    &lt;/span&gt;.ProcessorMask:    0x000000000000000F    //15&lt;br/&gt;    .Relationship:    1    //&lt;span style="color: #000000;"&gt;RelationNumaNode&lt;br/&gt;    &lt;/span&gt;.Reserved[0]:    //0x0000000000000000    0&lt;br/&gt;    .Reserved[1]:    //0x0000000000000000    0&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;GetLogicalProcessorInformation results:&lt;br/&gt;Number of NUMA nodes: &lt;/span&gt;1&lt;span style="color: #000000;"&gt;&lt;br/&gt;Number of physical processor packages: &lt;/span&gt;1&lt;span style="color: #000000;"&gt;&lt;br/&gt;Number of processor cores: &lt;/span&gt;2&lt;span style="color: #000000;"&gt;&lt;br/&gt;Number of logical processors: &lt;/span&gt;4&lt;span style="color: #000000;"&gt;&lt;br/&gt;Number of processor L1&lt;/span&gt;/L2/L3 caches: 4/2/1&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;源码下载&amp;mdash;&amp;mdash;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/zyl910/showGetLogicalProcessorInformation.rar"&gt;http://files.cnblogs.com/zyl910/showGetLogicalProcessorInformation.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zyl910/aggbug/2490512.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zyl910/archive/2012/05/08/2490512.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/grenet/archive/2012/05/04/2480682.html</id><title type="text">Win7下的内置FTP组件的设置详解</title><summary type="text"/><published>2012-05-04T02:41:00Z</published><updated>2012-05-04T02:41:00Z</updated><author><name>万仓一黍</name><uri>http://www.cnblogs.com/grenet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/grenet/archive/2012/05/04/2480682.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/grenet/archive/2012/05/04/2480682.html"/><content type="html">&lt;p&gt;在局域网中共享文件，FTP是比较方便的方案之一。Win7内部集成了FTP，只是设置起来颇费一番功夫。着文以记之。&lt;/p&gt;&lt;p&gt;一、安装FTP组件&lt;/p&gt;&lt;p&gt;由于Win7默认没有安装FTP组件。故FTP的设置第一步就是安装FTP组件&lt;/p&gt;&lt;p&gt;点击：控制面板&amp;#8212;》程序和功能&amp;#8212;》打开或关闭Windows功能。勾选&amp;#8220;FTP服务器&amp;#8221;及&amp;#8220;FTP服务&amp;#8221;&amp;#8220;FTP扩展性&amp;#8221;，点击&amp;#8220;确定&amp;#8221;，安装FTP组件。如下图所示&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/Windows.png" width="429" height="425" /&gt;&lt;/p&gt;&lt;p&gt;二、添加FTP站点&lt;/p&gt;&lt;p&gt;点击：控制面板&amp;#8212;》管理工具。选中&amp;#8220;Internet信息服务(IIS)管理器&amp;#8221;，如图&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/manage.png" width="651" height="464" /&gt;&lt;/p&gt;&lt;p&gt;双击&amp;#8220;Internet信息服务(IIS)管理器&amp;#8221;。弹出管理器界面，如下图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/IIS.png" /&gt;&lt;/p&gt;&lt;p&gt;单击选中&amp;#8220;网站&amp;#8221;，并且在其上右击，选择&amp;#8220;添加FTP站点&amp;#8221;，出现&amp;#8220;站点信息&amp;#8221;界面，如下所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FTP1.png" width="687" height="585" /&gt;&lt;/p&gt;&lt;p&gt;给FTP取名（本例是：zhu），以及设置FTP站点的物理路径（本例是：c:\ftp），点击&amp;#8220;下一步&amp;#8221;，出现&amp;#8220;绑定和SSL设置&amp;#8221;界面，如下图所示&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FTP2.png" width="687" height="585" /&gt;&lt;/p&gt;&lt;p&gt;IP设置为本机的IP地址，端口用FTP默认的21，SSL勾选&amp;#8220;无&amp;#8221;。点击&amp;#8220;下一步&amp;#8221;，出现&amp;#8220;身份验证和授权信息&amp;#8221;界面，如下图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FTP3.png" width="687" height="585" /&gt;&lt;/p&gt;&lt;p&gt;如果只是想设置简单的FTP，则&amp;#8220;身份验证&amp;#8221;和&amp;#8220;授权&amp;#8221;都勾选&amp;#8220;匿名&amp;#8221;，并且给匿名设置相应的权限。本例中，还要给FTP配置帐号，以及帐号的权限，故&amp;#8220;身份验证&amp;#8221;勾选&amp;#8220;基本&amp;#8221;，&amp;#8220;授权&amp;#8221;勾选&amp;#8220;未选定&amp;#8221;，点击&amp;#8220;完成&amp;#8221;，完成FTP站点的设置。&lt;/p&gt;&lt;p&gt;三、设置FTP帐号以及权限&lt;/p&gt;&lt;p&gt;由于Win7下的FTP帐号是Windows用户帐号。所以，先得添加两个用户帐号，一个是View，可以浏览、下载FTP内容；一个是Admin，完全控制FTP。&lt;/p&gt;&lt;p&gt;点击：控制面板&amp;#8212;》管理工具&amp;#8212;》计算机管理。在计算机管理的界面的左侧，点击：系统工具&amp;#8212;》本地用户和组&amp;#8212;》用户，右侧显示所有用户。如下图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/user.png" width="623" height="442" /&gt;&lt;/p&gt;&lt;p&gt;在&amp;#8220;用户&amp;#8221;上右击，出现&amp;#8220;新用户&amp;#8221;，如下所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/newuser.png" width="394" height="365" /&gt;&lt;/p&gt;&lt;p&gt;在用户名中输入View，设置好密码，去掉勾选&amp;#8220;用户下次登陆时须更改密码&amp;#8221;，勾选&amp;#8220;用户不能更改密码&amp;#8221;和&amp;#8220;密码永不过期&amp;#8221;。点击&amp;#8220;创建&amp;#8221;，完成用户View的创建。同样的步骤，创建Admin用户。由于Windows默认将用户添加到Users组，你可以将刚才的两个用户从Users组中删除。方法是在&amp;#8220;计算机管理&amp;#8221;中点击&amp;#8220;组&amp;#8221;，在右侧的列表中找到Users，双击之，出现如下界面，点中用户View，点&amp;#8220;删除&amp;#8221;，点中用户Admin，点&amp;#8220;删除&amp;#8221;。将两个用户从Users组中删除。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/userremove.png" width="414" height="430" /&gt;&lt;/p&gt;&lt;p&gt;接下来，在FTP站点中，给View和Admin添加权限。&lt;/p&gt;&lt;p&gt;点击：控制面板&amp;#8212;》管理工具&amp;#8212;》Internet信息服务(IIS)管理器。点中刚才新建的FTP站点。点中&amp;#8220;FTP授权规则&amp;#8221;。如下图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FTPRIGHT.png" width="734" height="499" /&gt;&lt;/p&gt;&lt;p&gt;点击右侧的&amp;#8220;编辑权限&amp;#8221;，对FTP站点文件夹添加用户权限。在弹出的窗口中，点击&amp;#8220;安全&amp;#8221;标签。，如下图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FolderRight-1.png" width="377" height="426" /&gt;&lt;/p&gt;&lt;p&gt;点&amp;#8220;编辑&amp;#8221;，出现权限的窗口，如下：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FolderRight-1.png" width="377" height="426" /&gt;&lt;/p&gt;&lt;p&gt;点&amp;#8220;添加&amp;#8221;，在&amp;#8220;输入对象名称来选择&amp;#8221;中输入View，点&amp;#8220;确定&amp;#8221;，添加View用户。如下所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FolderRight-2.png" width="471" height="257" /&gt;&lt;/p&gt;&lt;p&gt;添加的View用户，默认是只有读取、列出的权限。在依法添加Admin用户，给Admin用户添加完全控制的权限。如下所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FolderRight-3.png" width="377" height="426" /&gt;&lt;/p&gt;&lt;p&gt;再回到&amp;#8220;Internet信息服务(IIS)管理器&amp;#8221;窗口，双击刚才选中的&amp;#8220;FTP授权规则&amp;#8221;，在FTP站点中对View和Admin授权。如下所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FTPRIGHT-2.png" width="734" height="499" /&gt;&lt;/p&gt;&lt;p&gt;点击右侧的&amp;#8220;添加允许规则&amp;#8221;，在弹出的窗口中，勾选&amp;#8220;指定的用户&amp;#8221;，输入View，在下方的&amp;#8220;权限&amp;#8221;中，勾选&amp;#8220;读取&amp;#8221;。如下所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/FTPRIGHT-3.png" width="483" height="483" /&gt;&lt;/p&gt;&lt;p&gt;点&amp;#8220;确定&amp;#8221;，给FTP站点添加View用户，相应的权限是读取。再给FTP站点添加Admin用户，相应的权限是读取和写入。&lt;/p&gt;&lt;p&gt;至此，FTP的站点设置就完成了。站点文件夹是c:\ftp，View用户有读取（浏览和下载）的权限，Admin用户有读取和写入（上传和删除）的权限。当然，还可以根据实际的情况添加用户及相应的权限，也可以将用户添加进组，再给组设置权限。还可以添加匿名用户等等，不一而足了。&lt;/p&gt;&lt;p&gt;然而，事情远远没有结束。如果，你急于做测试的话。会发现，在本机上测试正常，但是用别的机器测试FTP的话，会发现连接不上。问题出在Win7下的防火墙。如果你把防火墙关掉，你会发现FTP恢复了正常，但你也不能因为要用FTP，就把Win7的防火墙关掉。要想在Win7开着防火墙的时候还要正常使用，还必须得在防火墙中进行一番设置&lt;/p&gt;&lt;p&gt;四、Win7的防火墙设置&lt;/p&gt;&lt;p&gt;点击：控制面板&amp;#8212;》Windows防火墙。点击左侧的&amp;#8220;允许程序或功能通过Windows防火墙&amp;#8221;，选中&amp;#8220;FTP服务器&amp;#8221;，将后面的两个框都勾选，如下所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/firewall.png" width="792" height="585" /&gt;&lt;/p&gt;&lt;p&gt;这是网上绝大多数介绍的防火墙设置。然而还不够，你做测试的话会发现，还是连接不上。还必须在防火墙中进一步做设置。&lt;/p&gt;&lt;p&gt;点击下方的&amp;#8220;允许运行另一程序&amp;#8221;，在弹出窗口里，点&amp;#8220;浏览&amp;#8221;，找到C:\Windows\System32\inetsrv\inetinfo.exe，点添加，也就是上图中的Internet Infomation Services。将后面的两个框也都选中。因为在Win7下，FTP是IIS的一个组件，因此也必须在防火墙中将IIS设置为允许。而IIS又不在默认的列表中，因此得手动添加。&lt;/p&gt;&lt;p&gt;遗憾的是，这样设置，FTP还是不能正常使用。由于FTP用的是21端口，因此在防火墙中还得添加出站和入站的端口规则。&lt;/p&gt;&lt;p&gt;在Windows防火墙窗口里，点击左侧的&amp;#8220;高级设置&amp;#8221;，弹出高级安全防火墙窗口，点击左侧的&amp;#8220;入站规则&amp;#8221;，如下图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/firewall-2.png" width="1061" height="791" /&gt;&lt;/p&gt;&lt;p&gt;点击右侧的&amp;#8220;新建规则&amp;#8221;，出现向导界面，勾选&amp;#8220;端口&amp;#8221;，如图：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/firewall-3.png" width="728" height="545" /&gt;&lt;/p&gt;&lt;p&gt;点击&amp;#8220;下一步&amp;#8221;，勾选TCP（FTP用的是TCP协议），再勾选特定本地端口，输入21（FTP用的是21端口）如图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/firewall-4.png" width="728" height="545" /&gt;&lt;/p&gt;&lt;p&gt;点击&amp;#8220;下一步&amp;#8221;，勾选&amp;#8220;允许连接&amp;#8221;，如图：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/firewall-5.png" width="728" height="545" /&gt;&lt;/p&gt;&lt;p&gt;点击&amp;#8220;下一步&amp;#8221;，默认的都选上，如图：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/firewall-6.png" width="728" height="545" /&gt;&lt;/p&gt;&lt;p&gt;点击&amp;#8220;下一步&amp;#8221;，在名称里输入名字，本例中是21，如图&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/firewall-7.png" width="728" height="545" /&gt;&lt;/p&gt;&lt;p&gt;点击&amp;#8220;完成&amp;#8221;，完成入站规则的设置，在用同样的方法，完成出站规则的设置，同样是21端口。&lt;/p&gt;&lt;p&gt;至此，在Win7的防火墙就已经设置好了。现在测试基本上就正常了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;不过，还有个小问题：&lt;/p&gt;&lt;p&gt;在用IE浏览FTP的时候，虽然可以登录，但是没法显示FTP内容。这个是IE的设置问题。在Internet选项中，将&amp;#8220;使用被动FTP（用于防火墙和DSL调制解调器的兼容性）&amp;#8221;勾掉就解决了不能浏览的问题。如下图所示：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/grenet/ie.png" width="428" height="505" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;后序。总体来说，Win7的内置FTP设置比一些第三方的FTP软件设置要繁琐一些。但是在某些场合下，还只能用Win7的内置FTP。以上的内容都是网上搜集来的，加上本人的亲测。如果谁在FTP设置上还有什么问题，欢迎交流。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/grenet/aggbug/2480682.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/grenet/archive/2012/05/04/2480682.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpfans2012/archive/2012/05/03/2481461.html</id><title type="text">mysql服务器查询慢原因分析与解决方法</title><summary type="text"/><published>2012-05-03T14:12:00Z</published><updated>2012-05-03T14:12:00Z</updated><author><name>php开发</name><uri>http://www.cnblogs.com/phpfans2012/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpfans2012/archive/2012/05/03/2481461.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpfans2012/archive/2012/05/03/2481461.html"/><content type="html">&lt;p&gt;会经常发现开发人员查一下没用索引的语句或者没有limit n的语句，这些没语句会对数据库造成很大的影响，例如一个几千万条记录的大表要全部扫描，或者是不停的做filesort，对数据库和服务器造成io影响等。这是镜像库上面的情况。&lt;/p&gt;&lt;p&gt;而到了线上库，除了出现没有索引的语句，没有用limit的语句，还多了一个情况,mysql连接数过多的问题。说到这里，先来看看以前我们的监控做法&lt;/p&gt;&lt;p&gt;1. 部署zabbix等开源分布式监控系统，获取每天的数据库的io，cpu，连接数&lt;/p&gt;&lt;p&gt;2. 部署每周性能统计，包含数据增加量，iostat，vmstat，datasize的情况&lt;/p&gt;&lt;p&gt;3. Mysql slowlog收集，列出top 10&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以前以为做了这些监控已经是很完美了，现在部署了mysql节点进程监控之后，才发现很多弊端&lt;/p&gt;&lt;p&gt;第一种做法的弊端: zabbix太庞大，而且不是在mysql内部做的监控，很多数据不是非常准备，现在一般都是用来查阅历史的数据情况&lt;/p&gt;&lt;p&gt;第二种做法的弊端：因为是每周只跑一次，很多情况没法发现和报警&lt;/p&gt;&lt;p&gt;第三种做法的弊端: 当节点的slowlog非常多的时候，top10就变得没意义了，而且很多时候会给出那些是一定要跑的定期任务语句给你。。参考的价值不大&lt;/p&gt;&lt;p&gt;那么我们怎么来解决和查询这些问题呢&lt;/p&gt;&lt;p&gt;&lt;br /&gt;对于排查问题找出性能瓶颈来说，最容易发现并解决的问题就是MYSQL的慢查询以及没有得用索引的查询。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OK，开始找出mysql中执行起来不&amp;ldquo;爽&amp;rdquo;的SQL语句吧。&lt;/p&gt;&lt;p&gt;=========================================================&lt;/p&gt;&lt;p&gt;方法一： 这个方法我正在用，呵呵，比较喜欢这种即时性的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;代码如下 复制代码 &lt;br /&gt;&amp;nbsp;Mysql5.0以上的版本可以支持将执行比较慢的SQL语句记录下来。&lt;/p&gt;&lt;p&gt;mysql&amp;gt; show variables like 'long%';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注：这个long_query_time是用来定义慢于多少秒的才算&amp;ldquo;慢查询&amp;rdquo;&lt;br /&gt;+-----------------+-----------+&lt;br /&gt;| Variable_name&amp;nbsp;&amp;nbsp; | Value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;+-----------------+-----------+&lt;br /&gt;| long_query_time | 10.000000 | &lt;br /&gt;+-----------------+-----------+&lt;br /&gt;1 row in set (0.00 sec)&lt;/p&gt;&lt;p&gt;mysql&amp;gt; set long_query_time=1;&amp;nbsp;&amp;nbsp; 注： 我设置了1, 也就是执行时间超过1秒的都算慢查询。&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;/p&gt;&lt;p&gt;mysql&amp;gt; show variables like 'slow%';&lt;br /&gt;+---------------------+---------------+&lt;br /&gt;| Variable_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;+---------------------+---------------+&lt;br /&gt;| slow_launch_time&amp;nbsp;&amp;nbsp;&amp;nbsp; | 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;| slow_query_log&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注：是否打开日志记录&lt;br /&gt;| slow_query_log_file | /tmp/slow.log |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注： 设置到什么位置&lt;br /&gt;+---------------------+---------------+&lt;br /&gt;3 rows in set (0.00 sec)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;mysql&amp;gt; set global slow_query_log='ON'&amp;nbsp;&amp;nbsp; 注：打开日志记录&lt;/p&gt;&lt;p&gt;一旦slow_query_log变量被设置为ON，mysql会立即开始记录。&lt;/p&gt;&lt;p&gt;/etc/my.cnf&amp;nbsp;&amp;nbsp; 里面可以设置上面MYSQL全局变量的初始值。&lt;br /&gt;long_query_time=1&lt;br /&gt;slow_query_log_file=/&lt;a href="http://www.hzhuti.com/nokia/x6/"&gt;http://www.hzhuti.com/nokia/x6/&lt;/a&gt;/slow.log&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;====================================================&lt;/p&gt;&lt;p&gt;方法二:mysqldumpslow命令&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;代码如下 复制代码 &lt;br /&gt;/path/mysqldumpslow -s c -t 10 /tmp/slow-log&lt;br /&gt;这会输出记录次数最多的10条SQL语句，其中：&lt;/p&gt;&lt;p&gt;-s, 是表示按照何种方式排序，c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序，ac、at、al、ar，表示相应的倒叙； &lt;br /&gt;-t, 是top n的意思，即为返回前面多少条的数据； &lt;br /&gt;-g, 后边可以写一个正则匹配模式，大小写不敏感的； &lt;br /&gt;比如&lt;br /&gt;/path/mysqldumpslow -s r -t 10 /tmp/slow-log&lt;br /&gt;得到返回记录集最多的10个查询。&lt;br /&gt;/path/mysqldumpslow -s t -t 10 -g &amp;ldquo;left join&amp;rdquo; /tmp/slow-log&lt;br /&gt;得到按照时间排序的前10条里面含有左连接的查询语句。&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后总结一下节点监控的好处&lt;/p&gt;&lt;p&gt;1． 轻量级的监控，而且是实时的，还可以根据实际的情况来定制和修改&lt;/p&gt;&lt;p&gt;2． 设置了过滤程序，可以对那些一定要跑的语句进行过滤&lt;/p&gt;&lt;p&gt;3． 及时发现那些没有用索引，或者是不合法的查询，虽然这很耗时去处理那些慢语句，但这样可以避免数据库挂掉，还是值得的&lt;/p&gt;&lt;p&gt;4.&amp;nbsp; 在数据库出现连接数过多的时候，程序会自动保存当前数据库的processlist，DBA进行原因查找的时候这可是利器&lt;/p&gt;&lt;p&gt;5.&amp;nbsp; 使用mysqlbinlog 来分析的时候，可以得到明确的数据库状态异常的时间段&lt;/p&gt;&lt;p&gt;有些人会建义我们来做mysql配置文件设置&lt;/p&gt;&lt;p&gt;&lt;br /&gt;调节tmp_table_size&amp;nbsp; 的时候发现另外一些参数&lt;br /&gt;Qcache_queries_in_cache&amp;nbsp; 在缓存中已注册的查询数目&amp;nbsp; &lt;br /&gt;Qcache_inserts&amp;nbsp; 被加入到缓存中的查询数目&amp;nbsp; &lt;br /&gt;Qcache_hits&amp;nbsp; 缓存采样数数目&amp;nbsp; &lt;br /&gt;Qcache_lowmem_prunes&amp;nbsp; 因为缺少内存而被从缓存中删除的查询数目&amp;nbsp; &lt;br /&gt;Qcache_not_cached&amp;nbsp; 没有被缓存的查询数目 (不能被缓存的，或由于 QUERY_CACHE_TYPE)&amp;nbsp; &lt;br /&gt;Qcache_free_memory&amp;nbsp; 查询缓存的空闲内存总数&amp;nbsp; &lt;br /&gt;Qcache_free_blocks&amp;nbsp; 查询缓存中的空闲内存块的数目&amp;nbsp; &lt;br /&gt;Qcache_total_blocks&amp;nbsp; 查询缓存中的块的总数目 &lt;/p&gt;&lt;p&gt;Qcache_free_memory 可以缓存一些常用的查询,如果是常用的sql会被装载到内存。那样会增加数据库访问速度。&lt;/p&gt;&lt;p&gt;更多可参考&lt;a href="http://www.111cn.net/database/mysql/42467.htm"&gt;http://www.111cn.net/database/mysql/42467.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpfans2012/aggbug/2481461.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpfans2012/archive/2012/05/03/2481461.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangboyang/archive/2012/04/30/2477243.html</id><title type="text">输入3个整数，按由小到大的顺序输出</title><summary type="text"/><published>2012-04-30T13:04:00Z</published><updated>2012-04-30T13:04:00Z</updated><author><name>江渤洋</name><uri>http://www.cnblogs.com/jiangboyang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangboyang/archive/2012/04/30/2477243.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangboyang/archive/2012/04/30/2477243.html"/><content type="html">/*&lt;br/&gt; *  输入3个整数，按由小到大的顺序输出。&lt;br/&gt; */&lt;br/&gt;&lt;br/&gt;#include&amp;lt;iostream&amp;gt;&lt;br/&gt;using namespace std;&lt;br/&gt;&lt;br/&gt;void swap(int *p1, int *p2);&lt;br/&gt;&lt;br/&gt;void main()&lt;br/&gt;{&lt;br/&gt;int num1,num2,num3;&lt;br/&gt;int *p1,*p2,*p3;&lt;br/&gt;&lt;br/&gt;p1=&amp;amp;num1;&lt;br/&gt;p2=&amp;amp;num2;&lt;br/&gt;p3=&amp;amp;num3;&lt;br/&gt;&lt;br/&gt;cout&amp;lt;&amp;lt;"请输入三个整数："&amp;lt;&amp;lt;endl;&lt;br/&gt;cin&amp;gt;&amp;gt;num1&amp;gt;&amp;gt;num2&amp;gt;&amp;gt;num3;&lt;br/&gt;&lt;br/&gt;if(num1&amp;gt;num2){swap(p1,p2);}&lt;br/&gt;if(num2&amp;gt;num3){swap(p2,p3);}&lt;br/&gt;if(num1&amp;gt;num2){swap(p1,p2);}&lt;br/&gt;&lt;br/&gt;cout&amp;lt;&amp;lt;num1&amp;lt;&amp;lt;','&amp;lt;&amp;lt;num2&amp;lt;&amp;lt;','&amp;lt;&amp;lt;num3&amp;lt;&amp;lt;endl;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;void swap(int *p1,int *p2)&lt;br/&gt;{&lt;br/&gt;int temp=0;&lt;br/&gt;&lt;br/&gt;temp=*p1;&lt;br/&gt;&lt;br/&gt;*p1=*p2;&lt;br/&gt;&lt;br/&gt;*p2=temp;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;运行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/397707/2012050515283223.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jiangboyang/aggbug/2477243.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangboyang/archive/2012/04/30/2477243.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jamesblog/archive/2012/04/29/2476334.html</id><title type="text">Windows 7的CMD中 Telnet 无法执行的解决办法</title><summary type="text"/><published>2012-04-29T11:37:00Z</published><updated>2012-04-29T11:37:00Z</updated><author><name>lzlvv</name><uri>http://www.cnblogs.com/Jamesblog/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jamesblog/archive/2012/04/29/2476334.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jamesblog/archive/2012/04/29/2476334.html"/><content type="html">&lt;p&gt;以下内容引用 微米博客&amp;nbsp;&lt;/p&gt;&lt;p&gt;在Windows 7的CMD中，执行telnet 192.168.1.10 80 会提示没有这个命令的提示，这是因为Win7默认是没有安装Telnet的（在以往的&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Tahoma; font-size: 14px;"&gt;WINDOWS系统中都是默认安装的）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Tahoma; font-size: 14px;"&gt;解决办法：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Tahoma; font-size: 14px;"&gt;在Win7中，进入控制面板，然后进入程序，点击&amp;ldquo;打开或关闭Windows功能&amp;rdquo;，然后在出来的功能树菜单中，找到"Telnet客户端"，勾选&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Tahoma; font-size: 14px;"&gt;它，然后安装即可，如下图：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://hiphotos.baidu.com/flondon/pic/item/2ffebdcd7cd98d105a233878213fb80e7aec90a3.jpg" alt="" width="428" height="424" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Tahoma;"&gt;安装完成后，然后再进Win7，你就会发现telnet命令可以使用了。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jamesblog/aggbug/2476334.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jamesblog/archive/2012/04/29/2476334.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpfans2012/archive/2012/04/26/2472065.html</id><title type="text">apache和.htaccess设置404错误页面方法</title><summary type="text"/><published>2012-04-26T13:41:00Z</published><updated>2012-04-26T13:41:00Z</updated><author><name>php开发</name><uri>http://www.cnblogs.com/phpfans2012/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpfans2012/archive/2012/04/26/2472065.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpfans2012/archive/2012/04/26/2472065.html"/><content type="html">&lt;p&gt;为Apache Server设置 404错误页面的方法很简单，只需在.htaccess 文件中加入如下内容即可：&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;代码如下 复制代码 &lt;br /&gt;ErrorDocument 404 /notfound.php&amp;nbsp; &lt;/p&gt;&lt;p&gt;注意：&lt;br /&gt;1.切记不要将404错误转向到网站主页，否则可能会导致主页在搜索引擎中消失&lt;br /&gt;2.切记不要使用绝对URL(例如：&lt;a href="http://www.hzhuti.com/nokia/n96/"&gt;http://www.hzhuti.com/nokia/n96/&lt;/a&gt;形式)，如果使用绝对URL返回的状态码是&amp;ldquo;302&amp;rdquo;+&amp;ldquo;200&amp;rdquo;（已测试）&lt;/p&gt;&lt;p&gt;正确的做法是在 .htaccess 中加入&lt;/p&gt;&lt;p&gt;&amp;nbsp;代码如下 复制代码 &lt;br /&gt;ErrorDocument 404 /404.html &lt;/p&gt;&lt;p&gt;而不是&lt;/p&gt;&lt;p&gt;&amp;nbsp;代码如下 复制代码 &lt;br /&gt;ErrorDocument 404 &lt;a href="http://www.xxx.com/404.html"&gt;http://www.xxx.com/404.html&lt;/a&gt; &lt;/p&gt;&lt;p&gt;前者返回的是 404 状态码，&lt;/p&gt;&lt;p&gt;而后者返回的是 200 状态码。如果一个 404 页面的内容小于 512b，IE 会认为该 404 页面不够友好，在 IE 下将不会成功返回该 404 错误页面。&lt;/p&gt;&lt;p&gt;综合上面如果还有朋友做404用的是绝对路径的话，立马修改来来吧，要不你的返回状态为200哦，这些只讲到了apache的404页面设置在 iis中千万记得在设置时也要设置为相对路径，否则会返回200状态代码而不是我们要的404代码，以前我就有错误的做过，结果大家都知道的。&lt;/p&gt;&lt;p&gt;更多详细内容请查看：&lt;a href="http://www.111cn.net/phper/apache/42430.htm"&gt;http://www.111cn.net/phper/apache/42430.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpfans2012/aggbug/2472065.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpfans2012/archive/2012/04/26/2472065.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heqichang/archive/2012/04/26/2471774.html</id><title type="text">Windows下硬链接、软链接和快捷方式的区别</title><summary type="text"/><published>2012-04-26T09:34:00Z</published><updated>2012-04-26T09:34:00Z</updated><author><name>heqichang</name><uri>http://www.cnblogs.com/heqichang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heqichang/archive/2012/04/26/2471774.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heqichang/archive/2012/04/26/2471774.html"/><content type="html">&lt;p&gt;mklink是windows系统下创建符号链接和硬链接的命令工具，它是一个很好的解决文件系统问题的工具。使用它需要管理员权限。&lt;/p&gt;  &lt;p&gt;首先，先来介绍下mklink这个命令，可以看下下面的截图：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/heqichang/201204/201204261733406074.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Capture" border="0" alt="Capture" src="http://images.cnblogs.com/cnblogs_com/heqichang/201204/201204261733519215.png" width="618" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;说明也已经很详细了，我们直接看下面例子吧。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;下面的图片向我们展示了在windows系统中创建符号链接，硬链接和快捷方式有什么不同。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;符号链接&lt;/font&gt;&lt;/strong&gt;（&lt;font size="4"&gt;Symbolic link&lt;/font&gt;）&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;执行命令 mklink link_name target_name &lt;/li&gt;    &lt;li&gt;创建链接后的图标和快捷方式很像 &lt;/li&gt;    &lt;li&gt;在系统中不占用空间 &lt;/li&gt;    &lt;li&gt;在文件系统中不是一个单独的文件 &lt;/li&gt;    &lt;li&gt;在操作系统层解析（！？） &lt;/li&gt;    &lt;li&gt;如果源文件被删除了，链接就没用了 &lt;/li&gt;    &lt;li&gt;移除源文件不会影响符号链接 &lt;/li&gt;    &lt;li&gt;移除链接文件也不会影响源文件 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;硬链接&lt;/strong&gt;（Hard link）&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;执行命令 mklink /H link_name target_name &lt;/li&gt;    &lt;li&gt;在系统中占用的空间与源文件相同，但在系统中引用的是相同的对象（不是拷贝） &lt;/li&gt;    &lt;li&gt;在操作系统层解析（！？） &lt;/li&gt;    &lt;li&gt;图标和创建快捷方式的图标不同 &lt;/li&gt;    &lt;li&gt;移除源文件不会影响硬链接 &lt;/li&gt;    &lt;li&gt;移除硬链接不会影响源文件 &lt;/li&gt;    &lt;li&gt;如果源文件被删除，它的内容依然通过硬链接存在 &lt;/li&gt;    &lt;li&gt;硬链接文件的任何更改都会影响到源文件 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;快捷方式&lt;/strong&gt;（Shortcut）&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;在选择的源文件上鼠标右键，通过下拉菜单创建 &lt;/li&gt;    &lt;li&gt;快捷方式在系统中跟源文件是完全分离的 &lt;/li&gt;    &lt;li&gt;只有那些懂得快捷方式的程序知道它们 &lt;/li&gt;    &lt;li&gt;如果源文件删除，链接就没用了 &lt;/li&gt;    &lt;li&gt;移除源文件不会移除快捷方式 &lt;/li&gt;    &lt;li&gt;移除快捷方式不会影响到源文件 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/heqichang/201204/201204261733558183.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="symlink_hardlink" border="0" alt="symlink_hardlink" src="http://images.cnblogs.com/cnblogs_com/heqichang/201204/20120426173418942.png" width="671" height="584" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;原文：&lt;a title="http://www.maxi-pedia.com/mklink" href="http://www.maxi-pedia.com/mklink"&gt;http://www.maxi-pedia.com/mklink&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;顺便推荐一个实现这个功能的简单工具：&lt;a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html" target="_blank"&gt;Link Shell Extension&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heqichang/aggbug/2471774.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heqichang/archive/2012/04/26/2471774.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/windowsxp/archive/2012/04/24/2467520.html</id><title type="text">自己动手不求人 - ghost安装系统软件硬盘安装器 安装ghost图文教程</title><summary type="text"/><published>2012-04-24T01:40:00Z</published><updated>2012-04-24T01:40:00Z</updated><author><name>XP系统之家-优化,精简,xp sp3,win7旗舰版下载</name><uri>http://www.cnblogs.com/windowsxp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/windowsxp/archive/2012/04/24/2467520.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/windowsxp/archive/2012/04/24/2467520.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: medium;"&gt;现在市面上越来越多的GHOST XP SP3，&lt;span&gt;GHOST WIN7 SP1 系统，这些系统有的需要做成U盘启动或者进入PE系统安装。但这些都不是很方便，这里教大家一个很简单的方式安装系统，不需要刻盘，不需要U盘，也不需要启动盘。直接硬盘下安装&lt;span&gt;GHOST系统&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;将下载的ISO文件用WinRAR打开,把其中的"GHO镜像安装器.exe"和"GHO镜像安装器.INI"(硬盘安装器）、&amp;ldquo;WINXPSP2.GHO&amp;rdquo;解压到硬盘根目录，比如E:\.&amp;nbsp;&lt;span&gt;(请不要解压到D盘，程序会发生错误）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.jb51.net/upload/20080124222205591.jpg" alt="" border="0" /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.jb51.net/upload/20080124222206327.jpg" alt="" border="0" /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.jb51.net/upload/20080124222206804.jpg" alt="" border="0" /&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;运行"GHO镜像安装器.exe"就可以恢复了。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.jb51.net/upload/20080124222206511.jpg" alt="" border="0" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/windowsxp/aggbug/2467520.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/windowsxp/archive/2012/04/24/2467520.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/windowsxp/archive/2012/04/20/2460645.html</id><title type="text">Windows To Ghost系统封装之必备软件集 - 好压</title><summary type="text"/><published>2012-04-20T14:42:00Z</published><updated>2012-04-20T14:42:00Z</updated><author><name>XP系统之家-优化,精简,xp sp3,win7旗舰版下载</name><uri>http://www.cnblogs.com/windowsxp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/windowsxp/archive/2012/04/20/2460645.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/windowsxp/archive/2012/04/20/2460645.html"/><content type="html">&lt;p&gt;&lt;span style="background-color: #ffffff;"&gt;好压压缩软件（HaoZip）是强大的压缩文件管理器，是完全免费的新一代压缩软件，相比其它压缩软件系统资源占用更少，有更好的兼容性，压缩率比较高。&lt;/span&gt;&lt;/p&gt;&lt;div class="text_pic" style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible; zoom: 1 !important; filter: none; line-height: normal; color: #160303; background-color: #f0e8e4; float: right; padding-bottom: 3px; width: 165px; position: relative;"&gt;&lt;a class="pic-handle" style="color: #816767; font-family: Verdana, Arial, Helvetica, sans-serif; text-decoration: none;" title="查看图片" href="http://baike.baidu.com/image/f392492c30a95ba58b139965" target="_blank"&gt;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;a style="color: #816767; font-family: Verdana, Arial, Helvetica, sans-serif; text-decoration: none;" href="http://baike.baidu.com/image/f392492c30a95ba58b139965" target="_blank"&gt;&lt;img class="editorImg nslog:1232" title="好压新图标" src="http://hiphotos.baidu.com/ghost_sp3/pic/item/59523bd7a02ce89f562c848a.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;　它提供了对ZIP、7Z和TAR文件的完整支持，能解压RAR、ACE、UUE、JAR、XPI、BZ2、BZIP2、TBZ2、TBZ、GZ、GZIP、TGZ、 TPZ、LZMA、Z、TAZ、LZH、LZA、WIM、SWM、CPIO、 CAB、ISO、ARJ、XAR、RPM、DEB、DMG、HFS等多达44种格式文件这是同类软件无法比拟的。&lt;/p&gt;&lt;div class="spctrl" style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; line-height: normal; color: #160303; background-color: #f0e8e4;"&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;好压压缩软件的功能包括强力压缩、分卷、加密、自解压模块、智能图片转换、智能媒体文件合并等功能。完美支持鼠标拖放及外壳扩展。&lt;/p&gt;&lt;div class="album-view" style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; line-height: normal; color: #160303; background-color: #f0e8e4; float: right; width: 219px;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="spctrl" style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; line-height: normal; color: #160303; background-color: #f0e8e4;"&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;使用非常简单方便，配置选项不多，仅在资源管理器中就可以完成你想做的所有工作，并且具有估计压缩功能，你可以在压缩文件之前得到用ZIP、7Z两种压缩工具各三种压缩方式下的大概压缩率；还有强大的历史记录能；而资源占用相对较少，强大的固实压缩、智能图片压缩和多媒体文件处理功能是大多压缩工具所不具备的。&lt;/p&gt;&lt;div class="spctrl" style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; line-height: normal; color: #160303; background-color: #f0e8e4;"&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;目前好压的最新版本是2010年10月28日发布的V2.1 正式版&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;zwj;&lt;/span&gt;&lt;/p&gt;&lt;table style="table-layout: auto !important; width: 100%;" border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="downimg1" style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; text-align: center;" align="middle" width="250"&gt;&lt;span style="color: #000000;"&gt;&lt;img src="http://hiphotos.baidu.com/ghost_sp3/pic/item/758a20d96f19905f6227988a.jpg" alt="好压解压缩软件" width="166" height="175" /&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;table class="down2" style="table-layout: auto !important; width: 100%;" border="0" cellspacing="0" cellpadding="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;" width="70"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;软件语言：&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;简体中文&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;软件版本：&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;V2.1 (Build 5278)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;软件大小：&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;4.83 M&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;更新日期：&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;2010-10-28&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;系统要求：&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;Win7 / XP / Vista / Win2000&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;MD5：&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="font-size: 12px; font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none;"&gt;&lt;span style="color: #000000;"&gt;180D14260E19755CF7CD0678347C7C28&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;a style="color: #816767; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif; text-decoration: none; line-height: normal; background-color: #f0e8e4;" href="http://download.haozip.com/uniondown/haozip_tiny.204842.exe" target="_blank"&gt;&lt;span style="color: #000000;"&gt;http://download.haozip.com/uniondown/haozip_tiny.204842.exe&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/windowsxp/aggbug/2460645.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/windowsxp/archive/2012/04/20/2460645.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dragonwlb/archive/2012/04/18/2455644.html</id><title type="text">windows XP中文件内容搜索仅能针对部分类型文件的问题</title><summary type="text"/><published>2012-04-18T09:29:00Z</published><updated>2012-04-18T09:29:00Z</updated><author><name>王林博</name><uri>http://www.cnblogs.com/dragonwlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dragonwlb/archive/2012/04/18/2455644.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dragonwlb/archive/2012/04/18/2455644.html"/><content type="html">&lt;p&gt;默认情况下Windows XP 只搜索一些特定类型的文件类型中的文本, jsp, asp, java文件类型都不能搜索。要想在所有文件类型中搜索您指定的文本请按照下列步骤操作：&lt;/p&gt;&lt;p&gt;1. 单击&amp;ldquo;开始&amp;rdquo;，然后单击&amp;ldquo;搜索&amp;rdquo;（或指向&amp;ldquo;搜索&amp;rdquo;，然后单击&amp;ldquo;文件或文件夹&amp;rdquo;）。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/374087/2012041817203714.png" alt="" /&gt;&lt;br /&gt;2. 单击&amp;ldquo;改变首选项&amp;rdquo;，然后单击&amp;ldquo;使用制作索引服务(使本地搜索更快)&amp;rdquo;。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/374087/2012041817230417.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;3.单击使用制作索引服务（使本地搜索更快）（I）进入以下界面：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/374087/2012041817235029.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;3. 单击&amp;ldquo;改变制作索引服务设置(高级)&amp;rdquo;。请注意，您不必打开索引服务。 在工具栏上，单击&amp;ldquo;显示/隐藏控制台树&amp;rdquo;。 在左窗格中，右键单击&amp;ldquo;本机索引服务&amp;rdquo;，然后单击&amp;ldquo;属性&amp;rdquo;。&amp;nbsp;在&amp;ldquo;生成&amp;rdquo;选项卡上，单击以选中&amp;ldquo;含有未知扩展名的索引文件&amp;rdquo;复选框，然后单击&amp;ldquo;确定&amp;rdquo;。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/374087/2012041817242663.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;7. 关闭索引服务控制台。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dragonwlb/aggbug/2455644.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dragonwlb/archive/2012/04/18/2455644.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xujj/archive/2012/04/17/2453074.html</id><title type="text">win7 自动登录</title><summary type="text"/><published>2012-04-17T00:46:00Z</published><updated>2012-04-17T00:46:00Z</updated><author><name>北风飘</name><uri>http://www.cnblogs.com/xujj/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xujj/archive/2012/04/17/2453074.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xujj/archive/2012/04/17/2453074.html"/><content type="html">&lt;p&gt;开始—&amp;gt;netplwiz&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xujj/201204/201204170846496365.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/xujj/201204/201204170846504893.png" width="326" height="386" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;去掉 要使用本机选项---&amp;gt;应用&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xujj/201204/201204170846543371.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/xujj/201204/20120417084658212.png" width="271" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;输入用户密码,完成.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xujj/aggbug/2453074.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xujj/archive/2012/04/17/2453074.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html</id><title type="text">关于quotename的用法</title><summary type="text"/><published>2012-04-16T13:47:00Z</published><updated>2012-04-16T13:47:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;首先，sqlserver里的标识符有一定的规则，比如&amp;nbsp; 你 &lt;br /&gt;create table abc 123(...) &lt;br /&gt;那么中间含有空格，它不是符合规则的。 &lt;br /&gt;&lt;br /&gt;你会写做 create table [abc 123](....) &lt;br /&gt;即以[]来定界标识符。&lt;br /&gt;&lt;br /&gt;quotename将 字串成为有效的标识符。 &lt;br /&gt;&lt;br /&gt;它有什么用呢？ 我举个例子：&lt;/p&gt;&lt;p&gt;&lt;br /&gt;你有个表名字叫做 aa[]bb &lt;br /&gt;&lt;br /&gt;当某些应用动态语句查询时 你如何写呢 &lt;br /&gt;exec('select * from aa[]bb') ？X&lt;br /&gt;&lt;br /&gt;set @sql='select * from ' + quotename('aa[]bb') &lt;br /&gt;exec(@sql) &lt;br /&gt;&lt;br /&gt;当然你也可以直接写出转义的写法 &lt;br /&gt;&lt;br /&gt;select * from [aa[]]bb] &lt;br /&gt;&lt;br /&gt;也就是说，quotename 使函数中的输入成为一个有效的标识符。 &lt;br /&gt;比如上例中 aa[]bb 不是一个有效的标识符。&lt;/p&gt;&lt;p&gt;还有一点就是quotename函数有几种写法： &lt;br /&gt;&amp;nbsp; quotename('aa') 生成的有效的标识符为 [aa] &lt;br /&gt;&amp;nbsp; quotename('aa','') 生成的有效的标识符为 [aa] &lt;br /&gt;&amp;nbsp; quotename('aa','''') 生成的有效的标识符为 'aa'&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;解释2：&lt;/p&gt;&lt;p&gt;简单来说吧&lt;br /&gt;比如你有一个表，名字叫 &lt;span style="color: #0000ff"&gt;index&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;你有一个动态查询，参数是表名&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;declare&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000"&gt;256&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;index&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;-查这个表里的数据：&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;exec&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;这样print出来的数据是&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;select&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;index&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;因为index是字键字，肯定出错，加上括号就可以了：&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;select&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;index&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;这便有了QUOTENAME，即：&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;结果：select * from [index]&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;exec&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;select * from &lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@tbname&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;if ($ != jQuery) {$ = jQuery.noConflict();}var isLogined = false;var cb_blogId = 45241;var cb_entryId = 1312786;var cb_blogApp = "smfish007bin";var cb_blogUserGuid = "8cf7460b-63cf-dd11-9e4d-001cf0cd104b";var cb_entryCreatedDate = '2008/10/16 16:46:00';&lt;/script&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2452712.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/04/16/2452712.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lei1016cn/archive/2012/04/13/2445471.html</id><title type="text">Why does my shared clipboard not work?</title><summary type="text"/><published>2012-04-13T03:18:00Z</published><updated>2012-04-13T03:18:00Z</updated><author><name>lei1016cn</name><uri>http://www.cnblogs.com/lei1016cn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lei1016cn/archive/2012/04/13/2445471.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lei1016cn/archive/2012/04/13/2445471.html"/><content type="html">&lt;div&gt;&lt;div&gt;The TS shared clipboard allows you to copy and paste data between local and remote sessions. When it works its really simple and seamless, but what about when it doesn&amp;#8217;t? Diagnosing clipboard problems can be hard and frustrating!&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;The majority of clipboard problems fall into the category of clipboard viewer chain related issues. What is the clipboard viewer chain? Essentially it is a collection of applications which are interested in being notified of updates to the local clipboard. Applications which have registered to be a part of the viewer chain receive a notification whenever the clipboard has been updated. However, there is a major caveat! The clipboard viewer chain is application-controlled. This means that applications in the chain are responsible for:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;o &amp;nbsp;Passing on notification messages to the next viewer in the chain&lt;/div&gt;&lt;div&gt;o &amp;nbsp;Removing other applications from the chain&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Passing on clipboard update notification messages&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Assume there are no applications in the viewer chain. Application A joins the chain and it appears as follows:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;-&amp;gt; A&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Application B then registers to join the chain. When it does so, it gets told who was previously at the front of the chain, and it is responsible for storing this information. The chain is now:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;-&amp;gt; B -&amp;gt; A&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Let&amp;#8217;s have C and D join as well (in that order). The chain is now:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;-&amp;gt; D -&amp;gt; C -&amp;gt; B -&amp;gt; A&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Now, assume some text is copied to the clipboard. The system looks at who is at the front of the viewer chain and notifies them of the clipboard update. In this case it is D. D does what it needs to and then looks up who is next in the chain by referring to some information it has stored away somewhere. This is where problems can arise. If D is a badly written application (they do exist), then it might not have stored who was previously at the front of the chain when it joined (or maybe there is a bug and it gets the wrong information), and as a result C will not be notified of the update. Hence, we have a broken viewer chain &amp;#8211; C, B and A are not told that the clipboard was updated.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Removing applications from the viewer chain&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Assume that the viewer chain looks as follows:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;-&amp;gt; D -&amp;gt; C -&amp;gt; B -&amp;gt; A&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;B decides that it is time to leave the chain. So, it tells the system that it wants to be removed from the chain. The system then sends a message to the window at the front of the chain which says something like:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;#8220;Remove B from the chain. A should take B&amp;#8217;s place in the chain.&amp;#8221;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Since D is at the front of the chain, it checks to see if B follows it in the chain. If not, it passes the message on to C. C sees that B follows it in the chain, so it updates its internal structures and now records A as following it in the chain. The chain is now:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;-&amp;gt; D -&amp;gt; C -&amp;gt; A&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Of course, this removal process is prone to failure. Say D did not pass the deletion message on. The chain remains as:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;-&amp;gt; D -&amp;gt; C -&amp;gt; B -&amp;gt; A&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;But, when C tries to send the clipboard update notification to B what will happen? If B has exited then A will not get the notification. If B has not exited it might choose to ignore the notification as it has no obligation to pass it on since it is not part of the chain. Hence, we have a broken chain and A will most likely not be notified of clipboard updates.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Now, imagine that B decides to rejoin the chain. Then we will have:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;-&amp;gt; B -&amp;gt; D -&amp;gt; C -&amp;gt; B -&amp;gt; A&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;This is actually:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;+---------+&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;V &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/div&gt;&lt;div&gt;-&amp;gt; B -&amp;gt; D -&amp;gt; C&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;In other words, we have a loop in the viewer chain. Not only will A not be notified of updates, but the update notification will spin between B, D and C continuously!&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;What does all of this have to do with the TS shared clipboard?&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Okay, so we have discussed some theory, but what does it have to do with the TS shared clipboard? Everything!&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;In the local session the TS client is in the clipboard viewer chain and in the remote session the RDPCLIP virtual channel application is in the viewer chain. When a clipboard update happens in the local session, the TS client is notified and informs RDPCLIP of the changes so it can propagate them to the remote session. Similarly, when a clipboard update happens in the remote session, RDPCLIP is notified and informs the TS client of the changes.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Now, say that the local clipboard viewer chain is broken so that the TS client is not notified of clipboard updates. That means that clipboard changes will not be sent to the remote session, resulting in a user being unable to paste data into the remote session as the clipboard there is not updated with the latest formats. Similarly, if the clipboard viewer chain in the remote session is broken so that RDPCLIP does not get update notifications, then clipboard changes will not be propagated to the local session and a user will be unable to paste data from the remote session.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;What is the solution to a broken viewer chain? If remote to local session copy and paste does not work, you can try to kill rdpclip.exe and then restart it. You can use Task Manager to kill the process and then at any command prompt just type &amp;#8220;rdpclip&amp;#8221;. When it starts up, RDPCLIP should reinsert itself into the chain. If local to remote session copy and paste is broken, you should close the TS client and then reconnect to the session, since the client inserts itself into the viewer chain when it starts up.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;What about loops in the viewer chain? If you notice either the TS client or RDPCLIP consistently using a lot of CPU cycles, then it could possibly be due to a loop in the chain. First try to kill and restart RDPCLIP. It may be part of a circular viewer chain and as a result constantly sending the client &amp;#8220;clipboard updated&amp;#8221; packets, causing itself and the client to work overtime. If this does not solve the problem, try to close the client and reconnect to the session.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Windows Vista and Longhorn Server to the rescue&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;In Vista and Longhorn Server (LHS) our friends in USER32 added some new system APIs which implement a system-controlled viewer chain. No longer do applications have to contend with managing the chain! The system now maintains a list of applications which want to be notified of updates to the clipboard, and when the clipboard is updated, the system goes and tells each one that the clipboard contents have changed.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Since the new clipboard APIs are only available on Vista and above, you have to be running the TS client on Vista and connecting to a Vista (or Windows Server Codenamed Longhorn) machine to get the full benefits of the new behavior. If you are connecting to a Vista machine from an XP box, then the local clipboard viewer chain is still subject to breakage, while the remote clipboard viewer chain (of which RDPCLIP is a part) will be more reliable and remain intact. Hence your remote-to-local copy and paste operations should always work, while the local-to-remote could still break (due to the local clipboard chain being application-controlled).&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Summary&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;If you have a shared clipboard problem, see if the following troubleshooting guide helps:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="0" border="0" style="margin-left: 1px; color: #333333; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-align: left; background-color: #ced5db; border-collapse: collapse; "&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: windowtext; border-top-width: 1pt; border-top-style: solid; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: windowtext; border-left-width: 1pt; border-left-style: solid; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: windowtext; border-top-width: 1pt; border-top-style: solid; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;&lt;strong&gt;Possible Cause&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: windowtext; border-top-width: 1pt; border-top-style: solid; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;&lt;strong&gt;Possible Solution&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: windowtext; border-left-width: 1pt; border-left-style: solid; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;Remote-to-local copy and paste broken.&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;RDPCLIP is not in the clipboard viewer chain.&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;Kill and restart RDPCLIP.&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: windowtext; border-left-width: 1pt; border-left-style: solid; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;Local-to-remote copy and paste broken.&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;TS client is not in the clipboard viewer chain.&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;Close the TS client and reconnect to the session.&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: windowtext; border-left-width: 1pt; border-left-style: solid; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;RDPCLIP or the TS client is using excessive CPU.&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;There is a loop in the local or remote clipboard viewer chain.&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="197" style="border-right-color: windowtext; border-right-width: 1pt; border-right-style: solid; padding-right: 5.4pt; border-top-color: #f0f0f0; border-top-width: initial; border-top-style: initial; padding-left: 5.4pt; padding-bottom: 0in; border-left-color: #f0f0f0; border-left-width: initial; border-left-style: initial; width: 2.05in; padding-top: 0in; border-bottom-color: windowtext; border-bottom-width: 1pt; border-bottom-style: solid; background-color: transparent; "&gt;             &lt;p&gt;Kill and restart RDPCLIP. If this does not fix the problem, close the TS client and reconnect to the session.&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Remember, that on Windows Vista and above, the clipboard viewer chain system component is radically improved. Another reason to upgrade to the best Windows version ever!&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;From:&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/rds/archive/2006/11/16/why-does-my-shared-clipboard-not-work-part-1.aspx"&gt;http://blogs.msdn.com/b/rds/archive/2006/11/16/why-does-my-shared-clipboard-not-work-part-1.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/lei1016cn/aggbug/2445471.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lei1016cn/archive/2012/04/13/2445471.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
