【分享】C++开发Isapi Filter 简单示例[非MFC]

Anlige 2012-01-13 09:56:51
【新手分享,不喜勿喷】
因为公司最近要开放免费主机,但是有个条件-在空间里面要强制加广告(但是可通过某些方式来取消),最初想的是去买一套别人的收费程序,直接放到服务器上使用,但是感觉成本太高(一套程序要1800,只能用在一台服务器上),因此有了自己开发的念头。
之前没有接触过C++,但是对它确实很是向往,于是就开始了边学边开发的过程,到目前为止,已经解决了所有问题,成功在客户网站上加入了自己指定的代码,达到了自己想要的效果,但是在这里就不发强制广告的源码了,现在发一个最基本的Isapi Filter的结构,用这个框架完全可以开发像IIS防盗链、URL重写等组件了。
MFC中已经实现了这些功能,最初的版本使用MFC做的,但是感觉太臃肿,最后抛弃MFC重新做了无MFC版本。
实现的功能:
1、获取Isapi Filter所在的目录。(没解决这个问题之前,用Isapi读取自己定义的配置文件很是麻烦-配置文件要放到固定目录)
2、已经实现的几个接口
DWORD OnUrlMap (PHTTP_FILTER_CONTEXT pfc, PHTTP_FILTER_URL_MAP pMapInfo) ;
DWORD OnEndOfRequest(PHTTP_FILTER_CONTEXT pfc);
DWORD OnPreprocHeaders(PHTTP_FILTER_CONTEXT pfc, PHTTP_FILTER_PREPROC_HEADERS pHeaderInfo);
你可以根据自己需要来添加Isapi Filter感兴趣的通知,IIS支持如下通知:
#define SF_NOTIFY_SECURE_PORT 0x00000001
#define SF_NOTIFY_NONSECURE_PORT 0x00000002
#define SF_NOTIFY_READ_RAW_DATA 0x00008000
#define SF_NOTIFY_PREPROC_HEADERS 0x00004000
#define SF_NOTIFY_AUTHENTICATION 0x00002000
#define SF_NOTIFY_URL_MAP 0x00001000
#define SF_NOTIFY_ACCESS_DENIED 0x00000800
#define SF_NOTIFY_SEND_RESPONSE 0x00000040
#define SF_NOTIFY_SEND_RAW_DATA 0x00000400
#define SF_NOTIFY_LOG 0x00000200
#define SF_NOTIFY_END_OF_REQUEST 0x00000080
#define SF_NOTIFY_END_OF_NET_SESSION 0x00000100

这些通知可以在GetFilterVersion中添加,在HttpFilterProc添加相应的回调函数
3、提供一个最简单的向客户端输出文本的例子,hello程序:
char error_info[256]="HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\nHello,This is my first iis isapi filter!";
DWORD slen = strlen(error_info);
pfc->WriteClient(pfc,error_info,&slen,0);

就这些,剩下的就看各位如何发挥了,下载地址如下
IIS_Filter_Example

本代码在32位Windows 2003、VC++6.0下编译通过,IIS6.0中的运行效果如下


恭祝大家春节快乐,给大家拜个早年咯!
...全文
499 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anlige 2012-01-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dahuaixiaohuai 的回复:]
你写的DLL怎么布暑
[/Quote]
直接iis中添加过滤器
一叶之舟 2012-01-13
  • 打赏
  • 举报
回复
你写的DLL怎么布暑
healer_kx 2012-01-13
  • 打赏
  • 举报
回复
感谢楼主分享。
qscool1987 2012-01-13
  • 打赏
  • 举报
回复
thanks for share!
Louistao 2012-01-13
  • 打赏
  • 举报
回复
下来看看
ouyh12345 2012-01-13
  • 打赏
  • 举报
回复
谢谢分享
本书的通用应用程序编程一节将向你展示如何使用MFC AppWizard 创建基本的应用程 序。我们不花许多时间来研究创建特定类型应用程序的细节,但将讲述创建MFC AppWizard 提供的各种类型的应用程序的方法。显然,在本节中我假定读者已经具备了一定的C++编 程经验。当然,我会介绍创建应用程序本身的详细做法,但读者应该知道一些C++的基本 概念,特别是语言元素方面的知识。 数据库编程示例将为已经知道一些数据库基本知识的读者提供丰富的信息。如果你还 不知道什么是表、还没有坚实地掌握关系数据库的理论,那么在阅读本书第二部分之前, 需要花点时间先熟悉一下上述内容。我们将研究使用C++操作数据库的基本技巧,你也将 理解ODBC(Open Database Connectivity,开放数据库互连),OLE-DB(Object Linking and embedding database,对象链接与嵌入数据库),ADO(ActiveX Data Object,ActiveX 数据 对象)以及DAO,(Data Access Object,数据访问对象)之间的差别。我们甚至还各花了 一章的篇幅来讲述ODBC 和ADO 数据库编程。 Internet 编程实际上从本书的第一部分就开始讲述了。这里研究了如何创建基于HTML 的应用程序。第二部分将讨论如何创建跨越Internet 的数据库连接,然而这里我们并没有 考察任何实际的实例代码。第三部分是介绍Internet 的中心章节,我们将以中级程序员的 水平来研究ActiveX 编程。如果你只是个初级程序员,那么会发现某些概念有点难以理解。 然而,某些章节,比如第8 章讲述的HTML 编程,将会为各层次的程序员提供帮助。另外, 第三部分将向读者展示如何使用ActiveX Document(ActiveX 文档),ISAPI Filter(ISAPI 过 滤器),以及ISAPI Extension(ISAPI 扩展)。 在第四部分,我们将讨论从安全性问题到把帮助文件组合在一起的方方面面的内容。 实际上,我们还要探讨Visual C++中使用帮助文件的两种不同技巧:标准的帮助文件和 Microsoft 正在其产品中使用的新型HTML 帮助文件。你还将学习发行应用程序的方法,即 使在企业环境中这也是一项不可或缺的任务。 通过本书,你将会深入理解C 编程语言,虽然它还不至于让你成为一名C 编程高手。 本书中你不会找到很多初级的编程知识,但具备一定C 编程技能的任何人都会理解本书的 内容。积极建议读者已经具备Microsoft Visual C++的一定知识,原因在于所有的示例都以 Visual C++作为基础。即使我们把示例控制在基本编程技巧的范围内,也依然需要编写OCX 或DLL 的知识。如果在你阅读本书之前已经掌握了一些底层编程知识,那么你就会很快地 学会掌握提供的各种信息。再说一句,本书包含了一些“课程复习”风格的示例,但它们 也没有提供很多的初级信息。 当然,上面介绍的仅仅是本书的概貌,在这本书中你会找到能够把Visual C++的功能 发挥得淋漓尽致的各种各样的有用技巧和提示。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧