EventLogPropertySelector.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Diagnostics / Eventing / Reader / EventLogPropertySelector.cs / 1305376 / EventLogPropertySelector.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
/*============================================================
** 
** Class: EventLogPropertySelector 
**
** Purpose: 
** Public class that encapsulates the information for fast
** access to Event Values of an EventLogRecord. Implements
** the EventPropertyContext abstract class.  An instance of this
** class is constructed and then passed to 
** EventLogRecord.GetEventPropertyValues.
** 
============================================================*/ 
using System;
using System.Collections.Generic; 
using Microsoft.Win32;

namespace System.Diagnostics.Eventing.Reader {
 
    /// 
    ///  Encapsulates the information for fast access to Event Values 
    ///  of an EventLogRecord.  An instance of this class is constructed 
    ///  and then passed to EventLogRecord.GetEventPropertyValues.
    ///  
    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
    public class EventLogPropertySelector : IDisposable {

        // 
        // access to the data member reference is safe, while
        // invoking methods on it is marked SecurityCritical as appropriate. 
        // 
        private EventLogHandle renderContextHandleValues;
 
        [System.Security.SecurityCritical]
        public EventLogPropertySelector(IEnumerable propertyQueries) {

            EventLogPermissionHolder.GetEventLogPermission().Demand(); 

            if (propertyQueries == null) 
                throw new ArgumentNullException("propertyQueries"); 

            string[] paths; 

            ICollection coll = propertyQueries as ICollection;
            if (coll != null) {
                paths = new string[coll.Count]; 
                coll.CopyTo(paths, 0);
            } 
            else { 
                List queries;
                queries = new List(propertyQueries); 
                paths = queries.ToArray();
            }

            renderContextHandleValues = NativeWrapper.EvtCreateRenderContext(paths.Length, paths, UnsafeNativeMethods.EvtRenderContextFlags.EvtRenderContextValues); 
        }
 
        internal EventLogHandle Handle { 
            // just returning reference to security critical type, the methods
            // of that type are protected by SecurityCritical as appropriate. 
            get {
                return renderContextHandleValues;
            }
        } 

        public void Dispose() { 
            Dispose(true); 
            GC.SuppressFinalize(this);
        } 

        [System.Security.SecuritySafeCritical]
        protected virtual void Dispose(bool disposing) {
            if (disposing) { 
                EventLogPermissionHolder.GetEventLogPermission().Demand();
            } 
            if (renderContextHandleValues != null && !renderContextHandleValues.IsInvalid) 
                renderContextHandleValues.Dispose();
        } 
    }
}

// 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