mirror of https://github.com/UMSKT/xpmgr.git
3446 lines
76 KiB
C++
3446 lines
76 KiB
C++
#ifndef _HTTPSERV_H_
|
|
#define _HTTPSERV_H_
|
|
|
|
#if (!defined(_WIN64) && !defined(WIN32))
|
|
#error httpserv.h is only supported on WIN32 or WIN64 platforms
|
|
#endif
|
|
|
|
#include <ahadmin.h>
|
|
#include <http.h>
|
|
|
|
//
|
|
// Request deterministic notifications
|
|
//
|
|
|
|
// request is beginning
|
|
#define RQ_BEGIN_REQUEST 0x00000001
|
|
// request is being authenticated
|
|
#define RQ_AUTHENTICATE_REQUEST 0x00000002
|
|
// request is being authorized
|
|
#define RQ_AUTHORIZE_REQUEST 0x00000004
|
|
// satisfy request from cache
|
|
#define RQ_RESOLVE_REQUEST_CACHE 0x00000008
|
|
// map handler for request
|
|
#define RQ_MAP_REQUEST_HANDLER 0x00000010
|
|
// acquire request state
|
|
#define RQ_ACQUIRE_REQUEST_STATE 0x00000020
|
|
// pre-execute handler
|
|
#define RQ_PRE_EXECUTE_REQUEST_HANDLER 0x00000040
|
|
// execute handler
|
|
#define RQ_EXECUTE_REQUEST_HANDLER 0x00000080
|
|
// release request state
|
|
#define RQ_RELEASE_REQUEST_STATE 0x00000100
|
|
// update cache
|
|
#define RQ_UPDATE_REQUEST_CACHE 0x00000200
|
|
// log request
|
|
#define RQ_LOG_REQUEST 0x00000400
|
|
// end request
|
|
#define RQ_END_REQUEST 0x00000800
|
|
|
|
//
|
|
// Request non-deterministic notifications
|
|
//
|
|
|
|
// custom notification
|
|
#define RQ_CUSTOM_NOTIFICATION 0x10000000
|
|
// send response
|
|
#define RQ_SEND_RESPONSE 0x20000000
|
|
// read entity
|
|
#define RQ_READ_ENTITY 0x40000000
|
|
// map a url to a physical path
|
|
#define RQ_MAP_PATH 0x80000000
|
|
|
|
//
|
|
// Global notifications
|
|
//
|
|
|
|
// stop accepting new requests
|
|
#define GL_STOP_LISTENING 0x00000002
|
|
// cache cleanup before termination
|
|
#define GL_CACHE_CLEANUP 0x00000004
|
|
// cache operation
|
|
#define GL_CACHE_OPERATION 0x00000010
|
|
// health check
|
|
#define GL_HEALTH_CHECK 0x00000020
|
|
// configuration changed
|
|
#define GL_CONFIGURATION_CHANGE 0x00000040
|
|
// file changed
|
|
#define GL_FILE_CHANGE 0x00000080
|
|
// before request pipeline has started
|
|
#define GL_PRE_BEGIN_REQUEST 0x00000100
|
|
// application start
|
|
#define GL_APPLICATION_START 0x00000200
|
|
// resolve modules for an application
|
|
#define GL_APPLICATION_RESOLVE_MODULES 0x00000400
|
|
// application end
|
|
#define GL_APPLICATION_STOP 0x00000800
|
|
// RSCA query
|
|
#define GL_RSCA_QUERY 0x00001000
|
|
// trace event was raised
|
|
#define GL_TRACE_EVENT 0x00002000
|
|
// custom notification
|
|
#define GL_CUSTOM_NOTIFICATION 0x00004000
|
|
// thread cleanup notification
|
|
#define GL_THREAD_CLEANUP 0x00008000
|
|
// application preload notification
|
|
#define GL_APPLICATION_PRELOAD 0x00010000
|
|
|
|
//
|
|
// Request notification return status
|
|
//
|
|
|
|
typedef enum REQUEST_NOTIFICATION_STATUS
|
|
{
|
|
RQ_NOTIFICATION_CONTINUE, // continue processing
|
|
// for notification
|
|
RQ_NOTIFICATION_PENDING, // suspend processing
|
|
// for notification
|
|
RQ_NOTIFICATION_FINISH_REQUEST // finish request
|
|
// processing
|
|
};
|
|
|
|
//
|
|
// Out of band return codes
|
|
//
|
|
|
|
typedef enum GLOBAL_NOTIFICATION_STATUS
|
|
{
|
|
GL_NOTIFICATION_CONTINUE, // continue processing
|
|
// for notification
|
|
GL_NOTIFICATION_HANDLED // finish processing for
|
|
// notification
|
|
};
|
|
|
|
//
|
|
// Priority class aliases
|
|
//
|
|
|
|
#define PRIORITY_ALIAS_FIRST L"FIRST"
|
|
#define PRIORITY_ALIAS_HIGH L"HIGH"
|
|
#define PRIORITY_ALIAS_MEDIUM L"MEDIUM"
|
|
#define PRIORITY_ALIAS_LOW L"LOW"
|
|
#define PRIORITY_ALIAS_LAST L"LAST"
|
|
|
|
//
|
|
// Cache operations
|
|
//
|
|
|
|
typedef enum CACHE_OPERATION
|
|
{
|
|
CACHE_OPERATION_RETRIEVE,
|
|
CACHE_OPERATION_ADD,
|
|
CACHE_OPERATION_DELETE,
|
|
CACHE_OPERATION_FLUSH_PREFIX,
|
|
CACHE_OPERATION_ENUM
|
|
};
|
|
|
|
//
|
|
// Module identifier
|
|
//
|
|
|
|
typedef VOID* HTTP_MODULE_ID;
|
|
|
|
//
|
|
// Flags for IHttpContext->CloneContext()
|
|
//
|
|
|
|
#define CLONE_FLAG_BASICS 0x01
|
|
#define CLONE_FLAG_HEADERS 0x02
|
|
#define CLONE_FLAG_ENTITY 0x04
|
|
#define CLONE_FLAG_NO_PRECONDITION 0x08
|
|
#define CLONE_FLAG_NO_DAV 0x10
|
|
|
|
//
|
|
// Flags for IHttpContext->ExecuteRequest()
|
|
//
|
|
|
|
#define EXECUTE_FLAG_NO_HEADERS 0x01
|
|
#define EXECUTE_FLAG_IGNORE_CURRENT_INTERCEPTOR 0x02
|
|
#define EXECUTE_FLAG_IGNORE_APPPOOL 0x04
|
|
#define EXECUTE_FLAG_DISABLE_CUSTOM_ERROR 0x08
|
|
#define EXECUTE_FLAG_SAME_URL 0x10
|
|
// do not flush the child response but copy it back to the parent
|
|
#define EXECUTE_FLAG_BUFFER_RESPONSE 0x20
|
|
// child response is still eligible for http.sys caching
|
|
#define EXECUTE_FLAG_HTTP_CACHE_ELIGIBLE 0x40
|
|
|
|
|
|
//
|
|
// forward declarations
|
|
//
|
|
struct HTTP_TRACE_CONFIGURATION;
|
|
struct HTTP_TRACE_EVENT;
|
|
|
|
class IWorkerProcessFramework;
|
|
class IWpfSettings;
|
|
class IHttpTraceContext;
|
|
|
|
//
|
|
// Module-specific context descriptor
|
|
//
|
|
class __declspec(uuid("f1927f76-790e-4ccb-a72e-396bdfdae05d"))
|
|
IHttpStoredContext
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
CleanupStoredContext(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Context container
|
|
//
|
|
class __declspec(uuid("d7fad7c9-aa27-4ab9-bd60-e55ccba3f5dc"))
|
|
IHttpModuleContextContainer
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpStoredContext *
|
|
GetModuleContext(
|
|
IN HTTP_MODULE_ID moduleId
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetModuleContext(
|
|
IN IHttpStoredContext * ppStoredContext,
|
|
IN HTTP_MODULE_ID moduleId
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Dispensed context container
|
|
//
|
|
class __declspec(uuid("2ae49359-95dd-4e48-ae20-c0cb9d0bc03a"))
|
|
IDispensedHttpModuleContextContainer : public IHttpModuleContextContainer
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
ReleaseContainer(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Performance counter descriptor
|
|
//
|
|
class __declspec(uuid("bdfc4c4a-12a4-4744-87d8-765eb320c59f"))
|
|
IHttpPerfCounterInfo
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
IncrementCounter(
|
|
DWORD dwCounterIndex,
|
|
DWORD dwValue = 1
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DecrementCounter(
|
|
DWORD dwCounterIndex,
|
|
DWORD dwValue = 1
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Application descriptor
|
|
//
|
|
class __declspec(uuid("3f75d9e6-1075-422c-ad89-93a85f2d7bdc"))
|
|
IHttpApplication
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetApplicationPhysicalPath(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetApplicationId(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetAppConfigPath(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// URI cache entry descriptor
|
|
//
|
|
class __declspec(uuid("7e0e6167-0094-49a1-8287-ecf6dc6e73a6"))
|
|
IHttpUrlInfo
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
IsFrequentlyHit(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
//
|
|
// Script map descriptor
|
|
//
|
|
class __declspec(uuid("d7fe3d77-68bc-4d4a-851f-eec9fb68017c"))
|
|
IScriptMapInfo
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetPath(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetAllowedVerbs(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetModules(
|
|
OUT DWORD * pcchModules = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetScriptProcessor(
|
|
OUT DWORD * pcchScriptProcessor = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetManagedType(
|
|
OUT DWORD * pcchManagedType = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetAllowPathInfoForScriptMappings(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
DWORD
|
|
GetRequiredAccess(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
DWORD
|
|
GetResourceType(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetIsStarScriptMap(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
DWORD
|
|
GetResponseBufferLimit(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetName(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
class __declspec(uuid("fd86e6de-fb0e-47dd-820a-e0da12be46e9"))
|
|
IHttpTokenEntry;
|
|
|
|
//
|
|
// Metadata descriptor
|
|
//
|
|
class __declspec(uuid("48b10633-825d-495e-93b0-225380053e8e"))
|
|
IMetadataInfo
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetMetaPath(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetVrPath(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpTokenEntry *
|
|
GetVrToken(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("3fc5c336-9ad7-45ea-af2f-31b59302c9fe"))
|
|
IReferencedMetadataInfo: public IMetadataInfo
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
ReferenceMetadata(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DereferenceMetadata(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Provides an interface to an HTTP request object. The methods on this
|
|
// class can be used to inspect and modify request data.
|
|
//
|
|
class __declspec(uuid("e8698f7e-576e-4cac-a309-67435355faef"))
|
|
IHttpRequest
|
|
{
|
|
public:
|
|
virtual
|
|
HTTP_REQUEST *
|
|
GetRawHttpRequest(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
const HTTP_REQUEST *
|
|
GetRawHttpRequest(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetHeader(
|
|
IN PCSTR pszHeaderName,
|
|
OUT USHORT * pcchHeaderValue = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetHeader(
|
|
IN HTTP_HEADER_ID ulHeaderIndex,
|
|
OUT USHORT * pcchHeaderValue = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetHeader(
|
|
IN PCSTR pszHeaderName,
|
|
IN PCSTR pszHeaderValue,
|
|
IN USHORT cchHeaderValue,
|
|
IN BOOL fReplace
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetHeader(
|
|
IN HTTP_HEADER_ID ulHeaderIndex,
|
|
IN PCSTR pszHeaderValue,
|
|
IN USHORT cchHeaderValue,
|
|
IN BOOL fReplace
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
DeleteHeader(
|
|
IN PCSTR pszHeaderName
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
DeleteHeader(
|
|
IN HTTP_HEADER_ID ulHeaderIndex
|
|
) = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetHttpMethod(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetHttpMethod(
|
|
IN PCSTR pszHttpMethod
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetUrl(
|
|
IN PCWSTR pszUrl,
|
|
IN DWORD cchUrl,
|
|
IN BOOL fResetQueryString
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetUrl(
|
|
IN PCSTR pszUrl,
|
|
IN DWORD cchUrl,
|
|
IN BOOL fResetQueryString
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetUrlChanged(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetForwardedUrl(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PSOCKADDR
|
|
GetLocalAddress(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PSOCKADDR
|
|
GetRemoteAddress(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
ReadEntityBody(
|
|
OUT VOID * pvBuffer,
|
|
IN DWORD cbBuffer,
|
|
IN BOOL fAsync,
|
|
OUT DWORD * pcbBytesReceived,
|
|
OUT BOOL * pfCompletionPending = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
InsertEntityBody(
|
|
IN VOID * pvBuffer,
|
|
IN DWORD cbBuffer
|
|
) = 0;
|
|
|
|
virtual
|
|
DWORD
|
|
GetRemainingEntityBytes(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
GetHttpVersion(
|
|
OUT USHORT * pMajorVersion,
|
|
OUT USHORT * pMinorVersion
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetClientCertificate(
|
|
OUT HTTP_SSL_CLIENT_CERT_INFO ** ppClientCertInfo,
|
|
OUT BOOL * pfClientCertNegotiated
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
NegotiateClientCertificate(
|
|
IN BOOL fAsync,
|
|
OUT BOOL * pfCompletionPending = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
DWORD
|
|
GetSiteId(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetHeaderChanges(
|
|
IN DWORD dwOldChangeNumber,
|
|
OUT DWORD * pdwNewChangeNumber,
|
|
IN OUT PCSTR knownHeaderSnapshot[HttpHeaderRequestMaximum],
|
|
IN OUT DWORD * pdwUnknownHeaderSnapshot,
|
|
IN OUT PCSTR **ppUnknownHeaderNameSnapshot,
|
|
IN OUT PCSTR **ppUnknownHeaderValueSnapshot,
|
|
__out_ecount(HttpHeaderRequestMaximum+1)
|
|
DWORD diffedKnownHeaderIndices[HttpHeaderRequestMaximum+1],
|
|
OUT DWORD * pdwDiffedUnknownHeaders,
|
|
OUT DWORD **ppDiffedUnknownHeaderIndices
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("d9244ae1-51f8-4aa1-a66d-19277c33e610"))
|
|
IHttpRequest2 : public IHttpRequest
|
|
{
|
|
public:
|
|
virtual
|
|
HRESULT
|
|
GetChannelBindingToken(
|
|
__deref_out_bcount_part(*pTokenSize, *pTokenSize)
|
|
PBYTE * ppToken,
|
|
DWORD * pTokenSize
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("cb1c40ca-70f2-41a0-add2-881f5ef57388"))
|
|
IHttpCachePolicy
|
|
{
|
|
public:
|
|
virtual
|
|
HTTP_CACHE_POLICY *
|
|
GetKernelCachePolicy(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetKernelCacheInvalidatorSet(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HTTP_CACHE_POLICY *
|
|
GetUserCachePolicy(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
AppendVaryByHeader(
|
|
PCSTR pszHeader
|
|
) = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetVaryByHeaders(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
AppendVaryByQueryString(
|
|
PCSTR pszParam
|
|
) = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetVaryByQueryStrings(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetVaryByValue(
|
|
PCSTR pszValue
|
|
) = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetVaryByValue(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
IsUserCacheEnabled(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DisableUserCache(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
IsCached(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetIsCached(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetKernelCacheInvalidatorSet(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
class __declspec(uuid("9f4ba807-050e-4495-ae55-8870f7e9194a"))
|
|
IHttpCachePolicy2 : public IHttpCachePolicy
|
|
{
|
|
public:
|
|
virtual
|
|
BOOL
|
|
IsForceUpdateSet(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetForceUpdate(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Response descriptor
|
|
//
|
|
class __declspec(uuid("7e1c6b38-628f-4e6c-95dc-41237eb7f95e"))
|
|
IHttpResponse
|
|
{
|
|
public:
|
|
virtual
|
|
HTTP_RESPONSE *
|
|
GetRawHttpResponse(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
const HTTP_RESPONSE *
|
|
GetRawHttpResponse(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpCachePolicy *
|
|
GetCachePolicy(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetStatus(
|
|
IN USHORT statusCode,
|
|
IN PCSTR pszReason,
|
|
IN USHORT uSubStatus = 0,
|
|
IN HRESULT hrErrorToReport = S_OK,
|
|
IN IAppHostConfigException *pException = NULL,
|
|
IN BOOL fTrySkipCustomErrors = FALSE
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetHeader(
|
|
IN PCSTR pszHeaderName,
|
|
IN PCSTR pszHeaderValue,
|
|
IN USHORT cchHeaderValue,
|
|
IN BOOL fReplace
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetHeader(
|
|
IN HTTP_HEADER_ID ulHeaderIndex,
|
|
IN PCSTR pszHeaderValue,
|
|
IN USHORT cchHeaderValue,
|
|
IN BOOL fReplace
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
DeleteHeader(
|
|
IN PCSTR pszHeaderName
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
DeleteHeader(
|
|
IN HTTP_HEADER_ID ulHeaderIndex
|
|
) = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetHeader(
|
|
IN PCSTR pszHeaderName,
|
|
OUT USHORT * pcchHeaderValue = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetHeader(
|
|
IN HTTP_HEADER_ID ulHeaderIndex,
|
|
OUT USHORT * pcchHeaderValue = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
Clear(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
ClearHeaders(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetNeedDisconnect(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
ResetConnection(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DisableKernelCache(
|
|
ULONG reason = 9
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetKernelCacheEnabled(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SuppressHeaders(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetHeadersSuppressed(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
Flush(
|
|
IN BOOL fAsync,
|
|
IN BOOL fMoreData,
|
|
OUT DWORD * pcbSent,
|
|
OUT BOOL * pfCompletionExpected = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
Redirect(
|
|
IN PCSTR pszUrl,
|
|
IN BOOL fResetStatusCode = TRUE,
|
|
IN BOOL fIncludeParameters = FALSE
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
WriteEntityChunkByReference(
|
|
IN HTTP_DATA_CHUNK * pDataChunk,
|
|
IN LONG lInsertPosition = -1
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
WriteEntityChunks(
|
|
IN HTTP_DATA_CHUNK * pDataChunks,
|
|
IN DWORD nChunks,
|
|
IN BOOL fAsync,
|
|
IN BOOL fMoreData,
|
|
OUT DWORD * pcbSent,
|
|
OUT BOOL * pfCompletionExpected = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DisableBuffering(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
GetStatus(
|
|
OUT USHORT * pStatusCode,
|
|
OUT USHORT * pSubStatus = NULL,
|
|
OUT PCSTR * ppszReason = NULL,
|
|
OUT USHORT * pcchReason = NULL,
|
|
OUT HRESULT * phrErrorToReport = NULL,
|
|
OUT PCWSTR * ppszModule = NULL,
|
|
OUT DWORD * pdwNotification = NULL,
|
|
OUT IAppHostConfigException ** ppException = NULL,
|
|
OUT BOOL * pfTrySkipCustomErrors = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetErrorDescription(
|
|
IN PCWSTR pszDescription,
|
|
IN DWORD cchDescription,
|
|
IN BOOL fHtmlEncode = TRUE
|
|
) = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetErrorDescription(
|
|
OUT DWORD * pcchDescription = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetHeaderChanges(
|
|
IN DWORD dwOldChangeNumber,
|
|
OUT DWORD * pdwNewChangeNumber,
|
|
IN OUT PCSTR knownHeaderSnapshot[HttpHeaderResponseMaximum],
|
|
IN OUT DWORD * pdwUnknownHeaderSnapshot,
|
|
IN OUT PCSTR **ppUnknownHeaderNameSnapshot,
|
|
IN OUT PCSTR **ppUnknownHeaderValueSnapshot,
|
|
__out_ecount(HttpHeaderResponseMaximum+1)
|
|
DWORD diffedKnownHeaderIndices[HttpHeaderResponseMaximum+1],
|
|
OUT DWORD * pdwDiffedUnknownHeaders,
|
|
OUT DWORD **ppDiffedUnknownHeaderIndices
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
CloseConnection(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// User descriptor
|
|
//
|
|
class __declspec(uuid("8059e6f8-10ce-4d61-b47e-5a1d8d9a8b67"))
|
|
IHttpUser
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetRemoteUserName(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetUserName(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetAuthenticationType(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetPassword(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HANDLE
|
|
GetImpersonationToken(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HANDLE
|
|
GetPrimaryToken(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
ReferenceUser(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DereferenceUser(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
SupportsIsInRole(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
IsInRole(
|
|
IN PCWSTR pszRoleName,
|
|
OUT BOOL * pfInRole
|
|
) = 0;
|
|
|
|
virtual
|
|
PVOID
|
|
GetUserVariable(
|
|
IN PCSTR pszVariableName
|
|
) = 0;
|
|
};
|
|
|
|
#define HTTP_USER_VARIABLE_SID "SID"
|
|
#define HTTP_USER_VARIABLE_CTXT_HANDLE "CtxtHandle"
|
|
#define HTTP_USER_VARIABLE_CRED_HANDLE "CredHandle"
|
|
|
|
class __declspec(uuid("841d9a71-75f4-4626-8b97-66046ca7e45b"))
|
|
IHttpConnectionStoredContext : public IHttpStoredContext
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
NotifyDisconnect(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("f3dd2fb3-4d11-4295-b8ab-4cb667add1fe"))
|
|
IHttpConnectionModuleContextContainer : public IHttpModuleContextContainer
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpConnectionStoredContext *
|
|
GetConnectionModuleContext(
|
|
IN HTTP_MODULE_ID moduleId
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetConnectionModuleContext(
|
|
IN IHttpConnectionStoredContext * ppStoredContext,
|
|
IN HTTP_MODULE_ID moduleId
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Connection descriptor
|
|
//
|
|
class __declspec(uuid("d9a5de00-3346-4599-9826-fe88565e1226"))
|
|
IHttpConnection
|
|
{
|
|
public:
|
|
virtual
|
|
BOOL
|
|
IsConnected(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID *
|
|
AllocateMemory(
|
|
DWORD cbAllocation
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpConnectionModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Forward declarations
|
|
//
|
|
class __declspec(uuid("71e95595-8c74-44d9-88a9-f5112d5f5900"))
|
|
IHttpFileInfo;
|
|
|
|
class __declspec(uuid("eb16a6ec-ba5d-436f-bf24-3ede13906450"))
|
|
IHttpSite;
|
|
|
|
class __declspec(uuid("671e6d34-9380-4df4-b453-91129df02b24"))
|
|
ICustomNotificationProvider;
|
|
|
|
class __declspec(uuid("6f3f657d-2fb8-43c6-a096-5064b41f0580"))
|
|
IHttpEventProvider;
|
|
|
|
class CHttpModule;
|
|
|
|
//
|
|
// IHttpContext extended interface versions (deprecated)
|
|
//
|
|
enum HTTP_CONTEXT_INTERFACE_VERSION
|
|
{
|
|
};
|
|
|
|
//
|
|
// Context object representing the processing of an HTTP request
|
|
//
|
|
class __declspec(uuid("424c1b8c-a1ba-44d7-ac98-9f8f457701a5"))
|
|
IHttpContext
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpSite *
|
|
GetSite(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpApplication *
|
|
GetApplication(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpConnection *
|
|
GetConnection(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpRequest *
|
|
GetRequest(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpResponse *
|
|
GetResponse(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetResponseHeadersSent(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpUser *
|
|
GetUser(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
IndicateCompletion(
|
|
IN REQUEST_NOTIFICATION_STATUS notificationStatus
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
PostCompletion(
|
|
IN DWORD cbBytes
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DisableNotifications(
|
|
IN DWORD dwNotifications,
|
|
IN DWORD dwPostNotifications
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetNextNotification(
|
|
IN REQUEST_NOTIFICATION_STATUS status,
|
|
OUT DWORD * pdwNotification,
|
|
OUT BOOL * pfIsPostNotification,
|
|
OUT CHttpModule ** ppModuleInfo,
|
|
OUT IHttpEventProvider ** ppRequestOutput
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetIsLastNotification(
|
|
IN REQUEST_NOTIFICATION_STATUS status
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
ExecuteRequest(
|
|
IN BOOL fAsync,
|
|
IN IHttpContext * pHttpContext,
|
|
IN DWORD dwExecuteFlags,
|
|
IN IHttpUser * pHttpUser,
|
|
OUT BOOL * pfCompletionExpected = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
DWORD
|
|
GetExecuteFlags(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetServerVariable(
|
|
PCSTR pszVariableName,
|
|
__deref_out_ecount(*pcchValueLength) PCWSTR * ppszValue,
|
|
__out DWORD * pcchValueLength
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetServerVariable(
|
|
PCSTR pszVariableName,
|
|
__deref_out_ecount(*pcchValueLength) PCSTR * ppszValue,
|
|
__out DWORD * pcchValueLength
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetServerVariable(
|
|
PCSTR pszVariableName,
|
|
PCWSTR pszVariableValue
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID *
|
|
AllocateRequestMemory(
|
|
IN DWORD cbAllocation
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpUrlInfo *
|
|
GetUrlInfo(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IMetadataInfo *
|
|
GetMetadata(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetPhysicalPath(
|
|
OUT DWORD * pcchPhysicalPath = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetScriptName(
|
|
OUT DWORD * pcchScriptName = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetScriptTranslated(
|
|
OUT DWORD * pcchScriptTranslated = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
IScriptMapInfo *
|
|
GetScriptMap(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetRequestHandled(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpFileInfo *
|
|
GetFileInfo(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
MapPath(
|
|
PCWSTR pszUrl,
|
|
__out_bcount_opt(*pcbPhysicalPath) PWSTR pszPhysicalPath,
|
|
IN OUT DWORD * pcbPhysicalPath
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
NotifyCustomNotification(
|
|
ICustomNotificationProvider * pCustomOutput,
|
|
OUT BOOL * pfCompletionExpected
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpContext *
|
|
GetParentContext(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpContext *
|
|
GetRootContext(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
CloneContext(
|
|
IN DWORD dwCloneFlags,
|
|
OUT IHttpContext ** ppHttpContext
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
ReleaseClonedContext(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetCurrentExecutionStats(
|
|
OUT DWORD * pdwNotification,
|
|
OUT DWORD * pdwNotificationStartTickCount = NULL,
|
|
OUT PCWSTR * ppszModule = NULL,
|
|
OUT DWORD * pdwModuleStartTickCount = NULL,
|
|
OUT DWORD * pdwAsyncNotification = NULL,
|
|
OUT DWORD * pdwAsyncNotificationStartTickCount = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpTraceContext *
|
|
GetTraceContext(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetServerVarChanges(
|
|
IN DWORD dwOldChangeNumber,
|
|
OUT DWORD * pdwNewChangeNumber,
|
|
IN OUT DWORD * pdwVariableSnapshot,
|
|
IN OUT PCSTR ** ppVariableNameSnapshot,
|
|
IN OUT PCWSTR ** ppVariableValueSnapshot,
|
|
OUT DWORD * pdwDiffedVariables,
|
|
OUT DWORD ** ppDiffedVariableIndices
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
CancelIo(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
MapHandler(
|
|
IN DWORD dwSiteId,
|
|
IN PCWSTR pszSiteName,
|
|
IN PCWSTR pszUrl,
|
|
IN PCSTR pszVerb,
|
|
OUT IScriptMapInfo ** ppScriptMap,
|
|
IN BOOL fIgnoreWildcardMappings = FALSE
|
|
) = 0;
|
|
|
|
__declspec(deprecated("This method is deprecated. Use the HttpGetExtendedInterface helper function instead."))
|
|
virtual
|
|
HRESULT
|
|
GetExtendedInterface(
|
|
IN HTTP_CONTEXT_INTERFACE_VERSION version,
|
|
OUT PVOID * ppInterface
|
|
) = 0;
|
|
};
|
|
|
|
|
|
//
|
|
// Context object representing the processing of an HTTP request
|
|
// IHttpContext2 is available on Win7 and newer
|
|
//
|
|
class __declspec(uuid("c986182c-cf4a-4482-8205-0dbbc1fd6cee"))
|
|
IHttpContext2: public IHttpContext
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpUser *
|
|
GetOriginalUser(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
class __declspec(uuid("9f9098d5-915c-4294-a52e-66532a232bc9"))
|
|
IHttpTraceContext
|
|
{
|
|
public:
|
|
virtual
|
|
HRESULT
|
|
GetTraceConfiguration(
|
|
IN OUT HTTP_TRACE_CONFIGURATION * pHttpTraceConfiguration
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetTraceConfiguration(
|
|
IN HTTP_MODULE_ID moduleId,
|
|
IN HTTP_TRACE_CONFIGURATION * pHttpTraceConfiguration,
|
|
IN DWORD cHttpTraceConfiguration = 1
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
RaiseTraceEvent(
|
|
IN HTTP_TRACE_EVENT * pTraceEvent
|
|
) = 0;
|
|
|
|
virtual
|
|
LPCGUID
|
|
GetTraceActivityId(
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
QuickTrace(
|
|
IN PCWSTR pszData1,
|
|
IN PCWSTR pszData2 = NULL,
|
|
IN HRESULT hrLastError = S_OK,
|
|
//
|
|
// 4 == TRACE_LEVEL_INFORMATION
|
|
//
|
|
IN UCHAR Level = 4
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("37776aff-852e-4eec-93a5-b85a285a95b8"))
|
|
IHttpCacheSpecificData;
|
|
|
|
//
|
|
// Cache helpers
|
|
//
|
|
class __declspec(uuid("cdef2aad-20b3-4512-b1b1-094b3844aeb2"))
|
|
IHttpCacheKey
|
|
{
|
|
public:
|
|
virtual
|
|
DWORD
|
|
GetHash(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetCacheName(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
bool
|
|
GetIsEqual(
|
|
IHttpCacheKey * pCacheCompareKey
|
|
) const = 0;
|
|
|
|
virtual
|
|
bool
|
|
GetIsPrefix(
|
|
IHttpCacheKey * pCacheCompareKey
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
Enum(
|
|
IHttpCacheSpecificData *
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("37776aff-852e-4eec-93a5-b85a285a95b8"))
|
|
IHttpCacheSpecificData
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpCacheKey *
|
|
GetCacheKey(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
ReferenceCacheData(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DereferenceCacheData(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
ResetTTL(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DecrementTTL(
|
|
OUT BOOL *pfTTLExpired
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetFlushed(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetFlushed(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
//
|
|
// Site descriptor
|
|
//
|
|
class __declspec(uuid("eb16a6ec-ba5d-436f-bf24-3ede13906450"))
|
|
IHttpSite
|
|
{
|
|
public:
|
|
virtual
|
|
DWORD
|
|
GetSiteId(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetSiteName(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpPerfCounterInfo *
|
|
GetPerfCounterInfo(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// File change monitor
|
|
//
|
|
//
|
|
class __declspec(uuid("985422da-b0cf-473b-ba9e-8148ceb3e240"))
|
|
IHttpFileMonitor
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DereferenceFileMonitor(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// File descriptor
|
|
//
|
|
//
|
|
class __declspec(uuid("71e95595-8c74-44d9-88a9-f5112d5f5900"))
|
|
IHttpFileInfo : public IHttpCacheSpecificData
|
|
{
|
|
public:
|
|
virtual
|
|
DWORD
|
|
GetAttributes(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
GetSize(
|
|
OUT ULARGE_INTEGER * pliSize
|
|
) const = 0;
|
|
|
|
virtual
|
|
const BYTE *
|
|
GetFileBuffer(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HANDLE
|
|
GetFileHandle(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetFilePath(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetETag(
|
|
OUT USHORT * pcchETag = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
GetLastModifiedTime(
|
|
OUT FILETIME * pFileTime
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCSTR
|
|
GetLastModifiedString(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetHttpCacheAllowed(
|
|
OUT DWORD * pSecondsToLive
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
AccessCheck(
|
|
IN HANDLE hUserToken,
|
|
IN PSID pUserSid
|
|
) = 0;
|
|
|
|
virtual
|
|
HANDLE
|
|
GetVrToken(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetVrPath(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpModuleContextContainer *
|
|
GetModuleContextContainer(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
CheckIfFileHasChanged(
|
|
IN HANDLE hUserToken
|
|
) = 0;
|
|
};
|
|
|
|
|
|
//
|
|
// Token-cache entry
|
|
//
|
|
class __declspec(uuid("fd86e6de-fb0e-47dd-820a-e0da12be46e9"))
|
|
IHttpTokenEntry : public IHttpCacheSpecificData
|
|
{
|
|
public:
|
|
virtual
|
|
HANDLE
|
|
GetImpersonationToken(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HANDLE
|
|
GetPrimaryToken(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
PSID
|
|
GetSid(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
|
|
//
|
|
// IHttpServer extended interface versions
|
|
//
|
|
enum HTTP_SERVER_INTERFACE_VERSION
|
|
{
|
|
HTTP_SERVER_INTERFACE_V2
|
|
};
|
|
|
|
|
|
//
|
|
// Global utility descriptor
|
|
//
|
|
class __declspec(uuid("eda2a40f-fb92-4d6d-b52b-c8c207380b4e"))
|
|
IHttpServer
|
|
{
|
|
public:
|
|
virtual
|
|
BOOL
|
|
IsCommandLineLaunch(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetAppPoolName(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
AssociateWithThreadPool(
|
|
IN HANDLE hHandle,
|
|
IN LPOVERLAPPED_COMPLETION_ROUTINE completionRoutine
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
IncrementThreadCount(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
DecrementThreadCount(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
ReportUnhealthy(
|
|
IN PCWSTR pszReasonString,
|
|
IN HRESULT hrReason
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
RecycleProcess(
|
|
PCWSTR pszReason
|
|
) = 0;
|
|
|
|
virtual
|
|
IAppHostAdminManager *
|
|
GetAdminManager(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetFileInfo(
|
|
IN PCWSTR pszPhysicalPath,
|
|
IN HANDLE hUserToken,
|
|
IN PSID pSid,
|
|
IN PCWSTR pszChangeNotificationPath,
|
|
IN HANDLE hChangeNotificationToken,
|
|
IN BOOL fCache,
|
|
OUT IHttpFileInfo ** ppFileInfo,
|
|
IN IHttpTraceContext * pHttpTraceContext = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
FlushKernelCache(
|
|
IN PCWSTR pszUrl
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
DoCacheOperation(
|
|
IN CACHE_OPERATION cacheOperation,
|
|
IN IHttpCacheKey * pCacheKey,
|
|
OUT IHttpCacheSpecificData ** ppCacheSpecificData,
|
|
IN IHttpTraceContext * pHttpTraceContext = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
NotifyCustomNotification(
|
|
ICustomNotificationProvider * pCustomOutput
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpPerfCounterInfo *
|
|
GetPerfCounterInfo(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
RecycleApplication(
|
|
PCWSTR pszAppConfigPath
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
NotifyConfigurationChange(
|
|
PCWSTR pszPath
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
NotifyFileChange(
|
|
PCWSTR pszFileName
|
|
) = 0;
|
|
|
|
virtual
|
|
IDispensedHttpModuleContextContainer *
|
|
DispenseContainer(
|
|
VOID
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
AddFragmentToCache(
|
|
IN HTTP_DATA_CHUNK * pDataChunk,
|
|
PCWSTR pszFragmentName
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
ReadFragmentFromCache(
|
|
PCWSTR pszFragmentName,
|
|
OUT BYTE * pvBuffer,
|
|
DWORD cbSize,
|
|
OUT DWORD * pcbCopied
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
RemoveFragmentFromCache(
|
|
PCWSTR pszFragmentName
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetWorkerProcessSettings(
|
|
OUT IWpfSettings ** ppWorkerProcessSettings
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetProtocolManagerCustomInterface(
|
|
IN PCWSTR pProtocolManagerDll,
|
|
IN PCWSTR pProtocolManagerDllInitFunction,
|
|
IN DWORD dwCustomInterfaceId,
|
|
OUT PVOID* ppCustomInterface
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
SatisfiesPrecondition(
|
|
PCWSTR pszPrecondition,
|
|
BOOL * pfUnknownPrecondition = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpTraceContext *
|
|
GetTraceContext(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
RegisterFileChangeMonitor(
|
|
PCWSTR pszPath,
|
|
HANDLE hToken,
|
|
IHttpFileMonitor ** ppFileMonitor
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetExtendedInterface(
|
|
IN HTTP_SERVER_INTERFACE_VERSION version,
|
|
OUT PVOID * ppInterface
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("34af637e-afe8-4556-bcc1-767f8e0b4a4e"))
|
|
IHttpServer2 : public IHttpServer
|
|
{
|
|
public:
|
|
|
|
virtual
|
|
HRESULT
|
|
GetToken(
|
|
PCWSTR pszUserName,
|
|
PCWSTR pszPassword,
|
|
DWORD dwLogonMethod,
|
|
IHttpTokenEntry ** ppTokenEntry,
|
|
PCWSTR pszDefaultDomain = NULL,
|
|
PSOCKADDR pSockAddr = NULL,
|
|
IHttpTraceContext * pHttpTraceContext = NULL
|
|
) = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetAppPoolConfigFile(
|
|
__out DWORD * pcchConfigFilePath = NULL
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetExtendedInterface(
|
|
__in const GUID & Version1,
|
|
__in PVOID pInput,
|
|
__in const GUID & Version2,
|
|
__deref_out PVOID * ppOutput
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetMetadata(
|
|
__in PCWSTR pszSiteName,
|
|
__in PCWSTR pszUrl,
|
|
__deref_out IReferencedMetadataInfo ** ppMetadataInfo
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetWorkerProcessFramework(
|
|
OUT IWorkerProcessFramework ** ppWorkerProcessFramework
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Helper function to get extended HTTP interfaces.
|
|
//
|
|
// Template parameters (HttpType1 and HttpType2)
|
|
// can be deduced from the arguments to the function.
|
|
//
|
|
// Example:
|
|
//
|
|
// IHttpRequest * pHttpRequest = pHttpContext->GetRequest();
|
|
// IHttpRequest2 * pHttpRequest2;
|
|
// HRESULT hr = HttpGetExtendedInterface(g_pHttpServer, pHttpRequest, &pHttpRequest2);
|
|
// if( SUCCEEDED(hr) )
|
|
// {
|
|
// // Use pHttpRequest2.
|
|
// }
|
|
//
|
|
// Where pHttpContext is an IHttpContext pointer and
|
|
// g_pHttpServer is an IHttpServer pointer.
|
|
//
|
|
|
|
template <class HttpType1, class HttpType2>
|
|
HRESULT
|
|
HttpGetExtendedInterface(
|
|
__in IHttpServer * pHttpServer,
|
|
__in HttpType1 * pInput,
|
|
__deref_out HttpType2 ** ppOutput
|
|
)
|
|
{
|
|
HRESULT hr;
|
|
IHttpServer2 * pHttpServer2;
|
|
hr = pHttpServer->GetExtendedInterface(HTTP_SERVER_INTERFACE_V2,
|
|
reinterpret_cast<void**>(&pHttpServer2) );
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = pHttpServer2->GetExtendedInterface(__uuidof(HttpType1),
|
|
pInput,
|
|
__uuidof(HttpType2),
|
|
reinterpret_cast<void**>(ppOutput) );
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// Notification specific output for notifications
|
|
//
|
|
class __declspec(uuid("6f3f657d-2fb8-43c6-a096-5064b41f0580"))
|
|
IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
SetErrorStatus(
|
|
HRESULT hrError
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Completion information for notifications
|
|
//
|
|
class __declspec(uuid("49dd20e3-d9c0-463c-8821-f3413b55cc00"))
|
|
IHttpCompletionInfo
|
|
{
|
|
public:
|
|
virtual
|
|
DWORD
|
|
GetCompletionBytes(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetCompletionStatus(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
//
|
|
// RQ_ and GL_ CUSTOM_NOTIFICATION outputs
|
|
//
|
|
class __declspec(uuid("671e6d34-9380-4df4-b453-91129df02b24"))
|
|
ICustomNotificationProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
QueryNotificationType(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// RQ_REQUEST_AUTHENTICATE descriptor
|
|
//
|
|
class __declspec(uuid("304d51d0-0307-45ed-83fd-dd3fc032fdfc"))
|
|
IAuthenticationProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
SetUser(
|
|
IN IHttpUser * pUser
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// RQ_MAP_REQUEST_HANDLER
|
|
//
|
|
class __declspec(uuid("fea3ce6b-e346-47e7-b2a6-ad265baeff2c"))
|
|
IMapHandlerProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
HRESULT
|
|
SetScriptName(
|
|
PCWSTR pszScriptName,
|
|
DWORD cchScriptName
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetScriptMap(
|
|
IN IScriptMapInfo * pScriptMap
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetFileInfo(
|
|
IN IHttpFileInfo * pFileInfo
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// RQ_MAP_PATH
|
|
//
|
|
class __declspec(uuid("8efdf557-a8f1-4bc9-b462-6df3b038a59a"))
|
|
IMapPathProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetUrl(
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetPhysicalPath(
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetPhysicalPath(
|
|
PCWSTR pszPhysicalPath,
|
|
DWORD cchPhysicalPath
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// RQ_SEND_RESPONSE
|
|
//
|
|
class __declspec(uuid("57f2e7bc-0bcf-4a9f-94a4-10e55c6e5b51"))
|
|
ISendResponseProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
BOOL
|
|
GetHeadersBeingSent(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
DWORD
|
|
GetFlags(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetFlags(
|
|
DWORD dwFlags
|
|
) = 0;
|
|
|
|
virtual
|
|
HTTP_LOG_DATA *
|
|
GetLogData(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetLogData(
|
|
IN HTTP_LOG_DATA *pLogData
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
GetReadyToLogData(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
//
|
|
// RQ_READ_ENTITY
|
|
//
|
|
class __declspec(uuid("fe6d905a-99b8-49fd-b389-cfc809562b81"))
|
|
IReadEntityProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
VOID
|
|
GetEntity(
|
|
OUT PVOID * ppBuffer,
|
|
OUT DWORD * pcbData,
|
|
OUT DWORD * pcbBuffer
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetEntity(
|
|
IN PVOID pBuffer,
|
|
DWORD cbData,
|
|
DWORD cbBuffer
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// GL_PRE_BEGIN_REQUEST provider
|
|
//
|
|
class __declspec(uuid("fb715d26-aff9-476a-8fc0-6b1acb3d1098"))
|
|
IPreBeginRequestProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpContext *
|
|
GetHttpContext(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// GL_APPLICATION_START provider
|
|
//
|
|
class __declspec(uuid("1de2c71c-c126-4512-aed3-f4f885e14997"))
|
|
IHttpApplicationProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpApplication *
|
|
GetApplication(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
typedef IHttpApplicationProvider IHttpApplicationStartProvider;
|
|
|
|
class __declspec(uuid("ba32d330-9ea8-4b9e-89f1-8c76a323277f"))
|
|
IHttpModuleFactory;
|
|
|
|
//
|
|
// GL_APPLICATION_RESOLVE_MODULES provider
|
|
//
|
|
class __declspec(uuid("0617d9b9-e20f-4a9f-94f9-35403b3be01e"))
|
|
IHttpApplicationResolveModulesProvider : public IHttpApplicationProvider
|
|
{
|
|
public:
|
|
virtual
|
|
HRESULT
|
|
RegisterModule(
|
|
IN HTTP_MODULE_ID parentModuleId,
|
|
IN IHttpModuleFactory * pModuleFactory,
|
|
IN PCWSTR pszModuleName,
|
|
IN PCWSTR pszModuleType,
|
|
IN PCWSTR pszModulePreCondition,
|
|
IN DWORD dwRequestNotifications,
|
|
IN DWORD dwPostRequestNotifications
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetPriorityForRequestNotification(
|
|
IN PCWSTR pszModuleName,
|
|
IN DWORD dwRequestNotification,
|
|
IN PCWSTR pszPriorityAlias
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// GL_APPLICATION_STOP provider
|
|
//
|
|
typedef IHttpApplicationProvider IHttpApplicationStopProvider;
|
|
|
|
//
|
|
// GL_RSCA_QUERY provider
|
|
//
|
|
class __declspec(uuid("63fdc43f-934a-4ee5-bcd8-7e7b50b75605"))
|
|
IGlobalRSCAQueryProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetFunctionName(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
PCWSTR
|
|
GetFunctionParameters(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetOutputBuffer(
|
|
DWORD cbBuffer,
|
|
OUT BYTE ** ppbBuffer
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
ResizeOutputBuffer(
|
|
DWORD cbNewBuffer,
|
|
DWORD cbBytesToCopy,
|
|
IN OUT BYTE ** ppbBuffer
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetResult(
|
|
DWORD cbData,
|
|
HRESULT hr
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// GL_STOP_LISTENING
|
|
//
|
|
class __declspec(uuid("41f9a601-e25d-4ac8-8a1f-635698a30ab9"))
|
|
IGlobalStopListeningProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
BOOL
|
|
DrainRequestsGracefully(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
//
|
|
// GL_CACHE_OPERATION
|
|
//
|
|
class __declspec(uuid("58925fb9-7c5e-4684-833b-4a04e1286690"))
|
|
ICacheProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
CACHE_OPERATION
|
|
GetCacheOperation(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpCacheKey *
|
|
GetCacheKey(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpCacheSpecificData *
|
|
GetCacheRecord(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
VOID
|
|
SetCacheRecord(
|
|
IHttpCacheSpecificData * pCacheRecord
|
|
) = 0;
|
|
|
|
virtual
|
|
IHttpTraceContext *
|
|
GetTraceContext(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
//
|
|
// GL_CONFIGURATION_CHANGE
|
|
//
|
|
class __declspec(uuid("3405f3b4-b3d6-4b73-b5f5-4d8a3cc642ce"))
|
|
IGlobalConfigurationChangeProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetChangePath(
|
|
VOID
|
|
) const = 0;
|
|
};
|
|
|
|
//
|
|
// GL_FILE_CHANGE
|
|
//
|
|
class __declspec(uuid("ece31ee5-0486-4fb0-a875-6739a2d7daf5"))
|
|
IGlobalFileChangeProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetFileName(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
IHttpFileMonitor *
|
|
GetFileMonitor(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// GL_TRACE_EVENT
|
|
//
|
|
class __declspec(uuid("7c6bb150-0310-4718-a01f-6faceb62dc1d"))
|
|
IGlobalTraceEventProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
HRESULT
|
|
GetTraceEvent(
|
|
OUT HTTP_TRACE_EVENT ** ppTraceEvent
|
|
) = 0;
|
|
|
|
virtual
|
|
BOOL
|
|
CheckSubscription(
|
|
IN HTTP_MODULE_ID ModuleId
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
GetCurrentHttpRequestContext(
|
|
OUT IHttpContext ** ppHttpContext
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// GL_THREAD_CLEANUP
|
|
//
|
|
class __declspec(uuid("6b36a149-8620-45a0-8197-00814a706e2e"))
|
|
IGlobalThreadCleanupProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
IHttpApplication *
|
|
GetApplication(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// GL_APPLICATION_PRELOAD
|
|
//
|
|
class __declspec(uuid("2111f8d6-0c41-4ff7-bd45-5c04c7e91a73"))
|
|
IGlobalApplicationPreloadProvider : public IHttpEventProvider
|
|
{
|
|
public:
|
|
virtual
|
|
HRESULT
|
|
CreateContext(
|
|
OUT IHttpContext ** ppHttpContext
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
ExecuteRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpUser * pHttpUser
|
|
) = 0;
|
|
};
|
|
|
|
class CHttpModule
|
|
{
|
|
public:
|
|
// RQ_BEGIN_REQUEST
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnBeginRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostBeginRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_AUTHENTICATE_REQUEST
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnAuthenticateRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IAuthenticationProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostAuthenticateRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_AUTHORIZE_REQUEST
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnAuthorizeRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostAuthorizeRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_RESOLVE_REQUEST_CACHE
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnResolveRequestCache(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostResolveRequestCache(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_MAP_REQUEST_HANDLER
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnMapRequestHandler(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IMapHandlerProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostMapRequestHandler(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_ACQUIRE_REQUEST_STATE
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnAcquireRequestState(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostAcquireRequestState(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_PRE_EXECUTE_REQUEST_HANDLER
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPreExecuteRequestHandler(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostPreExecuteRequestHandler(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_EXECUTE_REQUEST_HANDLER
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnExecuteRequestHandler(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostExecuteRequestHandler(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// RQ_RELEASE_REQUEST_STATE
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnReleaseRequestState(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostReleaseRequestState(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
// RQ_UPDATE_REQUEST_CACHE
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnUpdateRequestCache(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostUpdateRequestCache(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// RQ_LOG_REQUEST
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnLogRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostLogRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// RQ_END_REQUEST
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnEndRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnPostEndRequest(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IHttpEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// RQ_SEND_RESPONSE
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnSendResponse(
|
|
IN IHttpContext * pHttpContext,
|
|
IN ISendResponseProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// RQ_MAP_PATH
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnMapPath(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IMapPathProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// RQ_READ_ENTITY
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnReadEntity(
|
|
IN IHttpContext * pHttpContext,
|
|
IN IReadEntityProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// RQ_CUSTOM_NOTIFICATION
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnCustomRequestNotification(
|
|
IN IHttpContext * pHttpContext,
|
|
IN ICustomNotificationProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// Completion
|
|
|
|
virtual
|
|
REQUEST_NOTIFICATION_STATUS
|
|
OnAsyncCompletion(
|
|
IN IHttpContext * pHttpContext,
|
|
IN DWORD dwNotification,
|
|
IN BOOL fPostNotification,
|
|
IN IHttpEventProvider * pProvider,
|
|
IN IHttpCompletionInfo * pCompletionInfo
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pHttpContext );
|
|
UNREFERENCED_PARAMETER( dwNotification );
|
|
UNREFERENCED_PARAMETER( fPostNotification );
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
UNREFERENCED_PARAMETER( pCompletionInfo );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CHttpModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return RQ_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
virtual
|
|
VOID
|
|
Dispose(
|
|
VOID
|
|
)
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
protected:
|
|
|
|
CHttpModule()
|
|
{}
|
|
|
|
virtual
|
|
~CHttpModule()
|
|
{}
|
|
};
|
|
|
|
class CGlobalModule
|
|
{
|
|
public:
|
|
|
|
// GL_STOP_LISTENING
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalStopListening(
|
|
IN IGlobalStopListeningProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_CACHE_CLEANUP
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalCacheCleanup(
|
|
VOID
|
|
)
|
|
{
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_CACHE_OPERATION
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalCacheOperation(
|
|
IN ICacheProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_HEALTH_CHECK
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalHealthCheck(
|
|
VOID
|
|
)
|
|
{
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_CONFIGURATION_CHANGE
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalConfigurationChange(
|
|
IN IGlobalConfigurationChangeProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_FILE_CHANGE
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalFileChange(
|
|
IN IGlobalFileChangeProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_PRE_BEGIN_REQUEST
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalPreBeginRequest(
|
|
IN IPreBeginRequestProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_APPLICATION_START
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalApplicationStart(
|
|
IN IHttpApplicationStartProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_APPLICATION_RESOLVE_MODULES
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalApplicationResolveModules(
|
|
IN IHttpApplicationResolveModulesProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_APPLICATION_STOP
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalApplicationStop(
|
|
IN IHttpApplicationStopProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_RSCA_QUERY
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalRSCAQuery(
|
|
IN IGlobalRSCAQueryProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_TRACE_EVENT
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalTraceEvent(
|
|
IN IGlobalTraceEventProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_CUSTOM_NOTIFICATION
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalCustomNotification(
|
|
IN ICustomNotificationProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
virtual
|
|
VOID
|
|
Terminate(
|
|
VOID
|
|
) = 0;
|
|
|
|
// GL_THREAD_CLEANUP
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalThreadCleanup(
|
|
IN IGlobalThreadCleanupProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
// GL_APPLICATION_PRELOAD
|
|
|
|
virtual
|
|
GLOBAL_NOTIFICATION_STATUS
|
|
OnGlobalApplicationPreload(
|
|
IN IGlobalApplicationPreloadProvider * pProvider
|
|
)
|
|
{
|
|
UNREFERENCED_PARAMETER( pProvider );
|
|
OutputDebugStringA(
|
|
"This module subscribed to event "
|
|
__FUNCTION__
|
|
" but did not override the method in its CGlobalModule implementation."
|
|
" Please check the method signature to make sure it matches the corresponding method.\n");
|
|
DebugBreak();
|
|
|
|
return GL_NOTIFICATION_CONTINUE;
|
|
}
|
|
|
|
};
|
|
|
|
class __declspec(uuid("85c1679c-0b21-491c-afb5-c7b5c86464c4"))
|
|
IModuleAllocator
|
|
{
|
|
public:
|
|
virtual
|
|
VOID *
|
|
AllocateMemory(
|
|
IN DWORD cbAllocation
|
|
) = 0;
|
|
};
|
|
|
|
class __declspec(uuid("ba32d330-9ea8-4b9e-89f1-8c76a323277f"))
|
|
IHttpModuleFactory
|
|
{
|
|
public:
|
|
virtual
|
|
HRESULT
|
|
GetHttpModule(
|
|
OUT CHttpModule ** ppModule,
|
|
IN IModuleAllocator * pAllocator
|
|
) = 0;
|
|
|
|
virtual
|
|
VOID
|
|
Terminate(
|
|
VOID
|
|
) = 0;
|
|
};
|
|
|
|
//
|
|
// Register-module descriptor
|
|
//
|
|
class __declspec(uuid("07e5beb3-b798-459d-a98a-e6c485b2b3bc"))
|
|
IHttpModuleRegistrationInfo
|
|
{
|
|
public:
|
|
virtual
|
|
PCWSTR
|
|
GetName(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HTTP_MODULE_ID
|
|
GetId(
|
|
VOID
|
|
) const = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetRequestNotifications(
|
|
IN IHttpModuleFactory * pModuleFactory,
|
|
IN DWORD dwRequestNotifications,
|
|
IN DWORD dwPostRequestNotifications
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetGlobalNotifications(
|
|
IN CGlobalModule * pGlobalModule,
|
|
IN DWORD dwGlobalNotifications
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetPriorityForRequestNotification(
|
|
IN DWORD dwRequestNotification,
|
|
IN PCWSTR pszPriority
|
|
) = 0;
|
|
|
|
virtual
|
|
HRESULT
|
|
SetPriorityForGlobalNotification(
|
|
IN DWORD dwGlobalNotification,
|
|
IN PCWSTR pszPriority
|
|
) = 0;
|
|
};
|
|
|
|
|
|
//
|
|
// Register Module entry point
|
|
//
|
|
|
|
typedef
|
|
HRESULT
|
|
(WINAPI * PFN_REGISTERMODULE)(
|
|
DWORD dwServerVersion,
|
|
IHttpModuleRegistrationInfo * pModuleInfo,
|
|
IHttpServer * pGlobalInfo
|
|
);
|
|
|
|
#define MODULE_REGISTERMODULE "RegisterModule"
|
|
|
|
#endif
|
|
|