<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<?xml-stylesheet type="text/xsl" href="rss.xslt"?>
<channel>
   <title>艾恩ASP学习BLOG文章列表</title>
   <link>http://dev.mo.cn/mydiary.asp</link>
   <description>艾恩ASP学习Blog,免费提供各种ASP学习资源，组件、源代码、学习手册、技术文章...</description>
   <generator>Anlige By dev.mo.cn</generator>
   <language>zh-CN</language>
   <copyright>copyright 2008 dev.mo.cn 鲁ICP备08010580</copyright>
   <pubDate>2012-5-19 8:23:47</pubDate>
   <item>
      <title>马上2012了,发今年最后一篇文章-使用C++开发IsapiFilter</title>
      <author>zhanghuiguoanlige@126.com</author>
      <link>http://dev.mo.cn/article_322.html</link>
      <pubDate>2011-12-31 20:54:38</pubDate>
      <guid>http://dev.mo.cn/article_322.html</guid>
      <description>
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;眼看要2012了，发现自己已经好几个月没有管自己的博客了，只能怪自己太懒。在2012来临之际，发篇关于用C++开发Isapi的文章，顺带将源码也发上来。<br />&nbsp;&nbsp;因为公司最近要开放免费主机，但是有个条件-在空间里面要强制加广告（但是可通过某些方式来取消），最初想的是去买一套别人的收费程序，直接放到服务器上使用，但是感觉成本太高（一套程序要1800，只能用在一台服务器上），因此有了自己开发的念头。<br />&nbsp;&nbsp;之前没有接触过C++，但是对它确实很是向往，于是就开始了边学边开发的过程，到目前为止，已经解决了所有问题，成功在客户网站上加入了自己指定的代码，达到了自己想要的效果，但是在这里就不发强制广告的源码了，现在发一个最基本的Isapi&nbsp;Filter的结构，用这个框架完全可以开发像IIS防盗链、URL重写等组件了。<br />&nbsp;&nbsp;MFC中已经实现了这些功能，最初的版本使用MFC做的，但是感觉太臃肿，最后抛弃MFC重新做了无MFC版本。<br />&nbsp;&nbsp;实现的功能：<br />&nbsp;&nbsp;1、获取Isapi&nbsp;Filter所在的目录。（没解决这个问题之前，用Isapi读取自己定义的配置文件很是麻烦-配置文件要放到固定目录）<br />&nbsp;&nbsp;2、已经实现的几个接口<br />DWORD&nbsp;OnUrlMap&nbsp;(PHTTP_FILTER_CONTEXT&nbsp;pfc,&nbsp;PHTTP_FILTER_URL_MAP&nbsp;pMapInfo)&nbsp;;&nbsp;&nbsp;<br />DWORD&nbsp;OnEndOfRequest(PHTTP_FILTER_CONTEXT&nbsp;pfc);&nbsp;&nbsp;&nbsp;&nbsp;<br />DWORD&nbsp;OnPreprocHeaders(PHTTP_FILTER_CONTEXT&nbsp;pfc,&nbsp;PHTTP_FILTER_PREPROC_HEADERS&nbsp;pHeaderInfo);<br />&nbsp;&nbsp;你可以根据自己需要来添加Isapi&nbsp;Filter感兴趣的通知，IIS支持如下通知：<br />#define&nbsp;SF_NOTIFY_SECURE_PORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000001<br />#define&nbsp;SF_NOTIFY_NONSECURE_PORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002<br />#define&nbsp;SF_NOTIFY_READ_RAW_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00008000<br />#define&nbsp;SF_NOTIFY_PREPROC_HEADERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00004000<br />#define&nbsp;SF_NOTIFY_AUTHENTICATION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00002000<br />#define&nbsp;SF_NOTIFY_URL_MAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00001000<br />#define&nbsp;SF_NOTIFY_ACCESS_DENIED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000800<br />#define&nbsp;SF_NOTIFY_SEND_RESPONSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000040<br />#define&nbsp;SF_NOTIFY_SEND_RAW_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000400<br />#define&nbsp;SF_NOTIFY_LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000200<br />#define&nbsp;SF_NOTIFY_END_OF_REQUEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000080<br />#define&nbsp;SF_NOTIFY_END_OF_NET_SESSION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000100<br /><br />这些通知可以在GetFilterVersion中添加，在HttpFilterProc添加相应的回调函数<br />&nbsp;&nbsp;3、提供一个最简单的向客户端输出文本的例子，hello程序：<br />&nbsp; &nbsp; &nbsp; &nbsp; char&nbsp;error_info[256]="HTTP/1.1&nbsp;200&nbsp;OK\r\nContent-Type:text/html\r\n\r\nHello,This&nbsp;is&nbsp;my&nbsp;first&nbsp;iis&nbsp;isapi&nbsp;filter!";<br />&nbsp; &nbsp; &nbsp; &nbsp; DWORD&nbsp;slen&nbsp;=&nbsp;strlen(error_info);<br />&nbsp; &nbsp; &nbsp; &nbsp; pfc-&gt;WriteClient(pfc,error_info,&slen,0);<br /><br />就这些，剩下的就看各位如何发挥了，网络上比较少见源码下载，这里就不掩藏了，下载地址如下<br /><a href="/upfiles/20111231204928222.rar" target="new">IIS_Filter_Example</a><br /><br />本代码在32位Windows&nbsp;2003、VC++6.0下编译通过，IIS6.0中的运行效果如下<br /><a onfocus="this.blur()" href="/upfiles/20111231205127231.JPG" target=new><img src="/upfiles/20111231205127231.JPG" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />恭祝大家元旦快乐，给大家拜个早年咯！]]>
      </description>
      <category>ISAPI相关</category>
   </item>
</channel>
</rss>
