mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
386 lines
9.4 KiB
386 lines
9.4 KiB
/*++
|
|
|
|
Copyright (c) 1998-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
cgroup.h
|
|
|
|
Abstract:
|
|
|
|
The public definition of config group interfaces.
|
|
|
|
Author:
|
|
|
|
Paul McDaniel (paulmcd) 11-Jan-1999
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _CGROUP_H_
|
|
#define _CGROUP_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
//
|
|
// Forwarders.
|
|
//
|
|
|
|
typedef struct _UL_CONNECTION_COUNT_ENTRY *PUL_CONNECTION_COUNT_ENTRY;
|
|
typedef struct _UL_CG_URL_TREE_HEADER *PUL_CG_URL_TREE_HEADER;
|
|
typedef struct _UL_CG_URL_TREE_ENTRY *PUL_CG_URL_TREE_ENTRY;
|
|
typedef struct _UL_CONTROL_CHANNEL *PUL_CONTROL_CHANNEL;
|
|
typedef struct _UL_APP_POOL_OBJECT *PUL_APP_POOL_OBJECT;
|
|
typedef struct _UL_INTERNAL_RESPONSE *PUL_INTERNAL_RESPONSE;
|
|
typedef struct _UL_LOG_FILE_ENTRY *PUL_LOG_FILE_ENTRY;
|
|
typedef struct _UL_SITE_COUNTER_ENTRY *PUL_SITE_COUNTER_ENTRY;
|
|
typedef struct _UL_HTTP_CONNECTION *PUL_HTTP_CONNECTION;
|
|
|
|
//
|
|
// Kernel mode mappings to the user mode set defined in ulapi.h :
|
|
//
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlCreateConfigGroup(
|
|
IN PUL_CONTROL_CHANNEL pControlChannel,
|
|
OUT HTTP_CONFIG_GROUP_ID * pConfigGroupId
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlDeleteConfigGroup(
|
|
IN HTTP_CONFIG_GROUP_ID ConfigGroupId
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlAddUrlToConfigGroup(
|
|
IN HTTP_CONFIG_GROUP_ID ConfigGroupId,
|
|
IN PUNICODE_STRING pUrl,
|
|
IN HTTP_URL_CONTEXT UrlContext
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlRemoveUrlFromConfigGroup(
|
|
IN HTTP_CONFIG_GROUP_ID ConfigGroupId,
|
|
IN PUNICODE_STRING pUrl
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlRemoveAllUrlsFromConfigGroup(
|
|
IN HTTP_CONFIG_GROUP_ID ConfigGroupId
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlAddTransientUrl(
|
|
PUL_APP_POOL_OBJECT pAppPool,
|
|
PUNICODE_STRING pUrl
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlRemoveTransientUrl(
|
|
PUL_APP_POOL_OBJECT pAppPool,
|
|
PUNICODE_STRING pUrl
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlQueryConfigGroupInformation(
|
|
IN HTTP_CONFIG_GROUP_ID ConfigGroupId,
|
|
IN HTTP_CONFIG_GROUP_INFORMATION_CLASS InformationClass,
|
|
IN PVOID pConfigGroupInformation,
|
|
IN ULONG Length,
|
|
OUT PULONG pReturnLength OPTIONAL
|
|
);
|
|
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlSetConfigGroupInformation(
|
|
IN HTTP_CONFIG_GROUP_ID ConfigGroupId,
|
|
IN HTTP_CONFIG_GROUP_INFORMATION_CLASS InformationClass,
|
|
IN PVOID pConfigGroupInformation,
|
|
IN ULONG Length
|
|
);
|
|
|
|
//
|
|
// This structure represents an internal cfg group object. These are linked
|
|
// and owned by control channels via a LIST_ENTRY list.
|
|
//
|
|
|
|
#define IS_VALID_CONFIG_GROUP(pObject) \
|
|
(((pObject) != NULL) && ((pObject)->Signature == UL_CG_OBJECT_POOL_TAG))
|
|
|
|
|
|
typedef struct _UL_CONFIG_GROUP_OBJECT
|
|
{
|
|
|
|
//
|
|
// PagedPool
|
|
//
|
|
|
|
ULONG Signature; // UL_CG_OBJECT_POOL_TAG
|
|
|
|
LONG RefCount;
|
|
|
|
HTTP_CONFIG_GROUP_ID ConfigGroupId;
|
|
|
|
UL_NOTIFY_ENTRY HandleEntry; // Links us to an apool or
|
|
// control channel handle
|
|
|
|
UL_NOTIFY_ENTRY ParentEntry; // Links transient groups
|
|
// to their static parents
|
|
|
|
UL_NOTIFY_HEAD ChildHead; // Links transient children
|
|
// into this group
|
|
|
|
LIST_ENTRY ControlChannelEntry;// Links into the
|
|
// control channel
|
|
|
|
PUL_CONTROL_CHANNEL pControlChannel; // the control channel
|
|
|
|
LIST_ENTRY UrlListHead; // Links UL_CG_URL_TREE_ENTRY
|
|
// into this group
|
|
|
|
HTTP_PROPERTY_FLAGS AppPoolFlags;
|
|
PUL_APP_POOL_OBJECT pAppPool; // Maps to our app
|
|
// pool.
|
|
|
|
PUL_INTERNAL_RESPONSE pAutoResponse; // The kernel version
|
|
// of the auto-response.
|
|
|
|
HTTP_CONFIG_GROUP_MAX_BANDWIDTH MaxBandwidth; // Applies all the flows below
|
|
|
|
LIST_ENTRY FlowListHead; // Links our flows to us so we can
|
|
// do a faster lookup and cleanup.
|
|
|
|
HTTP_CONFIG_GROUP_MAX_CONNECTIONS MaxConnections;
|
|
|
|
PUL_CONNECTION_COUNT_ENTRY pConnectionCountEntry;
|
|
|
|
HTTP_CONFIG_GROUP_STATE State; // The current state
|
|
// (active, etc.)
|
|
|
|
HTTP_CONFIG_GROUP_SECURITY Security; // Security descriptor for
|
|
// transient registrations
|
|
|
|
|
|
HTTP_CONFIG_GROUP_LOGGING LoggingConfig; // logging config for the
|
|
// site’s root app. //
|
|
|
|
PUL_LOG_FILE_ENTRY pLogFileEntry;
|
|
|
|
|
|
|
|
PUL_SITE_COUNTER_ENTRY pSiteCounters; // Perfmon Counters (ref'd)
|
|
|
|
LONGLONG ConnectionTimeout; // Connection Timeout override
|
|
// in 100ns ticks
|
|
|
|
|
|
} UL_CONFIG_GROUP_OBJECT, *PUL_CONFIG_GROUP_OBJECT;
|
|
|
|
//
|
|
// Public functions for config group objects:
|
|
//
|
|
|
|
//
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
|
|
VOID
|
|
UlReferenceConfigGroup(
|
|
IN PVOID pObject
|
|
REFERENCE_DEBUG_FORMAL_PARAMS
|
|
);
|
|
|
|
#define REFERENCE_CONFIG_GROUP( pConfigGroup ) \
|
|
UlReferenceConfigGroup( \
|
|
(pConfigGroup) \
|
|
REFERENCE_DEBUG_ACTUAL_PARAMS \
|
|
)
|
|
|
|
//
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
|
|
VOID
|
|
UlDereferenceConfigGroup(
|
|
PUL_CONFIG_GROUP_OBJECT pConfigGroup
|
|
REFERENCE_DEBUG_FORMAL_PARAMS
|
|
);
|
|
|
|
#define DEREFERENCE_CONFIG_GROUP( pConfigGroup ) \
|
|
UlDereferenceConfigGroup( \
|
|
(pConfigGroup) \
|
|
REFERENCE_DEBUG_ACTUAL_PARAMS \
|
|
)
|
|
|
|
//
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
HTTP_CONFIG_GROUP_ID
|
|
UlConfigGroupFromListEntry(
|
|
IN PLIST_ENTRY pControlChannelEntry
|
|
);
|
|
|
|
|
|
|
|
//
|
|
// This info is built for an URL, and returned from UlGetConfigGroupForUrl
|
|
//
|
|
|
|
#define IS_VALID_URL_CONFIG_GROUP_INFO(pInfo) \
|
|
(((pInfo) != NULL) && ((pInfo)->Signature == UL_CG_URL_INFO_POOL_TAG))
|
|
|
|
typedef struct _UL_URL_CONFIG_GROUP_INFO
|
|
{
|
|
//
|
|
// NonPagedPool
|
|
//
|
|
|
|
//
|
|
// UL_CG_URL_INFO_POOL_TAG
|
|
//
|
|
|
|
ULONG Signature;
|
|
|
|
//
|
|
// used by the cache mgr and need to be live from the
|
|
// real config group objects
|
|
//
|
|
|
|
PUL_CONFIG_GROUP_OBJECT pMaxBandwidth;
|
|
PUL_CONFIG_GROUP_OBJECT pMaxConnections;
|
|
PUL_CONNECTION_COUNT_ENTRY pConnectionCountEntry;
|
|
PUL_CONFIG_GROUP_OBJECT pCurrentState;
|
|
PUL_CONFIG_GROUP_OBJECT pLoggingConfig;
|
|
|
|
//
|
|
// Site Counters (ref'd)
|
|
//
|
|
ULONG SiteId;
|
|
PUL_SITE_COUNTER_ENTRY pSiteCounters;
|
|
|
|
//
|
|
// Connection Timeout (100ns Ticks)
|
|
//
|
|
LONGLONG ConnectionTimeout;
|
|
|
|
//
|
|
// used by the http engine routing to the app pool, no
|
|
// need to be live. copies work great.
|
|
//
|
|
|
|
HTTP_ENABLED_STATE CurrentState; // a copy of the above, for
|
|
// callers that don't need
|
|
// live access
|
|
PUL_CONTROL_CHANNEL pControlChannel;
|
|
|
|
HTTP_URL_CONTEXT UrlContext; // The context for the url.
|
|
// NULL = not set
|
|
|
|
PUL_APP_POOL_OBJECT pAppPool; // Points the app pool
|
|
// associated with this url
|
|
|
|
PUL_INTERNAL_RESPONSE pAutoResponse; // The kernel version of the
|
|
// auto-response.
|
|
|
|
} UL_URL_CONFIG_GROUP_INFO, *PUL_URL_CONFIG_GROUP_INFO;
|
|
|
|
//
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlGetConfigGroupInfoForUrl(
|
|
IN PWSTR pUrl,
|
|
IN PUL_HTTP_CONNECTION pHttpConn,
|
|
OUT PUL_URL_CONFIG_GROUP_INFO pInfo
|
|
);
|
|
|
|
//
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlInitializeCG(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
UlTerminateCG(
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
UlNotifyOrphanedConfigGroup(
|
|
IN PUL_NOTIFY_ENTRY pEntry,
|
|
IN PVOID pHost,
|
|
IN PVOID pv
|
|
);
|
|
|
|
//
|
|
// url info helpers
|
|
//
|
|
|
|
NTSTATUS
|
|
UlpSetUrlInfo(
|
|
IN OUT PUL_URL_CONFIG_GROUP_INFO pInfo,
|
|
IN PUL_CG_URL_TREE_ENTRY pMatchEntry
|
|
);
|
|
|
|
__inline
|
|
VOID
|
|
FASTCALL
|
|
UlpInitializeUrlInfo(
|
|
OUT PUL_URL_CONFIG_GROUP_INFO pInfo
|
|
)
|
|
{
|
|
ASSERT(pInfo != NULL);
|
|
|
|
RtlZeroMemory(
|
|
(PCHAR)pInfo,
|
|
sizeof(UL_URL_CONFIG_GROUP_INFO)
|
|
);
|
|
|
|
pInfo->Signature = UL_CG_URL_INFO_POOL_TAG;
|
|
pInfo->CurrentState = HttpEnabledStateInactive;
|
|
}
|
|
|
|
//
|
|
// IRQL == PASSIVE_LEVEL
|
|
//
|
|
NTSTATUS
|
|
UlpConfigGroupInfoRelease(
|
|
IN PUL_URL_CONFIG_GROUP_INFO pInfo
|
|
);
|
|
|
|
NTSTATUS
|
|
UlpConfigGroupInfoDeepCopy(
|
|
IN const PUL_URL_CONFIG_GROUP_INFO pOrigInfo,
|
|
IN OUT PUL_URL_CONFIG_GROUP_INFO pNewInfo
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}; // extern "C"
|
|
#endif
|
|
|
|
#endif // _CGROUP_H_
|