Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Management / wmiprovider.cs / 1305376 / wmiprovider.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Management { using System.Configuration.Provider; using System.Collections.Specialized; using System.Web.Util; using System.Security.Principal; using System.Configuration; using System.Text; using System; using System.Globalization; using System.Web.UI; using System.Security.Permissions; //////////// // Events //////////// public class WmiWebEventProvider : WebEventProvider { public override void Initialize(string name, NameValueCollection config) { Debug.Trace("WmiWebEventProvider", "Initializing: name=" + name); int hr; hr = UnsafeNativeMethods.InitializeWmiManager(); if (hr != 0) { throw new ConfigurationErrorsException( SR.GetString(SR.Wmi_provider_cant_initialize, "0x" + hr.ToString("X8", CultureInfo.CurrentCulture))); } base.Initialize(name, config); ProviderUtil.CheckUnrecognizedAttributes(config, name); } string WmiFormatTime(DateTime dt) { // CIM DATETIME has this format: // yyyymmddHHMMSS.mmmmmmsUUU // where s = [+|-} // UUU = Three-digit offset indicating the number of minutes that the // originating time zone deviates from UTC. StringBuilder sb = new StringBuilder(26); sb.Append(dt.ToString("yyyyMMddHHmmss.ffffff", CultureInfo.InstalledUICulture)); double offset = TimeZone.CurrentTimeZone.GetUtcOffset(dt).TotalMinutes; if (offset >= 0) { sb.Append('+'); } sb.Append(offset); return sb.ToString(); } void FillBasicWmiDataFields(ref UnsafeNativeMethods.WmiData wmiData, WebBaseEvent eventRaised) { WebApplicationInformation appInfo = WebBaseEvent.ApplicationInformation; wmiData.eventType = (int)WebBaseEvent.WebEventTypeFromWebEvent(eventRaised); // Note: WMI sint64 requires a string param // Data contained in WebBaseEvent wmiData.eventCode = eventRaised.EventCode; wmiData.eventDetailCode = eventRaised.EventDetailCode; wmiData.eventTime = WmiFormatTime(eventRaised.EventTime); wmiData.eventMessage = eventRaised.Message; wmiData.sequenceNumber = eventRaised.EventSequence.ToString(CultureInfo.InstalledUICulture); wmiData.occurrence = eventRaised.EventOccurrence.ToString(CultureInfo.InstalledUICulture); wmiData.eventId = eventRaised.EventID.ToString("N", CultureInfo.InstalledUICulture); wmiData.appDomain = appInfo.ApplicationDomain; wmiData.trustLevel = appInfo.TrustLevel; wmiData.appVirtualPath = appInfo.ApplicationVirtualPath; wmiData.appPath = appInfo.ApplicationPath; wmiData.machineName = appInfo.MachineName; if (eventRaised.IsSystemEvent) { wmiData.details = String.Empty; } else { WebEventFormatter formatter = new WebEventFormatter(); eventRaised.FormatCustomEventDetails(formatter); wmiData.details = formatter.ToString(); } } void FillRequestWmiDataFields(ref UnsafeNativeMethods.WmiData wmiData, WebRequestInformation reqInfo) { string user; string authType; bool authed; IPrincipal iprincipal = reqInfo.Principal; if (iprincipal == null) { user = String.Empty; authType = String.Empty; authed = false; } else { IIdentity id = iprincipal.Identity; user = id.Name; authed = id.IsAuthenticated; authType = id.AuthenticationType; } wmiData.requestUrl = reqInfo.RequestUrl; wmiData.requestPath = reqInfo.RequestPath; wmiData.userHostAddress = reqInfo.UserHostAddress; wmiData.userName = user; wmiData.userAuthenticated = authed; wmiData.userAuthenticationType = authType; wmiData.requestThreadAccountName = reqInfo.ThreadAccountName; } void FillErrorWmiDataFields(ref UnsafeNativeMethods.WmiData wmiData, WebThreadInformation threadInfo) { wmiData.threadId = threadInfo.ThreadID; wmiData.threadAccountName = threadInfo.ThreadAccountName; wmiData.stackTrace = threadInfo.StackTrace; wmiData.isImpersonating = threadInfo.IsImpersonating; } public override void ProcessEvent(WebBaseEvent eventRaised) { Debug.Trace("WmiWebEventProvider", "ProcessEvent: event=" + eventRaised.GetType().Name); UnsafeNativeMethods.WmiData wmiData = new UnsafeNativeMethods.WmiData(); // Note: WMI sint64 requires a string param FillBasicWmiDataFields(ref wmiData, eventRaised); if (eventRaised is WebApplicationLifetimeEvent) { // Nothing special for this class. } if (eventRaised is WebManagementEvent) { WebProcessInformation processEventInfo = ((WebManagementEvent)eventRaised).ProcessInformation; wmiData.processId = processEventInfo.ProcessID; wmiData.processName = processEventInfo.ProcessName; wmiData.accountName = processEventInfo.AccountName; } if (eventRaised is WebRequestEvent) { FillRequestWmiDataFields(ref wmiData, ((WebRequestEvent)eventRaised).RequestInformation); } if (eventRaised is WebAuditEvent) { FillRequestWmiDataFields(ref wmiData, ((WebAuditEvent)eventRaised).RequestInformation); } if (eventRaised is WebAuthenticationSuccessAuditEvent) { wmiData.nameToAuthenticate = ((WebAuthenticationSuccessAuditEvent)eventRaised).NameToAuthenticate; } if (eventRaised is WebAuthenticationFailureAuditEvent) { wmiData.nameToAuthenticate = ((WebAuthenticationFailureAuditEvent)eventRaised).NameToAuthenticate; } if (eventRaised is WebViewStateFailureAuditEvent) { ViewStateException vse = ((WebViewStateFailureAuditEvent)eventRaised).ViewStateException; wmiData.exceptionMessage = SR.GetString(vse.ShortMessage); wmiData.remoteAddress = vse.RemoteAddress; wmiData.remotePort = vse.RemotePort; wmiData.userAgent = vse.UserAgent; wmiData.persistedState = vse.PersistedState; wmiData.referer = vse.Referer; wmiData.path = vse.Path; } if (eventRaised is WebHeartbeatEvent) { #if DBG try { #endif WebHeartbeatEvent hbEvent = eventRaised as WebHeartbeatEvent; WebProcessStatistics procStats = hbEvent.ProcessStatistics; wmiData.processStartTime = WmiFormatTime(procStats.ProcessStartTime); wmiData.threadCount = procStats.ThreadCount; wmiData.workingSet = procStats.WorkingSet.ToString(CultureInfo.InstalledUICulture); wmiData.peakWorkingSet = procStats.PeakWorkingSet.ToString(CultureInfo.InstalledUICulture); wmiData.managedHeapSize = procStats.ManagedHeapSize.ToString(CultureInfo.InstalledUICulture); wmiData.appdomainCount = procStats.AppDomainCount; wmiData.requestsExecuting = procStats.RequestsExecuting; wmiData.requestsQueued = procStats.RequestsQueued; wmiData.requestsRejected = procStats.RequestsRejected; #if DBG } catch (Exception e) { Debug.Trace("WmiWebEventProvider", e.ToString()); throw; } #endif } if (eventRaised is WebBaseErrorEvent) { Exception exception = ((WebBaseErrorEvent)eventRaised).ErrorException; if (exception == null) { wmiData.exceptionType = String.Empty; wmiData.exceptionMessage = String.Empty; } else { wmiData.exceptionType = exception.GetType().Name; wmiData.exceptionMessage = exception.Message; } } if (eventRaised is WebRequestErrorEvent) { WebRequestErrorEvent reEvent = eventRaised as WebRequestErrorEvent; WebRequestInformation reqInfo = reEvent.RequestInformation; WebThreadInformation threadInfo = reEvent.ThreadInformation; FillRequestWmiDataFields(ref wmiData, reqInfo); FillErrorWmiDataFields(ref wmiData, threadInfo); } if (eventRaised is WebErrorEvent) { WebErrorEvent eEvent = eventRaised as WebErrorEvent; WebRequestInformation reqInfo = eEvent.RequestInformation; WebThreadInformation threadInfo = eEvent.ThreadInformation; FillRequestWmiDataFields(ref wmiData, reqInfo); FillErrorWmiDataFields(ref wmiData, threadInfo); } int hr = UnsafeNativeMethods.RaiseWmiEvent(ref wmiData, AspCompatApplicationStep.IsInAspCompatMode); if (hr != 0) { throw new HttpException(SR.GetString(SR.Wmi_provider_error, "0x" + hr.ToString("X8", CultureInfo.InstalledUICulture))); } } public override void Flush() { } public override void Shutdown() { } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ThaiBuddhistCalendar.cs
- DurableOperationContext.cs
- IdentityNotMappedException.cs
- MetadataSource.cs
- DispatcherEventArgs.cs
- DbModificationClause.cs
- Vector3DCollection.cs
- FormViewModeEventArgs.cs
- TrustManagerMoreInformation.cs
- Table.cs
- SmiXetterAccessMap.cs
- GeneralTransform3DGroup.cs
- MonitoringDescriptionAttribute.cs
- WebResponse.cs
- PersonalizableAttribute.cs
- AppSettingsReader.cs
- TraceUtility.cs
- InkCollectionBehavior.cs
- XmlBinaryWriter.cs
- HighlightOverlayGlyph.cs
- OdbcUtils.cs
- SafeRightsManagementHandle.cs
- ObjectComplexPropertyMapping.cs
- DefaultPropertyAttribute.cs
- RoleManagerEventArgs.cs
- LabelLiteral.cs
- _Win32.cs
- PropertyMetadata.cs
- DocumentPage.cs
- DataBoundControlAdapter.cs
- LinqDataView.cs
- GregorianCalendarHelper.cs
- Opcode.cs
- StatusBarItem.cs
- X509Utils.cs
- Guid.cs
- XmlEnumAttribute.cs
- ContentOperations.cs
- _PooledStream.cs
- RuntimeIdentifierPropertyAttribute.cs
- ListViewHitTestInfo.cs
- XmlSchemaComplexType.cs
- EntitySqlQueryBuilder.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- ContentPropertyAttribute.cs
- ClientApiGenerator.cs
- LocationReferenceValue.cs
- AmbientValueAttribute.cs
- DataGridViewCheckBoxCell.cs
- ContainerFilterService.cs
- BaseInfoTable.cs
- securitycriticaldata.cs
- ThemeableAttribute.cs
- CollectionConverter.cs
- StructuredTypeInfo.cs
- ReflectionUtil.cs
- HttpBrowserCapabilitiesWrapper.cs
- Model3D.cs
- DefinitionUpdate.cs
- KeyGestureValueSerializer.cs
- BamlLocalizationDictionary.cs
- FilterException.cs
- CompoundFileReference.cs
- WebExceptionStatus.cs
- XmlToDatasetMap.cs
- RsaElement.cs
- DataTrigger.cs
- DBPropSet.cs
- MeshGeometry3D.cs
- DSASignatureFormatter.cs
- XamlFilter.cs
- ResourceSet.cs
- QueryExpression.cs
- ResolveNameEventArgs.cs
- Visual3D.cs
- Variant.cs
- MasterPageBuildProvider.cs
- BooleanKeyFrameCollection.cs
- MulticastDelegate.cs
- StateMachineAction.cs
- MaskDescriptor.cs
- AbsoluteQuery.cs
- ListManagerBindingsCollection.cs
- AspNetHostingPermission.cs
- MethodCallExpression.cs
- HwndStylusInputProvider.cs
- TypeSystemHelpers.cs
- Html32TextWriter.cs
- XmlAttributeProperties.cs
- SslStreamSecurityBindingElement.cs
- IFormattable.cs
- StartUpEventArgs.cs
- ConnectionManagementElementCollection.cs
- COM2IProvidePropertyBuilderHandler.cs
- DataRecordObjectView.cs
- CodeCommentStatement.cs
- DataRow.cs
- AspCompat.cs
- ForEachAction.cs
- HttpHandlersSection.cs