<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3851705281492464064</id><updated>2024-10-04T22:04:23.149-04:00</updated><category term="Driver"/><category term="WindowsProgramming"/><category term="WindowsKernel"/><category term="C++"/><category term="Debugging"/><category term="Servers"/><category term="VC"/><category term="VisualC++"/><category term="COM"/><category term="Networking"/><category term="Security"/><title type='text'>Gavin&#39;s Computer Technology Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>207</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-2294374800872649988</id><published>2013-04-12T14:08:00.001-04:00</published><updated>2013-04-12T14:08:59.414-04:00</updated><title type='text'>The SDDL string contains an invalid sid or a sid that cannot be translated SharePoint 2013</title><summary type="text">Here is the one more issue with the installation of SharePoint 2013. The 
SDDL string contains an invalid sid or a sid that cannot be translated 
When you run with sharepoint 2013 installation majorly you will get with 
2 issues. 1. Service running under Network Service account in workgroup 
environment is not supported Solution for this is explained in the 
preious post you can find it here 
2. </summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/2294374800872649988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2013/04/the-sddl-string-contains-invalid-sid-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2294374800872649988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2294374800872649988'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2013/04/the-sddl-string-contains-invalid-sid-or.html' title='The SDDL string contains an invalid sid or a sid that cannot be translated SharePoint 2013'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-6945906433761368723</id><published>2013-03-27T11:01:00.001-04:00</published><updated>2013-03-27T11:01:57.514-04:00</updated><title type='text'>The disk is offline because of policy set by an administrator</title><summary type="text">Under Disk Management you get an error message saying:



&quot;The disk is offline because of policy set by an administrator&quot;



This is a usual behaviour with all virtual machine disk files (VMDK) presented to VMs as SAN disks.Default SAN policy is VDS_SP_OFFLINE_SHARED for all SAN disks except the boot disk. Having the policy set to Offline Shared means that your SAN disks will be simply offline at</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/6945906433761368723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2013/03/the-disk-is-offline-because-of-policy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6945906433761368723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6945906433761368723'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2013/03/the-disk-is-offline-because-of-policy.html' title='The disk is offline because of policy set by an administrator'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-5801146914568264349</id><published>2013-03-26T11:24:00.002-04:00</published><updated>2013-03-26T11:24:58.335-04:00</updated><title type='text'>c++与c#区别</title><summary type="text">C#是三大主流OOP(面向对象编程)语言(C++, Java, 
C#)之一，也是最新的一种，其中必然借鉴了前两者的长处，“否则它的缔造者就该打屁股”——候捷语，见《C# Primer 中文版》的译续:-) 
它们三者有太多的共性，其语法和编程概念，绝大部分彼此兼容，精一而通三。尤其对熟练掌握C++的程序员而言，学习Java和C#没有任何难度，唯一需要花些时间的地方就是熟悉这二者的类库。 


　　三者中，C++是我最熟悉也最喜欢的，在学习C#时难免会将其与C++做对比，现将C#与C++的区别做一番小结。这是我花了大概三个小时看完《C# 
Primer 中文版》的前两章的心得，难免回有不少错误和偏差，暂且记下，以后纠正。 


　　1、 
C#与Java类似，编译后得到的还不是机器代码，而是运行在虚拟机中的元指令。它对安全性做了更多的考虑，没有指针，不能直接操作内存，自动实现内存管 
理</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/5801146914568264349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2013/03/cc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5801146914568264349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5801146914568264349'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2013/03/cc.html' title='c++与c#区别'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-1029349758483461359</id><published>2013-03-26T11:14:00.001-04:00</published><updated>2013-03-26T11:14:23.676-04:00</updated><title type='text'>Lambda 表达式（C# 编程指南）</title><summary type="text">&quot;Lambda 表达式&quot;是一个匿名函数，它可以包含表达式和语句，并且可用于创建委托或表达式树类型。 



所有 Lambda 表达式都使用 Lambda 运算符 =&amp;gt;，该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数（如果有），右边包含表达式或语句块。Lambda 表达式 x =&amp;gt; x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型，如下所示：







delegate int del(int i);static void Main(string[] args)
{
    del myDelegate = x =&amp;gt; x * x;
    int j = myDelegate(5); //j = 25
}








实例：






&amp;nbsp;

using </summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/1029349758483461359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2013/03/lambda-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1029349758483461359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1029349758483461359'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2013/03/lambda-c.html' title='Lambda 表达式（C# 编程指南）'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-1241220390550596058</id><published>2013-03-25T10:29:00.001-04:00</published><updated>2013-03-25T10:29:13.854-04:00</updated><title type='text'>VS2010 远程调试流程解析</title><summary type="text">VS2010 远程调试流程解析。包括拷贝目录到被调试机、关闭防火墙或打开相应的端口、匿名调试与密码验证调试。



前期准备

1、拷贝 C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Remote 
Debugger\x86 目录到被调试机；


2、关闭防火墙或打开相应的端口，一般是4015 。



调试方式

1、匿名调试


被调试机的 msvsmon 下选择 option ，点击 No Authenritaion(native only) 
，在主界面可以看到类似:YYY1:4015 ，主机打开 VS ，选择 Attach to process ，Transport 选择 Remote 
(native only No Authenritaion) ，Qulifier 选择 YYY1:4015 ，之后刷新就</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/1241220390550596058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2013/03/vs2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1241220390550596058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1241220390550596058'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2013/03/vs2010.html' title='VS2010 远程调试流程解析'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-4509364882897113274</id><published>2012-12-18T15:40:00.000-05:00</published><updated>2012-12-18T15:46:28.322-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="VisualC++"/><title type='text'>c++异常处理机制示例，讲解及勘误</title><summary type="text">&amp;nbsp;在这里http://ticktick.blog.51cto.com/823160/191881/看到了一篇关于异常处理的文章，姑且不论它的观点是否正确，但个人觉得文章的组织还是不错的。转载如下。转载完了以后，我就加入了一些自己的观点，纠正了我能找到的错误，希望能对C++爱好者有所帮助。

=================转载开始=================
下面的代码直接贴到你的console工程中，可以运行调试看看效果，并分析c++的异常机制。


#include &quot;stdafx.h&quot;  
#include&amp;lt;stdlib.h&amp;gt;  
#include&amp;lt;crtdbg.h&amp;gt;  
#include &amp;lt;iostream&amp;gt;  
// 内存泄露检测机制  
#define _CRTDBG_MAP_ALLOC   
#ifdef _DEBUG</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/4509364882897113274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/12/c_18.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/4509364882897113274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/4509364882897113274'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/12/c_18.html' title='c++异常处理机制示例，讲解及勘误'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-2319360726224306972</id><published>2012-12-18T11:24:00.001-05:00</published><updated>2012-12-18T15:41:44.943-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><title type='text'>C++异常处理须知 </title><summary type="text">第一部分：
1.异常发生时，异常对象会沿函数调用栈的反方向抛出，这个过程常称为栈展开。
2.在栈展开过程中，如果异常对象始终都没遇到可行的catch处理块，系统将调用terminate函数强制终止程序。当然如果连try块都没有，系统将直接调用terminate函数。
3.在栈展开过程中，编译器保证适当的撤销局部对象。每个函数在栈展开退出时，它的局部存储会释放，如果局部对象是类类型，则自动调用对象的析构函数。
4.析构函数应该从不抛出异常，因为析构函数都是自动调用的，不会自动加上try测试块，因此析构函数中异常的抛出将直接导致系统调用terminate强制退出。在实践中，由于析构函数释放资源，不太可能出现异常，此外标准库类型都保证它们的析构函数不会引发异常。
5.如果在构造函数中发生异常，则该对象可能只是部分被构造，即使对象只是部分被构造，也要保证将会适当的撤销已构造的成员。
6.不能不</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/2319360726224306972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/12/c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2319360726224306972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2319360726224306972'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/12/c.html' title='C++异常处理须知 '/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-8467013870821312399</id><published>2012-11-28T10:02:00.001-05:00</published><updated>2012-11-28T10:02:01.039-05:00</updated><title type='text'>Side by Side Configuration Incorrect</title><summary type="text">
Getting Started
Most of the developers using assemblies in their application may have faced this issue. While starting an application, we may get an error “This application has failed to start because its side by side configuration is incorrect”. 

Introduction
Side by side configuration is a trick for versioning files, in which multiple versions of a file are installed in a single machine. This</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/8467013870821312399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/11/side-by-side-configuration-incorrect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8467013870821312399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8467013870821312399'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/11/side-by-side-configuration-incorrect.html' title='Side by Side Configuration Incorrect'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-2217802822915362736</id><published>2012-11-07T11:00:00.002-05:00</published><updated>2012-11-07T11:00:47.012-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Servers"/><title type='text'>Configuring and using display picture in Exchange Server 2010</title><summary type="text">&lt;!-- End -  Site: MSExchange.org Zone: MSE - Rectangle - Articles --&gt;


The process involved in uploading display pictures to the AD users and how to use this new functionality using Outlook 2010.





&amp;nbsp;







&amp;nbsp;

&lt;!-- &gt;&gt;&gt; --&gt;
Introduction
This article is all about Thumbnailphoto attribute, we are going to upload users’ image files to that attribute and then the new applications like </summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/2217802822915362736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/11/configuring-and-using-display-picture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2217802822915362736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2217802822915362736'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/11/configuring-and-using-display-picture.html' title='Configuring and using display picture in Exchange Server 2010'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-6434514537956100987</id><published>2012-11-07T10:58:00.002-05:00</published><updated>2012-11-07T10:58:32.298-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Networking"/><title type='text'>子网掩码概述</title><summary type="text">　　1.子网掩码的概念
　　子网掩码是一个32位地址，用于屏蔽IP地址的一部分以区别网络标识和主机标识，并说明该IP地址是在局域网上，还是在远程网上。 
　　2.确定子网掩码数
　　用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前，必须弄清楚本来使用的子网数和主机数目。 
　　定义子网掩码的步骤为： 
　　A、确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b”，该网络地址为c类IP地址，网络标识为“210.73”，主机标识为“a.b”。 
　　B、根据我们现在所需的子网数以及将来可能扩充到的子网数，用宿主机的一些位来定义子网掩码。比如我们现在需要12个子网，将来可能需要16个。用第三个字节的前四位确定子网掩码。前四位都置为“1”，即第三个字节为“11110000”，这个数我们暂且称作新的二进制子网掩码。 
　　C、把对应初始网络的各个</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/6434514537956100987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/11/blog-post_7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6434514537956100987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6434514537956100987'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/11/blog-post_7.html' title='子网掩码概述'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-2323091834516161106</id><published>2012-11-07T10:55:00.000-05:00</published><updated>2012-11-07T10:55:24.960-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Servers"/><title type='text'>Linux下双机HA的功能实现</title><summary type="text">
——基于heartbeat方式



HeartBeat
运行于备用主机上的Heartbeat可以通过以太网连接检测主服务器的运行状态，一旦其无法检测到主服务器的“心跳”则自动接管主服务器的资源。通常情况下，主、备服务器间的心跳连接是一个独立的物理连接，这个连接可以是串行线缆、一个由“交叉线”实现的以太网连接。Heartbeat甚至可同时通过多个物理连接检测主服务器的工作状态，而其只要能通过其中一个连接收到主服务器处于活动状态的信息，就会认为主服务器处于正常状态。从实践经验的角度来说，建议为Heartbeat配置多条独立的物理连接，以避免Heartbeat通信线路本身存在单点故障。 

1、串行电缆：被认为是比以太网连接安全性稍好些的连接方式，因为hacker无法通过串行连接运行诸如telnet、ssh或rsh类的程序，从而可以降低其通过已劫持的服务器再次侵入备份服务器的几率。但串行线</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/2323091834516161106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/11/linuxha.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2323091834516161106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/2323091834516161106'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/11/linuxha.html' title='Linux下双机HA的功能实现'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-6242754964341779111</id><published>2012-11-07T10:53:00.001-05:00</published><updated>2012-11-07T10:53:27.181-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Servers"/><title type='text'>Heartbeat</title><summary type="text">
运行于备用主机上的Heartbeat可以通过以太网连接检测主服务器的运行状态，一旦其无法检测到主服务器的“心跳”则自动接管主服务器的资源。通常情况下，主、备服务器间的心跳连接是一个独立的物理连接，这个连接可以是串行线缆、一个由“交叉线”实现的以太网连接。Heartbeat甚至可同时通过多个物理连接检测主服务器的工作状态，而其只要能通过其中一个连接收到主服务器处于活动状态的信息，就会认为主服务器处于正常状态。从实践经验的角度来说，建议为Heartbeat配置多条独立的物理连接，以避免Heartbeat通信线路本身存在单点故障。

1、串行电缆：被认为是比以太网连接安全性稍好些的连接方式，因为hacker无法通过串行连接运行诸如telnet、ssh或rsh类的程序，从而可以降低其通过已劫持的服务器再次侵入备份服务器的几率。但串行线缆受限于可用长度，因此主、备服务器的距离必须非常短。

2、</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/6242754964341779111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/11/heartbeat.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6242754964341779111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6242754964341779111'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/11/heartbeat.html' title='Heartbeat'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-5209511037335513638</id><published>2012-11-07T10:49:00.001-05:00</published><updated>2012-11-07T10:49:37.121-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Servers"/><title type='text'>Installing Failover Clustering With Windows Server 2008 R2</title><summary type="text">
IntroductionCreating a Cluster with Windows Server 
2003 was a little bit confusing for administrators. Now with Windows Server 
2008, its much easier. In this article I will be showing you how to setup a 
cluster with two nodes using Windows Server 2008 R2 Failover Clustering feature.

Creating a failover clustering means you have at least two 
servers connected to a shared storage. 


Failover</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/5209511037335513638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/11/installing-failover-clustering-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5209511037335513638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5209511037335513638'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/11/installing-failover-clustering-with.html' title='Installing Failover Clustering With Windows Server 2008 R2'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-4938417537419550319</id><published>2012-11-07T10:30:00.001-05:00</published><updated>2012-11-07T10:32:24.378-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Servers"/><title type='text'></title><summary type="text">Installing Exchange 2010 Step-by-Step
With our handy guide, you&#39;ll have Exchange 2010 installed and running on top of Windows Server 2008 R2 in no time.

This is the second part of a two part series on Microsoft Exchange 2010.  In the first article we examined the changes and enhancements in Exchange 2010.  This time we&#39;ll walk through the steps required to install a fully functional Exchange </summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/4938417537419550319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/11/installing-exchange-2010-step-by-step.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/4938417537419550319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/4938417537419550319'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/11/installing-exchange-2010-step-by-step.html' title=''/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-1663130959580423507</id><published>2012-05-02T11:58:00.004-04:00</published><updated>2012-05-02T11:58:47.281-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Driver"/><title type='text'>从IRP说起</title><summary type="text">
IRP(I/O request package)是操作系统内核的一个数据结构。应用程序与驱动程序进行通信需要通过IRP包。当上层应用程序需要与驱动通信的时候，通过调用一定的API函数，IO管理器针对不同的API产生不同的IRP，IRP被传递到驱动内部不同的分发函数进行处理。对于不会处理的IRP包需要提供一个默认的分发函数来处理。

现在我们来看一下IRP的结构：

typedef struct _IRP {

   …

  PMDL  
MdlAddress;

  ULONG  Flags;

  union {

struct _IRP  *MasterIrp;

…

    PVOID  SystemBuffer;

  } AssociatedIrp;

  LIST_ENTRY  ThreadListEntry;  //用来将 IRP挂入某个线程的 IrpList队列</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/1663130959580423507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/05/irp_02.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1663130959580423507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1663130959580423507'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/05/irp_02.html' title='从IRP说起'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-1883324264393450284</id><published>2012-05-02T11:25:00.002-04:00</published><updated>2012-05-02T11:25:31.897-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Driver"/><title type='text'>IRP三种操作</title><summary type="text">

IRP的操作

通常状态下派遣函数调用IoCompleteRequest 
结束当前IRP请求

但在一些情况下可能要挂起irp 用内核函数IoMarkIrpPending 挂起IRP并返回 STATUS_PENDING 
，对于ring3级的请求会返回False 这时用GetLastError会发现错误码是ERROR_IO_PENDING 
表明当前操作被挂起。为了最终要结束所有的IRP请求，我们需要保存被挂起的IRP，并在最后进行处理（IRP_MJ_CLEANUP）

还有一种情况是取消IRP的请求IoSetCancelRoutine（PIRP 
pIrp， PDRIVER_CANCEL 
CancelRoutine）；参数1 需要取消的IRP；参数2 ：回调函数地址，需要同步执行的。

流程：在某个派遣函数A中挂起IRP 并且设置返回为STATUS_PENDING，同时需要设置</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/1883324264393450284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/05/irp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1883324264393450284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1883324264393450284'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/05/irp.html' title='IRP三种操作'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-5988148751583779482</id><published>2012-04-30T11:28:00.001-04:00</published><updated>2012-04-30T11:28:18.433-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Driver"/><title type='text'>LIST_ENTRY和DPC定时器</title><summary type="text">
链表的使用
链表是驱动开发中经常遇到的一个数据结构，主要是双向循环链表；要使用链表，需要用到一个LIST_ENTRY的结构，其定义如下：

typedef struct _LIST_ENTRY {
&amp;nbsp; &amp;nbsp; struct _LIST_ENTRY &amp;nbsp;*Flink; &amp;nbsp; &amp;nbsp;// 指向下一个节点
&amp;nbsp; &amp;nbsp; struct _LIST_ENTRY &amp;nbsp;*Blink; &amp;nbsp; &amp;nbsp;// 指向前一个节点
} LIST_ENTRY, *PLIST_ENTRY;

在实际的编程中，我们需要自己定义链表的节点，并把节点的第一个成员设置为LIST_ENTRY类型的变量（不一定放在第一位，但通常是这样）；此外，我们还需要一个LIST_ENTRY类型的链表头；其他的就靠下面的函数或者宏来操作了：

</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/5988148751583779482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/listentrydpc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5988148751583779482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5988148751583779482'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/listentrydpc.html' title='LIST_ENTRY和DPC定时器'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-4874816381831909054</id><published>2012-04-30T11:25:00.001-04:00</published><updated>2012-04-30T11:25:14.333-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Driver"/><title type='text'>IO_REMOVE_LOCK使用方法小结</title><summary type="text">
IO_REMOVE_LOCK（删除锁）的具体结构没有公开，WDK的文档中中查不到IO_REMOVE_LOCK。最开始看到IO_REMOVE_LOCK是在WDK的例子event中。下面是参考网上的一些资料之后的一点总结，错误的地方请指正。

为什么要用IO_REMOVE_LOCK？
WDM 驱动程序在处理设备删除 IRP 并释放驱动程序分配的内存后可能接收到附加的 IRP。在处理附加的 IRP 时试图引用已经释放的内存会导致系统崩溃。驱动程序能够接收已删除设备的 IRP，这有两个原因：

在设备被删除后，另一个组件可以发送 I/O。要发送一个 IRP，组件获取目标设备或文件的指针并去除该设备对象上的引用（或者 I/O 管理器代表组件去除引用）。引用可以确保目标设备或文件对象的持续性，从而目标驱动程序可以访问设备对象和设备扩展。但是，除非组件已经在目标设备上注册了即插即用通知，否则它不能</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/4874816381831909054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/ioremovelock.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/4874816381831909054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/4874816381831909054'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/ioremovelock.html' title='IO_REMOVE_LOCK使用方法小结'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-8358177719744784228</id><published>2012-04-30T11:22:00.003-04:00</published><updated>2012-04-30T11:22:28.149-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Driver"/><title type='text'>IRQL科普</title><summary type="text">
IRQL是Interrupt ReQuest Level，中断请求级别。处理器在一个IRQL上执行线程代码。IRQL是帮助决定线程如何被中断的。在同一处理器上，线程只能被更高级别IRQL的线程能中断。每个处理器都有自己的中断IRQL。常见的IRQL级别有四个：Passive、APC、 Dispatch、DIRQL。

PASSIVE_LEVEL
IRQL最低级别，没有被屏蔽的中断，线程执行用户模式，可以访问分页内存。

APC_LEVEL
只有APC级别的中断被屏蔽，可以访问分页内存。当有APC发生时，处理器提升到APC级别，这样，就屏蔽掉其它APC，为了和APC执行 一些同步，驱动程序可以手动提升到这个级别。比如，如果提升到这个级别，APC就不能调用。在这个级别，APC被禁止了，导致禁止一些I/O完成APC， 所以有一些API不能调用。

DISPATCH_LEVEL
DPC(延迟</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/8358177719744784228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/irql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8358177719744784228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8358177719744784228'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/irql.html' title='IRQL科普'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-3893414987680109504</id><published>2012-04-30T11:21:00.000-04:00</published><updated>2012-04-30T11:21:06.837-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Driver"/><category scheme="http://www.blogger.com/atom/ns#" term="WindowsKernel"/><title type='text'>驱动读写方式（缓冲区读写与直接读写）</title><summary type="text">
应用程序和驱动程序交互数据需要指定数据的交互方式，通过设置DEVICE_OBJECT的Flags成员来标志。有DO_BUFFERED_IO、DO_DIRECT_IO或者0。

DO_BUFFERED_IO：一般用于比较简单且不追求效率情况下的解决方案，把应用层（Ring3层）中内存空间中的缓冲数据拷贝到内核空间。IRP的AssociatedIrp.SystemBuffer成员指向内核中的缓冲区。

DO_DIRECT_IO：把应用层的地址空间映射到内核空间，这需要在页表中增加一个映射。当然这不需要程序员手工去修改页表，通过构造MDL就能实现这个功能。MDL可以翻译为“内存描述符链”，按业界传统习惯一律称之为MDL。IRP中的MDLAddress域是一个MDL的指针，从这个MDL中可以读出一个内核空间的虚拟地址。
可以通过调用MmGetSystemAddressForMdlSafe来获得</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/3893414987680109504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/blog-post_30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/3893414987680109504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/3893414987680109504'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/blog-post_30.html' title='驱动读写方式（缓冲区读写与直接读写）'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-6654026856093563296</id><published>2012-04-30T11:12:00.003-04:00</published><updated>2012-04-30T11:17:33.295-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Driver"/><category scheme="http://www.blogger.com/atom/ns#" term="WindowsKernel"/><title type='text'>IO_STACK_LOCATION与IRP的一点笔记</title><summary type="text">
IO_STACK_LOCATION和IRP算是驱动中两个很基础的东西，为了理解这两个东西，找了一点资料。

1. IRP可以看成是Win32窗口程序中的消息（Message），DEVICE_OBJECT可以看成是Win32窗口程序中的窗口（Window）

2. 任何内核模式程序在创建一个IRP时，同时还创建了一个与之关联的IO_STACK_LOCATION结构数组：数组中的每个堆栈单元都对应一个将处理该IRP的驱动程序。
IRP的头部有一个当前IO_STACK_LOCATION的数组索引，同时也有一个指向该IO_STACK_LOCATION的指针。索引是从1开始，没有0。当驱动程序准备向次低层驱动程序传递IRP时可以调用IoCallDriver例程，它其中的一个工作是递减当前IO_STACK_LOCATION的索引，使之与下一层的驱动程序匹配。但该索引不会设置成0，如果设置成0，系统</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/6654026856093563296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/iostacklocationirp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6654026856093563296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/6654026856093563296'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/iostacklocationirp.html' title='IO_STACK_LOCATION与IRP的一点笔记'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-8654158651411938052</id><published>2012-04-13T11:57:00.002-04:00</published><updated>2012-04-13T11:57:31.185-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><title type='text'>直接调用类成员函数地址</title><summary type="text">下载源代码
摘要：介绍了如何取成员函数的地址以及调用该地址.
关键字：C++成员函数 this指针 调用约定
一、成员函数指针的用法
　　在C++中，成员函数的指针是个比较特殊的东西。对普通的函数指针来说，可以视为一个地址,在需要的时候可以任意转换并直接调用。但对成员函数来说，常规类型转换是通不过编译的，调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: &quot;::*&quot;用于指针的声明，而&quot;-&amp;gt;*&quot;和&quot;.*&quot;用来调用指针指向的函数。比如:
class tt
   {
       public: void foo(int x){ printf(&quot;\n %d \n&quot;,x); }
   };

   typedef   void  ( tt::* FUNCTYPE)(int );


    FUNCTYPE ptr = tt::foo;  //给一个成员函数指针赋值.
</summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/8654158651411938052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8654158651411938052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8654158651411938052'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/blog-post.html' title='直接调用类成员函数地址'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-5805539643623546013</id><published>2012-04-13T11:42:00.002-04:00</published><updated>2012-12-18T15:46:13.752-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="VisualC++"/><title type='text'>__stdcall、__cdecl、__thiscall、__fastcall的区别</title><summary type="text">=== cdecl ===
This calling convention is the default for C programs and also global functions in C++ programs. Generally the function arguments are passed on the stack in reverse order so that the callee can access them in the correct order. The caller is responsible for popping the arguments after the function returns, which makes it possible to use the ... to send runtime defined arguments. </summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/5805539643623546013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/stdcallcdeclthiscallfastcall.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5805539643623546013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/5805539643623546013'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/stdcallcdeclthiscallfastcall.html' title='__stdcall、__cdecl、__thiscall、__fastcall的区别'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-8977727455275528395</id><published>2012-04-13T11:37:00.004-04:00</published><updated>2012-04-13T11:41:49.348-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><title type='text'>__stdcall,__cdecl,__fastcall,__thiscall</title><summary type="text"></summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/8977727455275528395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/04/stdcallcdeclfastcallthiscall.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8977727455275528395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/8977727455275528395'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/04/stdcallcdeclfastcallthiscall.html' title='__stdcall,__cdecl,__fastcall,__thiscall'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3851705281492464064.post-1241088638869406142</id><published>2012-02-17T16:07:00.000-05:00</published><updated>2012-02-17T16:07:00.147-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="WindowsProgramming"/><title type='text'>Recognized Environment Variables</title><summary type="text">Constant special item ID list (CSIDL) values provide a way to identify folders that applications use frequently but may not have the same name or location on any given computer. For example, the system folder may be C:\Windows on one computer and C:\Winnt on another. You can use the asterisk (*) wildcard character in MigUser.xml, MigApp.xml and MigDoc.xml files. However, you cannot use the </summary><link rel='replies' type='application/atom+xml' href='http://delversoft.blogspot.com/feeds/1241088638869406142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://delversoft.blogspot.com/2012/02/recognized-environment-variables.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1241088638869406142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3851705281492464064/posts/default/1241088638869406142'/><link rel='alternate' type='text/html' href='http://delversoft.blogspot.com/2012/02/recognized-environment-variables.html' title='Recognized Environment Variables'/><author><name>Gavin - 不为时尚所惑，不为积习所蔽，不为浮名所累</name><uri>http://www.blogger.com/profile/01212358913152834856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>