CHttpServerContext::ServerSupportFunction

BOOL ServerSupportFunction( DWORD dwHSERRequest, LPVOID lpvBuffer, LPDWORD lpdwSize, LPDWORD lpdwDataType );

返回值:
如果成功,则返回非零值,否则为0。

参数:
dwHSERRequest一个HTTP服务器扩展值。请参阅说明部分以了解所支持值的列表。
lpvBuffer与HSE_REQ_SEND_RESPONSE_HEADER一起使用时,它表示一个空终止的状态字符串(例如,“401 Access Denied”)。如果缓冲区为空,此函数将发送缺省回答“200 OK”。当与HSE_REQ_DONE_WITH_SESSION一起使用时,它表示DWORD,指示请求的状态号。
lpdwSize当与HSE_REQ_SEND_RESPONSE_HEADER一起使用时,它表示缓冲区lpdwDataType的大小。
lpdwDataType当与HSE_REQ_SEND_RESPONSE_HEADER一起使用时,这是一个空终止字符串,表示可选标题或数据将被添加并与标题一起发送。如果为NULL,标题将以“\r\n”结束。
注意:
一般用途的函数有一个比HSE_REQ_END_RESERVED大的dwHSERRequest值。比HSE_REQ_END_RESERVED大的值是为强制的ServerSupportFunctions 保留的,不能使用。

说明:
调用此成员函数以给ISA提供一般用途的函数以及HTTP服务器实现的指定的函数。
HTTP服务器扩展值被dwHSERRequest代替,可能为:
·HSE_REQ_SEND_URL_REDIRECT_RESP发送302(URL Redirect)消息给客户。此调用后无须进一步处理。此操作相当于CGI脚本标题中的“URI: ”。变量lpvBuffer 表示一个空终止字符串。变量lpdwSize与lpvBuffer一样大小。变量lpdwDataType被忽略。
·HSE_REQ_SEND_URL发送由URL确定的数据给客户,若客户请求了该URL。由lpvBuffer表示的空终止URL必须在服务器上,且不能规定协议信息(例如,必须以‘/’开始)。此调用后无须进一步处理。DWORD的变量lpdwSize与lpvBuffer大小一样。变量lpdwDataType被忽略。
·HSE_REQ_SEND_RESPONSE_HEADER发送一个完整的HTTP服务器回答,包括状态、服务器版本、消息时间和MIME 版本。ISA 或服务器扩展应在末尾增加HTTP标题,例如Content-Type,Content-Length等等,以特殊的“\r\n”结束。
·HSE_REQ_DONE_WITH_SESSION如果ISA或服务器扩展因由扩展处理请求而想保持会话,则需告诉服务器会话何时结束以使服务器能关闭并释放有关结构。变量lpvBuffer,lpdwSize和lpdwDataType均被忽略。
·HSE_REQ_END_RESERVED比此值高的函数是服务器指定的,并不对所有支持ISAPI的服务器均有效。
·HSE_REQ_MAP_URL_TO_PATHlpvBuffer参数是指向缓冲区的指针,此缓冲区包含逻辑入口路径和退出的物理路径。lpdwSize参数是一个指向DWORD的指针,它包含进入时lpvBuffer 传递的缓冲区大小和退出时缓冲区中放入的字节数。lpdwDataType 参数被忽略。它是一个Microsoft的指定的扩展。
·HSE_REQ_GET_SSPI_INFOlpvBuffer与上下文的句柄一起加入,而 *lpdwDataType 与证明书句柄一起加入。上下文的句柄确定指针类型和类型标识符。证明书的句柄确定证明有效和授权。
·HSE_REQ_TRANSMIT_FILE请参阅TransmitFile以了解传输文件给请求者的一种更简单的方法。
注意:
服务器不保证加入此处理前缓冲区足够大,lpdwSize未被更新以反映拷贝入lpvBuffer 缓冲区的数据总量。因为是固定大小的结构,所以认为传来的指针是指向结构的指针,且必须与请求的结构一样大。

请参阅:
CHttpFilterContext::ServerSupportFunction, CHttpServerContext::TransmitFile