ISAPI开发概述

ISAPI可以完成很多功能,asp.net的实现底层也是通过isapi来解析asp.net的代码的。
通过开发isapi,然后在iis中配置后可以解析不同的文件。
比如java,perl的代码也可以通过加载isapi的方式在iis中进行访问

ISAPI两种开发方式:扩展(如:aspnet_isapi.dll)和过滤(如:aspnet_filter.dll)

 

过滤可以实现许多功能,比如将简体转成繁体,大小写转换等, 参见UpCase



引用: 

 Microsoft Visual Studio 2005, 中创建新项目时在 新建项目 对话框中没有找到 VisualC++  MFC ISAPI Extension DLL 模板。

 

因为 Microsoft 已删除 MFC ISAPI Extension DLL 模板为 Visual Studio 2005 发生此行为。

 

用于新 ISAPI 筛选或扩展开发我们建议您使用 MicrosoftInternet 信息服务 (IIS) 软件开发工具包 (SDK)  ISAPI 入口 - Point 函数代替 MFC ISAPI 类。 Microsoft Windows Server 2003 Service Pack 1 (SP 1) 平台 SDK 包括许多 ISAPI 示例。 请以获取 PlatformSDK, 访问以下 MicrosoftWeb 站点:

http://www.microsoft.com/downloads/details.aspx?FamilyID=eba0128f-a770-45f1-86f3-7ab010b398a3&DisplayLang=en (http://www.microsoft.com/downloads/details.aspx?FamilyID=eba0128f-a770-45f1-86f3-7ab010b398a3&DisplayLang=en)

注意 时间少必须安装 Microsoft Windows 核心 SDK  IIS SDK 

默认情况下 SDK ISAPI 示例位于以下文件夹:

程序 Files\Microsoft 平台 SDK\Samples\Web\iis

有关如何创建 ISAPI 筛选器和扩展请访问以下 Microsoft Developer Network (MSDN) 网站:


最主要的代码如下:

  1 None.gif DWORD WINAPI __stdcall HttpFilterProc(HTTP_FILTER_CONTEXT  * pfc, DWORD NotificationType, VOID  * pvData)
  2 ExpandedBlockStart.gif {
  3InBlock.gif    CHAR *pchIn, *pPhysPath;
  4InBlock.gif    DWORD    cbBuffer,    cbtemp;
  5InBlock.gif    PHTTP_FILTER_URL_MAP pURLMap;
  6InBlock.gif    PHTTP_FILTER_RAW_DATA    pRawData;
  7InBlock.gif
  8ExpandedSubBlockStart.gif    switch (NotificationType)    {
  9InBlock.gif
 10InBlock.gif        case SF_NOTIFY_URL_MAP :
 11InBlock.gif
 12ExpandedSubBlockStart.gif            /* Check the URL for a subdirectory in the form of /UC/ or /uc/ */
 13InBlock.gif
 14InBlock.gif            pURLMap    =    (PHTTP_FILTER_URL_MAP)pvData;
 15InBlock.gif
 16InBlock.gif            pPhysPath    =    pURLMap->pszPhysicalPath;
 17InBlock.gif
 18InBlock.gif            pfc->pFilterContext    =    0;
 19InBlock.gif
 20InBlock.gif            for ( ; *pPhysPath; pPhysPath++
 21ExpandedSubBlockStart.gif            {
 22ExpandedSubBlockStart.gif                /* Ensure that there are at least 4 characters (checking for "\UC\") left in the URL before checking */
 23InBlock.gif
 24InBlock.gif                if (strlen(pPhysPath) > 3
 25ExpandedSubBlockStart.gif                {
 26InBlock.gif                    if (*pPhysPath == '\\' && (*(pPhysPath + 1== 'u' || *(pPhysPath + 1== 'U'&& (*(pPhysPath + 2== 'c' || *(pPhysPath + 2== 'C'&& *(pPhysPath + 3==    '\\')
 27ExpandedSubBlockStart.gif                    {
 28ExpandedSubBlockStart.gif                        /* Now that we've found it, remove it by collapsing everything down */
 29InBlock.gif
 30InBlock.gif                        for ( ; *(pPhysPath + 3) ; pPhysPath++)
 31InBlock.gif                            *pPhysPath = *(pPhysPath + 3);
 32InBlock.gif
 33ExpandedSubBlockStart.gif                        /* NULL terminate the string */
 34InBlock.gif
 35InBlock.gif                        *pPhysPath = '\0'
 36InBlock.gif
 37ExpandedSubBlockStart.gif                        /* And set the flag to let the SF_NOTIFY_SEND_RAW_DATA handler know to uppercase the content */
 38InBlock.gif
 39InBlock.gif                        pfc->pFilterContext    =    (VOID    *)1;
 40InBlock.gif
 41ExpandedSubBlockStart.gif                        /* Break us out of the loop - note that this will only find the first instance of /UC/ in the URL */
 42InBlock.gif
 43InBlock.gif                        break;
 44ExpandedSubBlockEnd.gif                    }
 45ExpandedSubBlockEnd.gif                }
 46ExpandedSubBlockEnd.gif            }
 47InBlock.gif
 48InBlock.gif            break;
 49InBlock.gif
 50InBlock.gif        case SF_NOTIFY_SEND_RAW_DATA :
 51InBlock.gif
 52InBlock.gif            if (pfc->pFilterContext)
 53ExpandedSubBlockStart.gif            {
 54InBlock.gif                pRawData = (PHTTP_FILTER_RAW_DATA)pvData;
 55InBlock.gif
 56InBlock.gif                pchIn    =    (BYTE    *)pRawData->pvInData;
 57InBlock.gif
 58InBlock.gif                cbBuffer = 0;
 59InBlock.gif
 60InBlock.gif                if (pfc->pFilterContext    == (VOID *)1)
 61ExpandedSubBlockStart.gif                {
 62ExpandedSubBlockStart.gif                    /* 
 63InBlock.gif                    As this is the first block, scan through it until 2 CRLFs are seen, to pass
 64InBlock.gif                    all of the headers.
 65ExpandedSubBlockEnd.gif                    */
 66InBlock.gif
 67InBlock.gif                    for ( ; cbBuffer < pRawData->cbInData - 2; cbBuffer++)
 68ExpandedSubBlockStart.gif                    {
 69InBlock.gif                        if (pchIn[cbBuffer]    == '\n' && pchIn[cbBuffer + 2]    == '\n')
 70ExpandedSubBlockStart.gif                        {
 71InBlock.gif                            cbBuffer += 3;
 72InBlock.gif
 73InBlock.gif                            break;
 74ExpandedSubBlockEnd.gif                        }
 75InBlock.gif
 76InBlock.gif                        cbBuffer++;
 77ExpandedSubBlockEnd.gif                    }
 78InBlock.gif
 79InBlock.gif                    for (cbtemp = 0; cbtemp < (cbBuffer - 3); cbtemp++
 80ExpandedSubBlockStart.gif                    {
 81InBlock.gif                        if (pchIn[cbtemp] == '/' && pchIn[cbtemp + 1== 'h' && pchIn[cbtemp + 2== 't' && pchIn[cbtemp + 3== 'm')
 82ExpandedSubBlockStart.gif                        {
 83InBlock.gif                            pfc->pFilterContext    =    (VOID    *)2;
 84InBlock.gif
 85InBlock.gif                            break;
 86ExpandedSubBlockEnd.gif                        }
 87ExpandedSubBlockEnd.gif                    }
 88InBlock.gif
 89InBlock.gif                    if (cbtemp ==    cbBuffer)
 90ExpandedSubBlockStart.gif                        pfc->pFilterContext    =    0/* not an    html file */
 91ExpandedSubBlockEnd.gif                }
 92InBlock.gif
 93ExpandedSubBlockStart.gif                /* Now uppercase everything */
 94InBlock.gif
 95InBlock.gif                if (pfc->pFilterContext)
 96InBlock.gif                    for ( ; cbBuffer < pRawData->cbInData; cbBuffer++)
 97InBlock.gif                        pchIn[cbBuffer] = (pchIn[cbBuffer] >= 'a' && pchIn[cbBuffer] <= 'z'? (pchIn[cbBuffer] - 'a' + 'A') : pchIn[cbBuffer];
 98ExpandedSubBlockEnd.gif            }
 99InBlock.gif
100InBlock.gif            break;
101InBlock.gif
102InBlock.gif        default :
103InBlock.gif
104InBlock.gif            break;                
105ExpandedSubBlockEnd.gif    }
106InBlock.gif    
107InBlock.gif    return SF_STATUS_REQ_NEXT_NOTIFICATION;
108ExpandedBlockEnd.gif}


    本文转自永春博客园博客,原文链接: http://www.cnblogs.com/firstyi/archive/2007/03/14/674578.html ,如需转载请自行联系原作者

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 海康是一个全球领先的视频监控解决方案提供商,其ISAPI(Intelligent Security Application Programming Interface)开发手册是海康视频监控产品的软件开发接口的文档指南。 该手册提供了详细的开发指导和技术说明,帮助开发人员了解和使用ISAPI接口。ISAPI接口是一套用于访问和控制海康视频监控设备的编程接口,开发人员可以利用这些接口与海康的硬件产品进行交互。 ISAPI开发手册包含了开发环境搭建、接口调用、协议解析、数据传输等方面的内容。开发人员可以根据手册提供的接口文档和示例代码,快速上手并完成自己的开发工作。 通过使用ISAPI开发手册,开发人员可以实现对海康监控设备的实时监控、录像回放、云存储、报警管理等功能。手册还涵盖了网络配置、权限管理、设备连接等方面的内容,帮助开发人员处理设备连接和通信的复杂问题。 总之,海康ISAPI开发手册是一个强大的工具,为软件开发人员提供了丰富的资源和技术支持。通过深入学习和灵活应用手册中的内容,开发人员可以开发出与海康设备完美契合的自定义应用程序,满足不同客户的个性化需求。 ### 回答2: 海康ISAPI开发手册是海康威视公司为了帮助开发者使用其网络摄像机及视频监控设备的接口而编写的一本技术文档。该手册详细介绍了海康ISAPI接口的使用方法、接口参数以及接口的功能等内容,为开发者提供了使用该接口进行设备控制、视频监控和数据交互的参考文档。 首先,海康ISAPI开发手册提供了接口的技术说明和接口调用的基本原理,使得开发者能够快速了解如何使用该接口进行开发工作。 其次,该手册示范了各种接口的使用方法,包括设备参数配置、实时视频预览、录像回放、数据查询等功能。这些示例代码具有很高的可参考性,方便开发者进行二次开发和定制。 此外,海康ISAPI开发手册还提供了接口参数的详细说明和使用注意事项,帮助开发者正确理解和应用这些接口。开发者可以根据自己的需求,选择适合的接口进行开发,实现各种定制化的功能。 总结而言,海康ISAPI开发手册是一本对于开发者来说非常宝贵的参考手册。通过阅读和学习该手册,开发者能够更加全面地了解和掌握海康威视网络摄像机及视频监控设备的控制接口,为了满足自己的需求进行二次开发,提供了很好的指导和参考。 ### 回答3: 海康数字是一家致力于提供安防产品、解决方案和服务的领先企业。在海康数字的产品线中,ISAPI(智能设备应用程序接口)起着重要的作用。ISAPI,作为一种编程接口,允许开发者通过使用一系列的API函数来与海康数字的设备进行通信和交互。 海康ISAPI开发手册是一本官方提供给开发者的指南,旨在帮助他们了解如何使用ISAPI进行开发。这本手册提供了丰富的信息和示例代码,涵盖了各种主题,包括设备管理、用户管理、视频流、告警事件、远程回放等。 手册中详细介绍了ISAPI的概念、工作原理和相关技术细节。通过阅读此手册,开发者可以通过了解ISAPI的基本原理和功能,更好地理解设备的结构和工作方式。 此外,手册还介绍了如何建立与设备之间的连接,包括用户名、密码和设备IP地址的设置。它还提供了通过ISAPI接口进行设备配置和控制的方法,例如摄像头的镜头控制、共享存储设置等。 此手册还涵盖了如何获取实时视频流、图像采集和分析、告警事件的触发和处理等。这些内容为开发者提供了完整的功能,使他们能够使用ISAPI接口开发自己的安防应用程序。 总之,海康ISAPI开发手册是一个全面而且实用的指南,为开发者提供了与海康数字设备进行交互的详细说明和示例。通过学习和应用手册中的知识,开发者能够更好地利用ISAPI的能力来满足他们的安防需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值