xpmgr/BuildTools/Include/httptrace.h

212 lines
6.3 KiB
C

#ifndef _HTTP_TRACE_H
#define _HTTP_TRACE_H
/*++
Copyright (c) 2005 Microsoft Corporation
Module Name:
httptrace.h
Abstract:
Definition of the event tracing structures for IIS
(applies for IIS version >= 7 )
--*/
//
// HTTP_TRACE_TYPE contains type that are supported by
// the IIS trace infrastructure.
// The enum values match the equivalent VARIANT types.
//
enum HTTP_TRACE_TYPE
{
HTTP_TRACE_TYPE_BYTE = 17, // mof type "uint8"
HTTP_TRACE_TYPE_USHORT = 18, // mof type "uint16"
HTTP_TRACE_TYPE_ULONG = 19, // mof type "uint32"
HTTP_TRACE_TYPE_ULONGLONG = 21, // mof type "uint64"
HTTP_TRACE_TYPE_CHAR = 16, // mof type "int8"
HTTP_TRACE_TYPE_SHORT = 2, // mof type "int16"
HTTP_TRACE_TYPE_LONG = 3, // mof type "int32"
HTTP_TRACE_TYPE_LONGLONG = 20, // mof type "int64"
HTTP_TRACE_TYPE_LPCWSTR = 31, // mof type string "w"
HTTP_TRACE_TYPE_LPCSTR = 30, // mof type string "a"
HTTP_TRACE_TYPE_LPCGUID = 72, // mof type object "Guid"
HTTP_TRACE_TYPE_BOOL = 11, // mof type object "boolean"
};
// bit values for the HTTP_TRACE_EVENT.dwFlags
//
// If HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS is set then
// consumers of the trace event can assume that
// pProviderGuid, pAreaGuid, pszEventName in the HTTP_TRACE_EVENT
// and pszName and pszDescription in each HTTP_TRACE_EVENT_ITEM
// entry are static (their memory is available throughout the
// process lifetime). If event needs to be buffered there is no need
// to copy values for these fields
//
#define HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS 0x01
//
// In addition to TRACE_LEVEL_FATAL - TRACE_LEVEL_VERBOSE
//
#define HTTP_TRACE_LEVEL_START 6
#define HTTP_TRACE_LEVEL_END 7
struct HTTP_TRACE_EVENT_ITEM;
//
// Each Trace event will need to be described with the HTTP_TRACE_EVENT structure.
// It is designed to contain all the information relevant to ETW,
// but ETW is not the only consumer
//
//
struct HTTP_TRACE_EVENT
{
//
// Trace Provider (such as "WWW Server")
//
LPCGUID pProviderGuid ;
//
// Trace Area Flag ( a bit flag that may represent area such as "Authentication")
//
DWORD dwArea;
//
// GUID equivalent to the Area Flag
//
LPCGUID pAreaGuid;
//
// ID of the event (in the ETW terminology this would be the Event Type)
//
DWORD dwEvent;
//
// String matching the event ID (dwEvent)
//
LPCWSTR pszEventName;
//
// Event version
//
DWORD dwEventVersion;
//
// Verbosity of the event ( General, FatalError, Error, Warning, Info, Verbose)
// In the ETW terminology this is the "event level"
DWORD dwVerbosity;
//
// Activity GUID. For the http request based event
// it may represent the request ID
//
LPCGUID pActivityGuid;
//
// Additional GUID to allow to associate
// multiple related activities
//
LPCGUID pRelatedActivityGuid;
//
// Optional timestamp (in GetTickCount() ticks )
// If set to 0 then system will fill in the TickCount.
//
DWORD dwTimeStamp;
//
// Flags (reserved: Set to 0)
//
DWORD dwFlags;
//
//
// Number of entries in the structured
// description of the event
// Note that the maximum allowed number of EventTraceItems
// should match the ETW internal limit of 16
//
DWORD cEventItems;
//
// Array of individual entries describing
// the event
//
__field_ecount(cEventItems) HTTP_TRACE_EVENT_ITEM * pEventItems;
};
// Each HTTP_TRACE_EVENT can have multiple items or elements that describe the event
// (for example the "GENERAL_REQUEST_START" event contains an item with the Request URL)
struct HTTP_TRACE_EVENT_ITEM
{
//
// Friendly name of the item (for example "RequestUrl")
//
LPCWSTR pszName;
//
// Data type that pbData is pointed to
//
HTTP_TRACE_TYPE dwDataType;
//
// Pointer to the actual data (needs to be casted based on the dwDataType)
// For example the HTTP_TRACE_EVENT_ITEM describing HTTP request URL would have
// the pbData pointing to the actual URL string
//
PBYTE pbData;
//
// # of bytes of the actual data (it should matter only for string types)
//
DWORD cbData;
//
// Additional description of the data - enumerations take advantage of this field
// (always set to NULL if not used)
//
LPCWSTR pszDataDescription;
};
//
// HTTP_TRACE_CONFIGURATION is used by both trace providers and trace consumers
// Trace consumers declare the TraceProviders and TraceAreas of the interest.
// Trace providers can retrieve what areas at what verbosity is allowed
// for a given provider
//
struct HTTP_TRACE_CONFIGURATION
{
LPCGUID pProviderGuid;
DWORD dwAreas;
DWORD dwVerbosity;
BOOL fProviderEnabled;
};
//
// Definiton of the GUIDs for the TRACE Providers that ship with IIS
// or are related to IIS
//
DEFINE_GUID( GUID_IIS_ALL_TRACE_PROVIDERS,
0x00000000,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);
DEFINE_GUID( GUID_IIS_WWW_SERVER_TRACE_PROVIDER,
0x3a2a4e84,0x4c21,0x4981,0xae,0x10,0x3f,0xda,0x0d,0x9b,0x0f,0x83);
// IIS V2(Crimson/Unified) trace provider
DEFINE_GUID( GUID_IIS_WWW_SERVER_V2_TRACE_PROVIDER,
0xde4649c9,0x15e8,0x4fea,0x9d,0x85,0x1c,0xdd,0xa5,0x20,0xc3,0x34);
// ETW name for the provider: "ASP.NET Events
DEFINE_GUID( GUID_IIS_ASPNET_TRACE_PROVIDER,
0xAFF081FE,0x0247,0x4275,0x9C,0x4E,0x02,0x1F,0x3D,0xC1,0xDA,0x35);
// ETW name for the provider: "IIS: Active Server Pages (ASP)"
DEFINE_GUID( GUID_IIS_ASP_TRACE_TRACE_PROVIDER,
0x06b94d9a,0xb15e,0x456e,0xa4,0xef,0x37,0xc9,0x84,0xa2,0xcb,0x4b);
DEFINE_GUID( GUID_IIS_WWW_GLOBAL_TRACE_PROVIDER,
0xd55d3bc9,0xcba9,0x44df,0x82,0x7e,0x13,0x2d,0x3a,0x45,0x96,0xc2);
// ETW name for the provider: "IIS: WWW Isapi Extension"
DEFINE_GUID( GUID_IIS_ISAPI_TRACE_PROVIDER,
0xa1c2040e,0x8840,0x4c31,0xba,0x11,0x98,0x71,0x03,0x1a,0x19,0xea);
#endif