【问题标题】:How can an ISAPI filter distinguish between being loaded by IIS or ISA?ISAPI 筛选器如何区分由 IIS 或 ISA 加载?
【发布时间】:2011-01-15 18:42:07
【问题描述】:

我有一个作为 ISAPI 过滤器实现的应用程序,它的行为需要根据它是由 ISA 还是 IIS 加载而改变。在 GetFilterVersion 期间,如果由 ISA 加载,则需要注册 SF_NOTIFY_SEND_RAW_DATA;如果由 IIS 加载,则需要注册 SF_NOTIFY_SEND_RESPONSE。

似乎没有关于传递给 GetFilterVersion 的服务器的任何信息。是否有一些技巧可以识别和区分 IIS 和 ISA?

[编辑]

在 GetFilterVersion 调用期间,应用程序需要在初始化时知道​​哪个服务器正在加载它。当前没有请求,因此尝试从标头变量中获取 SERVER_VARIABLE 将不起作用;此时没有标头变量。

详细说明,我的应用程序设置响应标头,例如 cookie 和缓存控制标头。在 ISA 服务器的上下文中运行时,它必须使用 SF_NOTIFY_SEND_RAW_DATA 事件来完成此操作,修改 ISA 代理发送的原始数据。然而,在 IIS 中,使用此通知会带来严重的性能损失,因此应用程序应使用 SF_NOTIFY_SEND_RESPONSE。 SF_NOTIFY_SEND_RESPONSE 不适用于 ISA,因为此事件不会针对代理响应触发,仅针对源自 ISA 本身的响应,例如错误页面。最后,事件注册在 GetFilterVersion() 期间发生一次,一旦过滤器加载就无法修改。

因此,应用程序需要在初始化期间知道何时决定注册 SF_NOTIFY_SEND_RESPONSE 或 SF_NOTIFY_SEND_RAW_DATA,它是由 IIS 还是 ISA 加载的。

【问题讨论】:

    标签: c windows iis isapi


    【解决方案1】:

    最新版本的 IIS 和 ISA 都应该使用工作进程运行。名称“w3proxy.exe”属于 ISA,“w3wp.exe”属于 IIS。获取当前进程名,测试一下,瞧。

    HANDLE winapi GetCurrentProcess()

    this:

    DWORD WINAPI GetModuleFileNameEx(
      __in      HANDLE hProcess,
      __in_opt  HMODULE hModule,
      __out     LPTSTR lpFilename,
      __in      DWORD nSize
    );
    

    应该做的伎俩

    【讨论】:

    • 谢谢!这就是我认为可能存在的那种东西,但没有记住足够多的 windows api 或对 IIS/ISA 了解得不够多。
    【解决方案2】:

    您也许可以通过getenv() 从环境中获取SERVER_SOFTWARE(或另一个指示ISA 与IIS 的变量)。

    【讨论】:

      【解决方案3】:

      我只编写了 isapi 应用程序,没有编写过滤器。但是从 isapi 应用程序中,您可以调用 GetServerVariable 并请求“SERVER_SOFTWARE”的值

      http://msdn.microsoft.com/en-us/library/ms525335.aspx

      如果您不能从过滤器中调用“GetServerVariable”,那么我不知道该怎么做。

      【讨论】:

      • 感谢您的回复。不幸的是,GetServerVariable 在过滤器需要信息的时候是不可调用的。 GetFilterVersion 由我的 ISAPI 过滤器实现,并在 IIS/ISA 加载过滤器时调用一次。这是过滤器告诉 IIS 它需要什么事件通知的机会。 HCONN 句柄不会传递给此函数,因为这发生在客户端连接之前。当客户端连接建立并可以调用 GetSErverVariable 时,过滤器更改其事件通知为时已晚。
      猜你喜欢
      • 2011-10-08
      • 2020-11-18
      • 2020-06-15
      • 2016-03-28
      • 2011-08-09
      • 2022-01-20
      • 2019-02-06
      • 2012-12-04
      • 1970-01-01
      相关资源
      最近更新 更多