wmiprovider.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / xsp / System / Web / Management / wmiprovider.cs / 1 / 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
    ////////////

    [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] 
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    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.
//------------------------------------------------------------------------------ 
// 
//     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
    ////////////

    [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] 
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK