Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / EtwTrace.cs / 2 / EtwTrace.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* EtwTrace class
*/
namespace System.Web {
using System.Web.Hosting;
using System.Web.Util;
internal enum EtwTraceConfigType {
DOWNLEVEL = 0,
IIS7_ISAPI = 1,
IIS7_INTEGRATED = 2
}
internal enum EtwTraceType {
ETW_TYPE_START = 1,
ETW_TYPE_END = 2,
ETW_TYPE_REQ_QUEUED = 3,
ETW_TYPE_REQ_DEQUEUED = 4,
ETW_TYPE_GETAPPDOMAIN_ENTER = 5,
ETW_TYPE_GETAPPDOMAIN_LEAVE = 6,
ETW_TYPE_APPDOMAIN_ENTER = 7,
ETW_TYPE_START_HANDLER = 8,
ETW_TYPE_END_HANDLER = 9,
ETW_TYPE_PIPELINE_ENTER = 10,
ETW_TYPE_PIPELINE_LEAVE = 11,
ETW_TYPE_MAPHANDLER_ENTER = 12,
ETW_TYPE_MAPHANDLER_LEAVE = 13,
ETW_TYPE_PARSE_ENTER = 14,
ETW_TYPE_PARSE_LEAVE = 15,
ETW_TYPE_COMPILE_ENTER = 16,
ETW_TYPE_COMPILE_LEAVE = 17,
ETW_TYPE_HTTPHANDLER_ENTER = 18,
ETW_TYPE_HTTPHANDLER_LEAVE = 19,
ETW_TYPE_SESSIONSTATE_PARTITION_START = 20,
ETW_TYPE_SESSIONSTATE_PARTITION_END = 21,
ETW_TYPE_PAGE_PRE_INIT_ENTER = 22,
ETW_TYPE_PAGE_PRE_INIT_LEAVE = 23,
ETW_TYPE_PAGE_INIT_ENTER = 24,
ETW_TYPE_PAGE_INIT_LEAVE = 25,
ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER = 26,
ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE = 27,
ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER = 28,
ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE = 29,
ETW_TYPE_PAGE_LOAD_ENTER = 30,
ETW_TYPE_PAGE_LOAD_LEAVE = 31,
ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER = 32,
ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE = 33,
ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER = 34,
ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE = 35,
ETW_TYPE_PAGE_PRE_RENDER_ENTER = 36,
ETW_TYPE_PAGE_PRE_RENDER_LEAVE = 37,
ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER = 38,
ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE = 39,
ETW_TYPE_PAGE_RENDER_ENTER = 40,
ETW_TYPE_PAGE_RENDER_LEAVE = 41,
ETW_TYPE_SESSION_DATA_BEGIN = 42,
ETW_TYPE_SESSION_DATA_END = 43,
ETW_TYPE_PROFILE_BEGIN = 44,
ETW_TYPE_PROFILE_END = 45,
ETW_TYPE_ROLE_IS_USER_IN_ROLE = 46,
ETW_TYPE_ROLE_GET_USER_ROLES = 47,
ETW_TYPE_ROLE_BEGIN = 48,
ETW_TYPE_ROLE_END = 49,
ETW_TYPE_WEB_EVENT_RAISE_START = 50,
ETW_TYPE_WEB_EVENT_RAISE_END = 51,
ETW_TYPE_WEB_EVENT_DELIVER_START = 52,
ETW_TYPE_WEB_EVENT_DELIVER_END = 53
}
struct EtwTraceLevel {
internal const int None = 0;
internal const int Fatal = 1;
internal const int Error = 2;
internal const int Warning = 3;
internal const int Information = 4;
internal const int Verbose = 5;
}
struct EtwTraceFlags {
internal const int None = 0;
internal const int Infrastructure = 1;
internal const int Module = 2;
internal const int Page = 4;
internal const int AppSvc = 8;
}
// these need to match the definitions in
// mgdeng:mgdhandler.hxx
// the internal WorkerRequest trace helpers
// takes this enum as the type
internal enum IntegratedTraceType {
TraceWrite = 0,
TraceWarn = 1,
DiagCritical = 2,
DiagError = 3,
DiagWarning = 4,
DiagInfo = 5,
DiagVerbose = 6,
DiagStart = 7,
DiagStop = 8,
DiagSuspend = 9,
DiagResume = 10,
DiagTransfer = 11,
}
internal enum EtwWorkerRequestType {
Undefined = -1,
InProc = 0,
OutOfProc = 1,
IIS7Integrated = 3,
Unknown = 999
}
internal static class EtwTrace {
private static int _traceLevel = 0;
private static int _traceFlags = 0;
private static EtwWorkerRequestType s_WrType = EtwWorkerRequestType.Undefined;
internal static int InferVerbosity(IntegratedTraceType traceType) {
int verbosity = EtwTraceLevel.Verbose;
switch (traceType) {
case IntegratedTraceType.TraceWrite:
verbosity = EtwTraceLevel.Verbose;
break;
case IntegratedTraceType.TraceWarn:
verbosity = EtwTraceLevel.Warning;
break;
case IntegratedTraceType.DiagCritical:
verbosity = EtwTraceLevel.Fatal;
break;
case IntegratedTraceType.DiagWarning:
verbosity = EtwTraceLevel.Warning;
break;
case IntegratedTraceType.DiagError:
verbosity = EtwTraceLevel.Error;
break;
case IntegratedTraceType.DiagInfo:
verbosity = EtwTraceLevel.Information;
break;
case IntegratedTraceType.DiagVerbose:
verbosity = EtwTraceLevel.Verbose;
break;
case IntegratedTraceType.DiagStart:
verbosity = EtwTraceLevel.None;
break;
case IntegratedTraceType.DiagStop:
verbosity = EtwTraceLevel.None;
break;
case IntegratedTraceType.DiagResume:
verbosity = EtwTraceLevel.None;
break;
case IntegratedTraceType.DiagSuspend:
verbosity = EtwTraceLevel.None;
break;
case IntegratedTraceType.DiagTransfer:
verbosity = EtwTraceLevel.None;
break;
default:
verbosity = EtwTraceLevel.Verbose;
break;
}
return verbosity;
}
internal static bool IsTraceEnabled(int level, int flag) {
if (level < _traceLevel && ((flag & _traceFlags) != EtwTraceFlags.None))
return true;
return false;
}
private static void ResolveWorkerRequestType(HttpWorkerRequest workerRequest)
{
if (workerRequest is IIS7WorkerRequest) {
s_WrType = EtwWorkerRequestType.IIS7Integrated;
}
else if (workerRequest is ISAPIWorkerRequestInProc) {
s_WrType = EtwWorkerRequestType.InProc;
}
else if (workerRequest is ISAPIWorkerRequestOutOfProc){
s_WrType = EtwWorkerRequestType.OutOfProc;
}
else {
s_WrType = EtwWorkerRequestType.Unknown;
}
}
internal static void TraceEnableCheck(EtwTraceConfigType configType, IntPtr p)
{
// Don't activate if webengine.dll isn't loaded
if (!HttpRuntime.IsEngineLoaded)
return;
switch (configType) {
case EtwTraceConfigType.IIS7_INTEGRATED:
bool f;
UnsafeIISMethods.MgdEtwGetTraceConfig(p /*pRequestContext*/, out f, out _traceFlags, out _traceLevel);
break;
case EtwTraceConfigType.IIS7_ISAPI:
int[] contentInfo = new int[3];
UnsafeNativeMethods.EcbGetTraceFlags(p /*pECB*/, contentInfo);
_traceFlags = contentInfo[0];
_traceLevel = contentInfo[1];
break;
case EtwTraceConfigType.DOWNLEVEL:
UnsafeNativeMethods.GetEtwValues(out _traceLevel, out _traceFlags);
break;
default:
break;
}
}
internal static void Trace(EtwTraceType traceType, HttpWorkerRequest workerRequest)
{
Trace(traceType, workerRequest, null, null);
}
internal static void Trace(EtwTraceType traceType, HttpWorkerRequest workerRequest, string data1)
{
Trace(traceType, workerRequest, data1, null, null, null);
}
internal static void Trace(EtwTraceType traceType, HttpWorkerRequest workerRequest, string data1, string data2)
{
Trace(traceType, workerRequest, data1, data2, null, null);
}
internal static void Trace(EtwTraceType traceType, HttpWorkerRequest workerRequest, string data1, string data2, string data3, string data4)
{
if (s_WrType == EtwWorkerRequestType.Undefined) {
ResolveWorkerRequestType(workerRequest);
}
if (s_WrType == EtwWorkerRequestType.Unknown)
return;
if (workerRequest == null)
return;
if (s_WrType == EtwWorkerRequestType.IIS7Integrated) {
UnsafeNativeMethods.TraceRaiseEventMgdHandler((int) traceType, ((IIS7WorkerRequest)workerRequest).RequestContext, data1, data2, data3, data4);
}
else if (s_WrType == EtwWorkerRequestType.InProc) {
UnsafeNativeMethods.TraceRaiseEventWithEcb((int) traceType, ((ISAPIWorkerRequest)workerRequest).Ecb, data1, data2, data3, data4);
}
else if (s_WrType == EtwWorkerRequestType.OutOfProc) {
UnsafeNativeMethods.PMTraceRaiseEvent((int) traceType, ((ISAPIWorkerRequest)workerRequest).Ecb, data1, data2, data3, data4);
}
}
internal static void Trace(EtwTraceType traceType, IntPtr ecb, string data1, string data2, bool inProc)
{
if (inProc)
UnsafeNativeMethods.TraceRaiseEventWithEcb((int) traceType, ecb, data1, data2, null, null);
else
UnsafeNativeMethods.PMTraceRaiseEvent((int) traceType, ecb, data1, data2, null, null);
}
};
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MulticastIPAddressInformationCollection.cs
- ConnectionOrientedTransportChannelListener.cs
- VisualTreeUtils.cs
- TypeUnloadedException.cs
- DetailsViewDeleteEventArgs.cs
- InternalsVisibleToAttribute.cs
- NumberAction.cs
- InstanceLockedException.cs
- SrgsGrammarCompiler.cs
- securestring.cs
- TableFieldsEditor.cs
- MenuCommand.cs
- DecimalStorage.cs
- StaticSiteMapProvider.cs
- Context.cs
- SaveFileDialog.cs
- DefaultConfirmation.cs
- ObjectMemberMapping.cs
- TransformerTypeCollection.cs
- DetailsViewUpdatedEventArgs.cs
- PageCache.cs
- TypeToTreeConverter.cs
- oledbconnectionstring.cs
- TextServicesContext.cs
- GeneralTransform3DGroup.cs
- MethodBuilder.cs
- MenuItem.cs
- XmlUTF8TextReader.cs
- MaskInputRejectedEventArgs.cs
- FileLoadException.cs
- RIPEMD160.cs
- SqlConnectionFactory.cs
- EditBehavior.cs
- XmlResolver.cs
- Win32Interop.cs
- ImageMapEventArgs.cs
- CompositeActivityTypeDescriptorProvider.cs
- GregorianCalendarHelper.cs
- ContentPosition.cs
- ConstructorBuilder.cs
- ItemsPanelTemplate.cs
- GregorianCalendarHelper.cs
- BulletChrome.cs
- ObjectDisposedException.cs
- MimeMapping.cs
- UIElement3D.cs
- GregorianCalendarHelper.cs
- XmlEnumAttribute.cs
- PointValueSerializer.cs
- LowerCaseStringConverter.cs
- TemplateBaseAction.cs
- ReflectPropertyDescriptor.cs
- MatrixTransform3D.cs
- TemplateBindingExpression.cs
- ConstantSlot.cs
- DeleteMemberBinder.cs
- TransactionManager.cs
- PageCatalogPart.cs
- SchemaMerger.cs
- RijndaelManagedTransform.cs
- XmlTextReader.cs
- URLAttribute.cs
- XmlSchemaInclude.cs
- UnsafeCollabNativeMethods.cs
- RefreshPropertiesAttribute.cs
- NativeMethods.cs
- ADRoleFactory.cs
- UIElementParagraph.cs
- COSERVERINFO.cs
- ProjectionPruner.cs
- ConstructorArgumentAttribute.cs
- ImageIndexConverter.cs
- GridProviderWrapper.cs
- ConcatQueryOperator.cs
- FileAuthorizationModule.cs
- GridLength.cs
- TransportBindingElement.cs
- TemplateAction.cs
- MobileRedirect.cs
- CategoryNameCollection.cs
- ElementHost.cs
- GridViewColumnCollectionChangedEventArgs.cs
- XMLUtil.cs
- RemoveStoryboard.cs
- srgsitem.cs
- UrlMappingsSection.cs
- HtmlInputReset.cs
- InvokeSchedule.cs
- StringHandle.cs
- StateChangeEvent.cs
- TextEffect.cs
- XmlQueryCardinality.cs
- DictionarySectionHandler.cs
- InstallerTypeAttribute.cs
- ClientRolePrincipal.cs
- BaseProcessor.cs
- CqlGenerator.cs
- ValuePattern.cs
- IdnMapping.cs
- OrderByBuilder.cs