HTTP_FILTER_CONTEXT结构

HTTP_FILTER_CONTEXT结构具有如下形式:
typedef struct _HTTP_FILTER_CONTEXT
{
  DWORD cbSize;                                  //IN
  DWORD Revision;                                //IN
  PVOID ServerContext;                           //IN
  DWORD ulReserved;                              //IN
  BOOL fIsSecurePort;                            //IN
  PVOID pFilterContext;                          //IN/OUT
  BOOL (WINAPI* GetServerVariable) (
     struct _HTTP_FILTER_CONTEXT * pfc,
     LPSTR lpszVariableName,
     LPVOID lpvBuffer,
     LPDWORD lpdwSize
    );
  BOOL (WINAPI* AddResponseHeaders) (
     struct _HTTP_FILTER_CONTEXT * pfc,
     LPSTR lpszHeaders,
     DWORD dwReserved
    );
  BOOL (WINAPI * WriteClient) (
     struct _HTTP_FILTER_CONTEXT * pfc,
     LPVOID Buffer,
     LPDWORD lpdwBytes,
     DWORD dwReserved
    );
  VOID * (WINAPI * AllocMem) (
     struct _HTTP_FILTER_CONTEXT * pfc,
     DWORD cbSize,
     DWORD dwReserved
    );
  BOOL (WINAPI * ServerSupportFunction) (
     struct _HTTP_FILTER_CONTEXT * pfc,
     enum SF_REQ_TYPE sfReq,
     PVOID pData,
     DWORD ul1,
     DWORD ul2
    );
} HTTP_FILTER_CONTEXT, *PHTTP_FILTER_CONTEXT;
上面的注释IN或IN/OUT指明成员是仅用于发送到过滤器的消息(IN)还是用于发送到过滤器和从过滤器发出的消息(OUT)。

成员:
cbSize以字节数计的结构大小。
Revision结构的修正级别,小于或等于HTTP_FILTER_REVISION的版本。
ServerContext为服务器的使用而保留。
ulReserved为服务器的使用而保留。
fIsSecurePort如果为TRUE表明这一事件通过一个安全端口发生。
pFilterContext过滤器使用的指针,指向环境信息,过滤器将之与请求相关联。在SF_NOTIFY_END_OF_NET_SESSION通知中可以安全地释放与请求相关的内存。
GetServerVariable函数的指针,此函数用于获取服务器和连接的信息。有关细节参见CHttpServerContext::GetServerVariable。GetServerVariable具有以下参数:
·pfc指向传递到CHttpFilter::HttpFilterProc的过滤器环境的指针。
·lpszVariableName要获取的服务器变量。
·lpvBuffer用于存储变量值的缓冲区。
·lpdwSize缓冲区lpvBuffer的大小。
AddResponseHeaders函数的指针,此函数在HTTP响应上加上头。有关细节参见CHttpServerContext::ServerSupportFunction中对于HSE_REQ_SEND_RESPONSE_HEADER的描述。AddResponseHeaders具有以下参数:
·pfc指向传送给CHttpFilter::HttpFilterProc过滤器环境的指针。
·lpszHeaders包含要加的头的字符串指针。
·dwReserved留作将来使用。必须为0。
WriteClient函数的指针,此函数将原始数据发回客户。有关细节参见CHttpFilterContext::WriteClient。WriteClient具有以下参数:
·pfc传送给CHttpFilter::HttpFilterProc的指针。
·Buffer包含发送给客户的数据的缓冲区。
·lpdwBytesBuffer指向的缓冲区大小。
·dwReserved留作将来使用。
AllocMem指向用来分配内存的函数的指针。当请求结束时,这个函数分配的内存将被自动释放。AllocMem具有以下参数:
·pfc传递给CHttpFilter::HttpFilterProc的指针。
·cbSize要分配的缓冲区的大小。
·dwReserved留作将来使用。
ServerSupportFunction指向用来扩展ISAPI过滤器API的指针。下面列出的参数与使用的ISA有关:
·pfc指向用来扩展ISAPI过滤器API的函数的指针。
·sfReq服务器函数通知。可能值如下:
SF_REQ_SEND_RESPONSE_HEADER发送一个完整的HTTP服务器响应头,包括状态,服务器版本,消息时间和MIME版本。服务器扩展会在信息的结尾添加其它信息,比如内容类型,内容长度等等,最后是额外的"\r\n"。
SF_REQ_ADD_HEADERS_ON_DENIAL如果服务器忽略HTTP请求,在服务器错误响应加上特定的头。这允许一个授权的过滤器不过滤任何请求而广播它的服务。通常这个头是遵照自定义鉴定模式的WWW鉴定头,但是对头指定的内容并不作任何限制。
SF_REQ_SET_NEXT_READ_SIZE仅被原始数据过滤器使用,返回SF_STATUS_ READ_NEXT。
pData字符串指针。与ISA有关。对sfReg的每个值,相应的pData值参见注释部分的表格。
ul1, ul2与ISA有关。对sfReg的每个值,相应的值参见注释部分的表格。

注释:下面是与ServerSupportFunction参数对应的可能值:
sfReqpDataul1, ul2
SF_REQ_SEND_RESPONSE_HEADER以零结尾的字符串,指向可选的状态字符串(比如“401AccessDenied”),对于缺省的响应“200OK”为NULL以零结尾的字符串,指向将被附加到头和设置头的可选数据。如为NULL,头将以空行结束
SF_REQ_ADD_HEADERS_ON_DENIAL以零结尾的字符串,指向一个或多个以"/r/n"结尾的头行 
SF_REQ_SET_NEXT_READ_SIZE 下一次要读的字节数

请参阅:
CHttpFilter::HttpFilterProc, CHttpFilter::OnLog, CHttpServerContext, CHttpServerContext::GetServerVariable, CHttpServerContext::ServerSupportFunction, CHttpServerContext::WriteClient