diff --git a/assets/files.wxs b/assets/files.wxs index 86fbe7ac4d..5e9cb96970 100644 --- a/assets/files.wxs +++ b/assets/files.wxs @@ -3042,6 +3042,15 @@ + + + + + + + + + @@ -3876,6 +3885,9 @@ + + + diff --git a/build.psm1 b/build.psm1 index 20e67b4472..7e6e21bb21 100644 --- a/build.psm1 +++ b/build.psm1 @@ -2191,7 +2191,6 @@ function Start-CrossGen { "Microsoft.PowerShell.Commands.Utility.dll", "Microsoft.PowerShell.Commands.Management.dll", "Microsoft.PowerShell.Security.dll", - "Microsoft.PowerShell.CoreCLR.Eventing.dll", "Microsoft.PowerShell.ConsoleHost.dll", "System.Management.Automation.dll" ) @@ -2199,6 +2198,7 @@ function Start-CrossGen { # Add Windows specific libraries if ($Environment.IsWindows) { $psCoreAssemblyList += @( + "Microsoft.PowerShell.CoreCLR.Eventing.dll", "Microsoft.WSMan.Management.dll", "Microsoft.WSMan.Runtime.dll", "Microsoft.PowerShell.Commands.Diagnostics.dll", diff --git a/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj b/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj index f69a49c55b..09a7c35452 100644 --- a/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj +++ b/src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj @@ -27,4 +27,9 @@ + + + + + diff --git a/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj b/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj index 67503da2cf..e53680cc23 100644 --- a/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj +++ b/src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj @@ -57,7 +57,7 @@ - + diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventBookmark.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventBookmark.cs deleted file mode 100644 index bc937391a2..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventBookmark.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class represents an opaque Event Bookmark obtained -** from an EventRecord. The bookmark denotes a unique identifier -** for the event instance as well as marks the location in the -** the result set of the EventReader that the event instance was -** obtained from. -** -============================================================*/ - -namespace System.Diagnostics.Eventing.Reader -{ - // - // NOTE: This class must be generic enough to be used across - // eventing base implementations. Cannot add anything - // that ties it to one particular implementation. - // - - /// - /// Represents an opaque Event Bookmark obtained from an EventRecord. - /// The bookmark denotes a unique identifier for the event instance as - /// well as marks the location in the the result set of the EventReader - /// that the event instance was obtained from. - /// - public class EventBookmark - { - private string _bookmark; - - internal EventBookmark(string bookmarkText) - { - if (bookmarkText == null) - throw new ArgumentNullException("bookmarkText"); - _bookmark = bookmarkText; - } - - internal string BookmarkText { get { return _bookmark; } } - } -} - diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventKeyword.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventKeyword.cs deleted file mode 100644 index bc4d3c701a..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventKeyword.cs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes the metadata for a specific Keyword -** defined by a Provider. An instance of this class is obtained from -** a ProviderMetadata object. -** -============================================================*/ - -using System.Collections.Generic; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Describes the metadata for a specific Keyword defined by a Provider. - /// An instance of this class is obtained from a ProviderMetadata object. - /// - public sealed class EventKeyword - { - private long _value; - private string _name; - private string _displayName; - private bool _dataReady; - private ProviderMetadata _pmReference; - private object _syncObject; - - // called from EventMetadata - internal EventKeyword(long value, ProviderMetadata pmReference) - { - _value = value; - _pmReference = pmReference; - _syncObject = new object(); - } - - // called from ProviderMetadata - internal EventKeyword(string name, long value, string displayName) - { - _value = value; - _name = name; - _displayName = displayName; - _dataReady = true; - _syncObject = new object(); - } - - internal void PrepareData() - { - if (_dataReady == true) return; - - lock (_syncObject) - { - if (_dataReady == true) return; - - IEnumerable result = _pmReference.Keywords; - - _name = null; - _displayName = null; - _dataReady = true; - - foreach (EventKeyword key in result) - { - if (key.Value == _value) - { - _name = key.Name; - _displayName = key.DisplayName; - break; - } - } - } - } - - public string Name - { - get - { - PrepareData(); - return _name; - } - } - - public long Value - { - get - { - return _value; - } - } - - public string DisplayName - { - get - { - PrepareData(); - return _displayName; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLevel.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLevel.cs deleted file mode 100644 index 795891e1fa..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLevel.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes the metadata for a specific Level -** defined by a Provider. An instance of this class is obtained from -** a ProviderMetadata object. -** -============================================================*/ - -using System.Collections.Generic; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Describes the metadata for a specific Level defined by a Provider. - /// An instance of this class is obtained from a ProviderMetadata object. - /// - public sealed class EventLevel - { - private int _value; - private string _name; - private string _displayName; - private bool _dataReady; - private ProviderMetadata _pmReference; - private object _syncObject; - - // called from EventMetadata - internal EventLevel(int value, ProviderMetadata pmReference) - { - _value = value; - _pmReference = pmReference; - _syncObject = new object(); - } - - // called from ProviderMetadata - internal EventLevel(string name, int value, string displayName) - { - _value = value; - _name = name; - _displayName = displayName; - _dataReady = true; - _syncObject = new object(); - } - - internal void PrepareData() - { - if (_dataReady == true) return; - - lock (_syncObject) - { - if (_dataReady == true) return; - - IEnumerable result = _pmReference.Levels; - _name = null; - _displayName = null; - _dataReady = true; - foreach (EventLevel lev in result) - { - if (lev.Value == _value) - { - _name = lev.Name; - _displayName = lev.DisplayName; - break; - } - } - } - } - - public string Name - { - get - { - PrepareData(); - return _name; - } - } - - public int Value - { - get - { - return _value; - } - } - - public string DisplayName - { - get - { - PrepareData(); - return _displayName; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogConfiguration.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogConfiguration.cs deleted file mode 100644 index 52a91ca680..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogConfiguration.cs +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class allows accessing static channel information and -** configures channel publishing and logging properties. An instance -** of this class is obtained from EventLogManagement class. -** -============================================================*/ - -using System.Collections.Generic; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Log Type. - /// - public enum EventLogType - { - Administrative = 0, - Operational, - Analytical, - Debug - } - - /// - /// Log Isolation. - /// - public enum EventLogIsolation - { - Application = 0, - System, - Custom - } - - /// - /// Log Mode. - /// - public enum EventLogMode - { - Circular = 0, - AutoBackup, - Retain - } - - /// - /// Provides access to static log information and configures - /// log publishing and log file properties. - /// - public class EventLogConfiguration : IDisposable - { - // - // access to the data member reference is safe, while - // invoking methods on it is marked SecurityCritical as appropriate. - // - private EventLogHandle _handle = EventLogHandle.Zero; - - private EventLogSession _session = null; - private string _channelName; - - public EventLogConfiguration(string logName) : this(logName, null) { } - - // marked as SecurityCritical because allocates SafeHandles. - // marked as Safe because performs Demand check. - [System.Security.SecurityCritical] - public EventLogConfiguration(string logName, EventLogSession session) - { - if (session == null) - session = EventLogSession.GlobalSession; - - _session = session; - _channelName = logName; - - _handle = NativeWrapper.EvtOpenChannelConfig(_session.Handle, _channelName, 0); - } - - public string LogName - { - get - { - return _channelName; - } - } - - public EventLogType LogType - { - get - { - return (EventLogType)((uint)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigType)); - } - } - - public EventLogIsolation LogIsolation - { - get - { - return (EventLogIsolation)((uint)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigIsolation)); - } - } - - public bool IsEnabled - { - get - { - return (bool)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigEnabled); - } - - set - { - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigEnabled, (object)value); - } - } - - public bool IsClassicLog - { - get - { - return (bool)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigClassicEventlog); - } - } - - public string SecurityDescriptor - { - get - { - return (string)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigAccess); - } - - set - { - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigAccess, (object)value); - } - } - - public string LogFilePath - { - get - { - return (string)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigLogFilePath); - } - - set - { - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigLogFilePath, (object)value); - } - } - - public long MaximumSizeInBytes - { - get - { - return (long)((ulong)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigMaxSize)); - } - - set - { - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigMaxSize, (object)value); - } - } - - public EventLogMode LogMode - { - get - { - object nativeRetentionObject = NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigRetention); - object nativeAutoBackupObject = NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigAutoBackup); - - bool nativeRetention = nativeRetentionObject == null ? false : (bool)nativeRetentionObject; - bool nativeAutoBackup = nativeAutoBackupObject == null ? false : (bool)nativeAutoBackupObject; - - if (nativeAutoBackup) - return EventLogMode.AutoBackup; - - if (nativeRetention) - return EventLogMode.Retain; - - return EventLogMode.Circular; - } - - set - { - switch (value) - { - case EventLogMode.Circular: - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigAutoBackup, (object)false); - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigRetention, (object)false); - break; - case EventLogMode.AutoBackup: - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigAutoBackup, (object)true); - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigRetention, (object)true); - break; - case EventLogMode.Retain: - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigAutoBackup, (object)false); - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelLoggingConfigRetention, (object)true); - break; - } - } - } - - public string OwningProviderName - { - get - { - return (string)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelConfigOwningPublisher); - } - } - - public IEnumerable ProviderNames - { - get - { - return (string[])NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublisherList); - } - } - - public int? ProviderLevel - { - get - { - return (int?)((uint?)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigLevel)); - } - - set - { - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigLevel, (object)value); - } - } - - public long? ProviderKeywords - { - get - { - return (long?)((ulong?)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigKeywords)); - } - - set - { - NativeWrapper.EvtSetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigKeywords, (object)value); - } - } - - public int? ProviderBufferSize - { - get - { - return (int?)((uint?)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigBufferSize)); - } - } - - public int? ProviderMinimumNumberOfBuffers - { - get - { - return (int?)((uint?)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigMinBuffers)); - } - } - - public int? ProviderMaximumNumberOfBuffers - { - get - { - return (int?)((uint?)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigMaxBuffers)); - } - } - - public int? ProviderLatency - { - get - { - return (int?)((uint?)NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigLatency)); - } - } - - public Guid? ProviderControlGuid - { - get - { - return (Guid?)(NativeWrapper.EvtGetChannelConfigProperty(_handle, UnsafeNativeMethods.EvtChannelConfigPropertyId.EvtChannelPublishingConfigControlGuid)); - } - } - - public void SaveChanges() - { - NativeWrapper.EvtSaveChannelConfig(_handle, 0); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - [System.Security.SecuritySafeCritical] - protected virtual void Dispose(bool disposing) - { - if (_handle != null && !_handle.IsInvalid) - _handle.Dispose(); - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogException.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogException.cs deleted file mode 100644 index 80e1299d29..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogException.cs +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes an exception thrown from Event -** Log related classes. -** -============================================================*/ - -using System.ComponentModel; - -namespace System.Diagnostics.Eventing.Reader -{ - public class EventLogException : Exception - { - internal static void Throw(int errorCode) - { - switch (errorCode) - { - case 2: - case 3: - case 15007: - case 15027: - case 15028: - case 15002: - throw new EventLogNotFoundException(errorCode); - - case 13: - case 15005: - throw new EventLogInvalidDataException(errorCode); - - case 1818: // RPC_S_CALL_CANCELED is converted to ERROR_CANCELLED - case 1223: - throw new OperationCanceledException(); - - case 15037: - throw new EventLogProviderDisabledException(errorCode); - - case 5: - throw new UnauthorizedAccessException(); - - case 15011: - case 15012: - throw new EventLogReadingException(errorCode); - - default: throw new EventLogException(errorCode); - } - } - - public EventLogException() { } - - public EventLogException(string message) : base(message) { } - - public EventLogException(string message, Exception innerException) : base(message, innerException) { } - - protected EventLogException(int errorCode) { _errorCode = errorCode; } - - public override string Message - { - // marked as SecurityCritical because it uses Win32Exception. - // marked as TreatAsSafe because it performs Demand. - [System.Security.SecurityCritical] - get - { - Win32Exception win32Exception = new Win32Exception(_errorCode); - return win32Exception.Message; - } - } - - private int _errorCode; - } - - /// - /// The object requested by the operation is not found. - /// - public class EventLogNotFoundException : EventLogException - { - public EventLogNotFoundException() { } - - public EventLogNotFoundException(string message) : base(message) { } - - public EventLogNotFoundException(string message, Exception innerException) : base(message, innerException) { } - - internal EventLogNotFoundException(int errorCode) : base(errorCode) { } - } - - /// - /// The state of the reader cursor has become invalid, most likely due to the fact - /// that the log has been cleared. User needs to obtain a new reader object if - /// they wish to continue navigating result set. - /// - public class EventLogReadingException : EventLogException - { - public EventLogReadingException() { } - - public EventLogReadingException(string message) : base(message) { } - - public EventLogReadingException(string message, Exception innerException) : base(message, innerException) { } - - internal EventLogReadingException(int errorCode) : base(errorCode) { } - } - - /// - /// Provider has been uninstalled while ProviderMetadata operations are being performed. - /// Obtain a new ProviderMetadata object, when provider is reinstalled, to continue navigating - /// provider's metadata. - /// - public class EventLogProviderDisabledException : EventLogException - { - public EventLogProviderDisabledException() { } - - public EventLogProviderDisabledException(string message) : base(message) { } - - public EventLogProviderDisabledException(string message, Exception innerException) : base(message, innerException) { } - - internal EventLogProviderDisabledException(int errorCode) : base(errorCode) { } - } - - /// - /// Data obtained from the eventlog service, for the current operation, is invalid . - /// - public class EventLogInvalidDataException : EventLogException - { - public EventLogInvalidDataException() { } - - public EventLogInvalidDataException(string message) : base(message) { } - - public EventLogInvalidDataException(string message, Exception innerException) : base(message, innerException) { } - - internal EventLogInvalidDataException(int errorCode) : base(errorCode) { } - } -} - diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogInformation.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogInformation.cs deleted file mode 100644 index 95350eab81..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogInformation.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** The objects of this class allow access to the run-time -** properties of logs and external log files. An instance of this -** class is obtained from EventLogSession. -** -============================================================*/ - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Describes the run-time properties of logs and external log files. An instance - /// of this class is obtained from EventLogSession. - /// - public sealed class EventLogInformation - { - private DateTime? _creationTime; - private DateTime? _lastAccessTime; - private DateTime? _lastWriteTime; - private long? _fileSize; - private int? _fileAttributes; - private long? _recordCount; - private long? _oldestRecordNumber; - private bool? _isLogFull; - - [System.Security.SecuritySafeCritical] - internal EventLogInformation(EventLogSession session, string channelName, PathType pathType) - { - EventLogHandle logHandle = NativeWrapper.EvtOpenLog(session.Handle, channelName, pathType); - - using (logHandle) - { - _creationTime = (DateTime?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogCreationTime); - _lastAccessTime = (DateTime?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogLastAccessTime); - _lastWriteTime = (DateTime?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogLastWriteTime); - _fileSize = (long?)((ulong?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogFileSize)); - _fileAttributes = (int?)((uint?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogAttributes)); - _recordCount = (long?)((ulong?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogNumberOfLogRecords)); - _oldestRecordNumber = (long?)((ulong?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogOldestRecordNumber)); - _isLogFull = (bool?)NativeWrapper.EvtGetLogInfo(logHandle, UnsafeNativeMethods.EvtLogPropertyId.EvtLogFull); - } - } - - public DateTime? CreationTime { get { return _creationTime; } } - - public DateTime? LastAccessTime { get { return _lastAccessTime; } } - - public DateTime? LastWriteTime { get { return _lastWriteTime; } } - - public long? FileSize { get { return _fileSize; } } - - public int? Attributes { get { return _fileAttributes; } } - - public long? RecordCount { get { return _recordCount; } } - - public long? OldestRecordNumber { get { return _oldestRecordNumber; } } - - public bool? IsLogFull { get { return _isLogFull; } } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogLink.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogLink.cs deleted file mode 100644 index 5941775028..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogLink.cs +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes the metadata for a specific Log -** Reference defined by a Provider. An instance of this class is obtained from -** a ProviderMetadata object. -** -============================================================*/ - -using System.Collections.Generic; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Describes the metadata for a specific Log Reference defined - /// by a Provider. An instance of this class is obtained from - /// a ProviderMetadata object. - /// - public sealed class EventLogLink - { - private string _channelName; - private bool _isImported; - private string _displayName; - private uint _channelId; - - private bool _dataReady; - private ProviderMetadata _pmReference; - private object _syncObject; - - internal EventLogLink(uint channelId, ProviderMetadata pmReference) - { - _channelId = channelId; - _pmReference = pmReference; - _syncObject = new object(); - } - - internal EventLogLink(string channelName, bool isImported, string displayName, uint channelId) - { - _channelName = channelName; - _isImported = isImported; - _displayName = displayName; - _channelId = channelId; - - _dataReady = true; - _syncObject = new object(); - } - - private void PrepareData() - { - if (_dataReady == true) return; - - lock (_syncObject) - { - if (_dataReady == true) return; - - IEnumerable result = _pmReference.LogLinks; - - _channelName = null; - _isImported = false; - _displayName = null; - _dataReady = true; - - foreach (EventLogLink ch in result) - { - if (ch.ChannelId == _channelId) - { - _channelName = ch.LogName; - _isImported = ch.IsImported; - _displayName = ch.DisplayName; - - _dataReady = true; - - break; - } - } - } - } - - public string LogName - { - get - { - this.PrepareData(); - return _channelName; - } - } - - public bool IsImported - { - get - { - this.PrepareData(); - return _isImported; - } - } - - public string DisplayName - { - get - { - this.PrepareData(); - return _displayName; - } - } - - internal uint ChannelId - { - get - { - return _channelId; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogPropertySelector.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogPropertySelector.cs deleted file mode 100644 index b86ba48aca..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogPropertySelector.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** 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.Collections.Generic; - -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. - /// - 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) - { - 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 (_renderContextHandleValues != null && !_renderContextHandleValues.IsInvalid) - _renderContextHandleValues.Dispose(); - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogQuery.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogQuery.cs deleted file mode 100644 index fd827890a3..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogQuery.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class allows a user to define events of interest. -** An instance of this class is passed to an EventReader to actually -** obtain the EventRecords. The EventLogQuery can be as -** simple specifying that all events are of interest, or it can contain -** query / xpath expressions that indicate exactly what characteristics -** events should have. -** -============================================================*/ - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Allows a user to define events of interest. An instance of this - /// class is passed to an EventReader to actually obtain the EventRecords. - /// The EventLogQuery can be as simple specifying that all events are of - /// interest, or it can contain query / xpath expressions that indicate exactly - /// what characteristics events should have. - /// - public class EventLogQuery - { - private string _query; - private string _path; - private EventLogSession _session; - private PathType _pathType; - private bool _tolerateErrors = false; - private bool _reverseDirection = false; - - public EventLogQuery(string path, PathType pathType) - : this(path, pathType, null) - { - } - - public EventLogQuery(string path, PathType pathType, string query) - { - _session = EventLogSession.GlobalSession; - _path = path; // can be null - _pathType = pathType; - - if (query == null) - { - if (path == null) - throw new ArgumentNullException("path"); - } - else - { - _query = query; - } - } - - public EventLogSession Session - { - get - { - return _session; - } - - set - { - _session = value; - } - } - - public bool TolerateQueryErrors - { - get - { - return _tolerateErrors; - } - - set - { - _tolerateErrors = value; - } - } - - public bool ReverseDirection - { - get - { - return _reverseDirection; - } - - set - { - _reverseDirection = value; - } - } - - internal string Path - { - get - { - return _path; - } - } - - internal PathType ThePathType - { - get - { - return _pathType; - } - } - - internal string Query - { - get - { - return _query; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogReader.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogReader.cs deleted file mode 100644 index 372e7ab898..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogReader.cs +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class is used for reading event records from event log. -** -============================================================*/ - -using System.IO; -using System.Collections.Generic; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// This public class is used for reading event records from event log. - /// - public class EventLogReader : IDisposable - { - private EventLogQuery _eventQuery; - - private int _batchSize; - - // - // access to the data member reference is safe, while - // invoking methods on it is marked SecurityCritical as appropriate. - // - private EventLogHandle _handle; - - /// - /// Events buffer holds batched event (handles). - /// - private IntPtr[] _eventsBuffer; - /// - /// The current index where the function GetNextEvent is (inside the eventsBuffer). - /// - private int _currentIndex; - /// - /// The number of events read from the batch into the eventsBuffer. - /// - private int _eventCount; - - /// - /// When the reader finishes (will always return only ERROR_NO_MORE_ITEMS). - /// For subscription, this means we need to wait for next event. - /// - private bool _isEof; - - /// - /// Maintains cached display / metadata information returned from - /// EventRecords that were obtained from this reader. - /// - private ProviderMetadataCachedInformation _cachedMetadataInformation; - - public EventLogReader(string path) - : this(new EventLogQuery(path, PathType.LogName), null) - { - } - - public EventLogReader(string path, PathType pathType) - : this(new EventLogQuery(path, pathType), null) - { - } - - public EventLogReader(EventLogQuery eventQuery) - : this(eventQuery, null) - { - } - - [System.Security.SecurityCritical] - public EventLogReader(EventLogQuery eventQuery, EventBookmark bookmark) - { - if (eventQuery == null) - throw new ArgumentNullException("eventQuery"); - - string logfile = null; - if (eventQuery.ThePathType == PathType.FilePath) - logfile = eventQuery.Path; - - _cachedMetadataInformation = new ProviderMetadataCachedInformation(eventQuery.Session, logfile, 50); - - // explicit data - _eventQuery = eventQuery; - - // implicit - _batchSize = 64; - _eventsBuffer = new IntPtr[_batchSize]; - - // - // compute the flag. - // - int flag = 0; - - if (_eventQuery.ThePathType == PathType.LogName) - flag |= (int)UnsafeNativeMethods.EvtQueryFlags.EvtQueryChannelPath; - else - flag |= (int)UnsafeNativeMethods.EvtQueryFlags.EvtQueryFilePath; - - if (_eventQuery.ReverseDirection) - flag |= (int)UnsafeNativeMethods.EvtQueryFlags.EvtQueryReverseDirection; - - if (_eventQuery.TolerateQueryErrors) - flag |= (int)UnsafeNativeMethods.EvtQueryFlags.EvtQueryTolerateQueryErrors; - - _handle = NativeWrapper.EvtQuery(_eventQuery.Session.Handle, - _eventQuery.Path, _eventQuery.Query, - flag); - - EventLogHandle bookmarkHandle = EventLogRecord.GetBookmarkHandleFromBookmark(bookmark); - - if (!bookmarkHandle.IsInvalid) - { - using (bookmarkHandle) - { - NativeWrapper.EvtSeek(_handle, 1, bookmarkHandle, 0, UnsafeNativeMethods.EvtSeekFlags.EvtSeekRelativeToBookmark); - } - } - } - - public int BatchSize - { - get - { - return _batchSize; - } - - set - { - if (value < 1) - throw new ArgumentOutOfRangeException("value"); - _batchSize = value; - } - } - - [System.Security.SecurityCritical] - private bool GetNextBatch(TimeSpan ts) - { - int timeout; - if (ts == TimeSpan.MaxValue) - timeout = -1; - else - timeout = (int)ts.TotalMilliseconds; - - // batchSize was changed by user, reallocate buffer. - if (_batchSize != _eventsBuffer.Length) _eventsBuffer = new IntPtr[_batchSize]; - - int newEventCount = 0; - bool results = NativeWrapper.EvtNext(_handle, _batchSize, _eventsBuffer, timeout, 0, ref newEventCount); - - if (!results) - { - _eventCount = 0; - _currentIndex = 0; - return false; // no more events in the result set - } - - _currentIndex = 0; - _eventCount = newEventCount; - return true; - } - - public EventRecord ReadEvent() - { - return ReadEvent(TimeSpan.MaxValue); - } - - // security critical because allocates SafeHandle. - // marked as safe because performs Demand check. - [System.Security.SecurityCritical] - public EventRecord ReadEvent(TimeSpan timeout) - { - if (_isEof) - throw new InvalidOperationException(); - - if (_currentIndex >= _eventCount) - { - // buffer is empty, get next batch. - GetNextBatch(timeout); - - if (_currentIndex >= _eventCount) - { - _isEof = true; - return null; - } - } - - EventLogRecord eventInstance = new EventLogRecord(new EventLogHandle(_eventsBuffer[_currentIndex], true), _eventQuery.Session, _cachedMetadataInformation); - _currentIndex++; - return eventInstance; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - [System.Security.SecuritySafeCritical] - protected virtual void Dispose(bool disposing) - { - while (_currentIndex < _eventCount) - { - NativeWrapper.EvtClose(_eventsBuffer[_currentIndex]); - _currentIndex++; - } - - if (_handle != null && !_handle.IsInvalid) - _handle.Dispose(); - } - - [System.Security.SecurityCritical] - internal void SeekReset() - { - // - // close all unread event handles in the buffer - // - while (_currentIndex < _eventCount) - { - NativeWrapper.EvtClose(_eventsBuffer[_currentIndex]); - _currentIndex++; - } - - // reset the indexes used by Next - _currentIndex = 0; - _eventCount = 0; - _isEof = false; - } - - // marked as SecurityCritical because it allocates SafeHandle. - [System.Security.SecurityCritical] - internal void SeekCommon(long offset) - { - // - // modify offset that we're going to send to service to account for the - // fact that we've already read some events in our buffer that the user - // hasn't seen yet. - // - offset = offset - (_eventCount - _currentIndex); - - SeekReset(); - - NativeWrapper.EvtSeek(_handle, offset, EventLogHandle.Zero, 0, UnsafeNativeMethods.EvtSeekFlags.EvtSeekRelativeToCurrent); - } - - public void Seek(EventBookmark bookmark) - { - Seek(bookmark, 0); - } - - [System.Security.SecurityCritical] - public void Seek(EventBookmark bookmark, long offset) - { - if (bookmark == null) - throw new ArgumentNullException("bookmark"); - - SeekReset(); - using (EventLogHandle bookmarkHandle = EventLogRecord.GetBookmarkHandleFromBookmark(bookmark)) - { - NativeWrapper.EvtSeek(_handle, offset, bookmarkHandle, 0, UnsafeNativeMethods.EvtSeekFlags.EvtSeekRelativeToBookmark); - } - } - - [System.Security.SecurityCritical] - public void Seek(SeekOrigin origin, long offset) - { - switch (origin) - { - case SeekOrigin.Begin: - - SeekReset(); - NativeWrapper.EvtSeek(_handle, offset, EventLogHandle.Zero, 0, UnsafeNativeMethods.EvtSeekFlags.EvtSeekRelativeToFirst); - return; - - case SeekOrigin.End: - - SeekReset(); - NativeWrapper.EvtSeek(_handle, offset, EventLogHandle.Zero, 0, UnsafeNativeMethods.EvtSeekFlags.EvtSeekRelativeToLast); - return; - - case SeekOrigin.Current: - if (offset >= 0) - { - // we can reuse elements in the batch. - if (_currentIndex + offset < _eventCount) - { - // - // We don't call Seek here, we can reposition within the batch. - // - - // close all event handles between [currentIndex, currentIndex + offset) - int index = _currentIndex; - while (index < _currentIndex + offset) - { - NativeWrapper.EvtClose(_eventsBuffer[index]); - index++; - } - - _currentIndex = (int)(_currentIndex + offset); - // leave the eventCount unchanged - // leave the same Eof - } - else - { - SeekCommon(offset); - } - } - else - { - SeekCommon(offset); - } - - return; - } - } - - public void CancelReading() - { - NativeWrapper.EvtCancel(_handle); - } - - public IList LogStatus - { - [System.Security.SecurityCritical] - get - { - List list = null; - string[] channelNames = null; - int[] errorStatuses = null; - EventLogHandle queryHandle = _handle; - - if (queryHandle.IsInvalid) - throw new InvalidOperationException(); - - channelNames = (string[])NativeWrapper.EvtGetQueryInfo(queryHandle, UnsafeNativeMethods.EvtQueryPropertyId.EvtQueryNames); - errorStatuses = (int[])NativeWrapper.EvtGetQueryInfo(queryHandle, UnsafeNativeMethods.EvtQueryPropertyId.EvtQueryStatuses); - - if (channelNames.Length != errorStatuses.Length) - throw new InvalidOperationException(); - - list = new List(channelNames.Length); - for (int i = 0; i < channelNames.Length; i++) - { - EventLogStatus cs = new EventLogStatus(channelNames[i], errorStatuses[i]); - list.Add(cs); - } - - return list.AsReadOnly(); - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogRecord.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogRecord.cs deleted file mode 100644 index ab0701c9c4..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogRecord.cs +++ /dev/null @@ -1,457 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class is an EventLog implementation of EventRecord. An -** instance of this is obtained from an EventLogReader. -** -============================================================*/ - -using System.Collections.Generic; -using System.Text; - -namespace System.Diagnostics.Eventing.Reader -{ - public class EventLogRecord : EventRecord - { - private const int SYSTEM_PROPERTY_COUNT = 18; - - // - // access to the data member reference is safe, while - // invoking methods on it is marked SecurityCritical as appropriate. - // - [System.Security.SecuritySafeCritical] - private EventLogHandle _handle; - - private EventLogSession _session; - - private NativeWrapper.SystemProperties _systemProperties; - private string _containerChannel; - private int[] _matchedQueryIds; - - // a dummy object which is used only for the locking. - private object _syncObject; - - // cached DisplayNames for each instance - private string _levelName = null; - private string _taskName = null; - private string _opcodeName = null; - private IEnumerable _keywordsNames = null; - - // cached DisplayNames for each instance - private bool _levelNameReady; - private bool _taskNameReady; - private bool _opcodeNameReady; - - private ProviderMetadataCachedInformation _cachedMetadataInformation; - - // marking as TreatAsSafe because just passing around a reference to an EventLogHandle is safe. - [System.Security.SecuritySafeCritical] - internal EventLogRecord(EventLogHandle handle, EventLogSession session, ProviderMetadataCachedInformation cachedMetadataInfo) - { - _cachedMetadataInformation = cachedMetadataInfo; - _handle = handle; - _session = session; - _systemProperties = new NativeWrapper.SystemProperties(); - _syncObject = new object(); - } - - internal EventLogHandle Handle - { - // just returning reference to security critical type, the methods - // of that type are protected by SecurityCritical as appropriate. - [System.Security.SecuritySafeCritical] - get - { - return _handle; - } - } - - internal void PrepareSystemData() - { - if (_systemProperties.filled) - return; - - // prepare the System Context, if it is not already initialized. - _session.SetupSystemContext(); - - lock (_syncObject) - { - if (_systemProperties.filled == false) - { - NativeWrapper.EvtRenderBufferWithContextSystem(_session.renderContextHandleSystem, _handle, UnsafeNativeMethods.EvtRenderFlags.EvtRenderEventValues, _systemProperties, SYSTEM_PROPERTY_COUNT); - _systemProperties.filled = true; - } - } - } - - public override int Id - { - get - { - PrepareSystemData(); - if (_systemProperties.Id == null) - return 0; - return (int)_systemProperties.Id; - } - } - - public override byte? Version - { - get - { - PrepareSystemData(); - return _systemProperties.Version; - } - } - - public override int? Qualifiers - { - get - { - PrepareSystemData(); - return (int?)(uint?)_systemProperties.Qualifiers; - } - } - - public override byte? Level - { - get - { - PrepareSystemData(); - return _systemProperties.Level; - } - } - - public override int? Task - { - get - { - PrepareSystemData(); - return (int?)(uint?)_systemProperties.Task; - } - } - - public override short? Opcode - { - get - { - PrepareSystemData(); - return (short?)(ushort?)_systemProperties.Opcode; - } - } - - public override long? Keywords - { - get - { - PrepareSystemData(); - return (long?)_systemProperties.Keywords; - } - } - - public override long? RecordId - { - get - { - PrepareSystemData(); - return (long?)_systemProperties.RecordId; - } - } - - public override string ProviderName - { - get - { - PrepareSystemData(); - return _systemProperties.ProviderName; - } - } - - public override Guid? ProviderId - { - get - { - PrepareSystemData(); - return _systemProperties.ProviderId; - } - } - - public override string LogName - { - get - { - PrepareSystemData(); - return _systemProperties.ChannelName; - } - } - - public override int? ProcessId - { - get - { - PrepareSystemData(); - return (int?)_systemProperties.ProcessId; - } - } - - public override int? ThreadId - { - get - { - PrepareSystemData(); - return (int?)_systemProperties.ThreadId; - } - } - - public override string MachineName - { - get - { - PrepareSystemData(); - return _systemProperties.ComputerName; - } - } - - public override System.Security.Principal.SecurityIdentifier UserId - { - get - { - PrepareSystemData(); - return _systemProperties.UserId; - } - } - - public override DateTime? TimeCreated - { - get - { - PrepareSystemData(); - return _systemProperties.TimeCreated; - } - } - - public override Guid? ActivityId - { - get - { - PrepareSystemData(); - return _systemProperties.ActivityId; - } - } - - public override Guid? RelatedActivityId - { - get - { - PrepareSystemData(); - return _systemProperties.RelatedActivityId; - } - } - - public string ContainerLog - { - get - { - if (_containerChannel != null) - return _containerChannel; - lock (_syncObject) - { - if (_containerChannel == null) - { - _containerChannel = (string)NativeWrapper.EvtGetEventInfo(this.Handle, UnsafeNativeMethods.EvtEventPropertyId.EvtEventPath); - } - - return _containerChannel; - } - } - } - - public IEnumerable MatchedQueryIds - { - get - { - if (_matchedQueryIds != null) - return _matchedQueryIds; - lock (_syncObject) - { - if (_matchedQueryIds == null) - { - _matchedQueryIds = (int[])NativeWrapper.EvtGetEventInfo(this.Handle, UnsafeNativeMethods.EvtEventPropertyId.EvtEventQueryIDs); - } - - return _matchedQueryIds; - } - } - } - - public override EventBookmark Bookmark - { - [System.Security.SecuritySafeCritical] - get - { - EventLogHandle bookmarkHandle = NativeWrapper.EvtCreateBookmark(null); - NativeWrapper.EvtUpdateBookmark(bookmarkHandle, _handle); - string bookmarkText = NativeWrapper.EvtRenderBookmark(bookmarkHandle); - - return new EventBookmark(bookmarkText); - } - } - - public override string FormatDescription() - { - return _cachedMetadataInformation.GetFormatDescription(this.ProviderName, _handle); - } - - public override string FormatDescription(IEnumerable values) - { - if (values == null) return this.FormatDescription(); - - // copy the value IEnumerable to an array. - string[] theValues = Array.Empty(); - int i = 0; - foreach (object o in values) - { - if (theValues.Length == i) - Array.Resize(ref theValues, i + 1); - theValues[i] = o.ToString(); - i++; - } - - return _cachedMetadataInformation.GetFormatDescription(this.ProviderName, _handle, theValues); - } - - public override string LevelDisplayName - { - get - { - if (_levelNameReady) - return _levelName; - lock (_syncObject) - { - if (_levelNameReady == false) - { - _levelNameReady = true; - _levelName = _cachedMetadataInformation.GetLevelDisplayName(this.ProviderName, _handle); - } - - return _levelName; - } - } - } - - public override string OpcodeDisplayName - { - get - { - lock (_syncObject) - { - if (_opcodeNameReady == false) - { - _opcodeNameReady = true; - _opcodeName = _cachedMetadataInformation.GetOpcodeDisplayName(this.ProviderName, _handle); - } - - return _opcodeName; - } - } - } - - public override string TaskDisplayName - { - get - { - if (_taskNameReady == true) - return _taskName; - lock (_syncObject) - { - if (_taskNameReady == false) - { - _taskNameReady = true; - _taskName = _cachedMetadataInformation.GetTaskDisplayName(this.ProviderName, _handle); - } - - return _taskName; - } - } - } - - public override IEnumerable KeywordsDisplayNames - { - get - { - if (_keywordsNames != null) - return _keywordsNames; - lock (_syncObject) - { - if (_keywordsNames == null) - { - _keywordsNames = _cachedMetadataInformation.GetKeywordDisplayNames(this.ProviderName, _handle); - } - - return _keywordsNames; - } - } - } - - public override IList Properties - { - get - { - _session.SetupUserContext(); - IList properties = NativeWrapper.EvtRenderBufferWithContextUserOrValues(_session.renderContextHandleUser, _handle); - List list = new List(); - foreach (object value in properties) - { - list.Add(new EventProperty(value)); - } - - return list; - } - } - - public IList GetPropertyValues(EventLogPropertySelector propertySelector) - { - if (propertySelector == null) - throw new ArgumentNullException("propertySelector"); - return NativeWrapper.EvtRenderBufferWithContextUserOrValues(propertySelector.Handle, _handle); - } - - // marked as SecurityCritical because it allocates SafeHandle - // marked as TreatAsSafe because it performs Demand. - [System.Security.SecuritySafeCritical] - public override string ToXml() - { - StringBuilder renderBuffer = new StringBuilder(2000); - NativeWrapper.EvtRender(EventLogHandle.Zero, _handle, UnsafeNativeMethods.EvtRenderFlags.EvtRenderEventXml, renderBuffer); - return renderBuffer.ToString(); - } - - [System.Security.SecuritySafeCritical] - protected override void Dispose(bool disposing) - { - try - { - if (_handle != null && !_handle.IsInvalid) - _handle.Dispose(); - } - finally - { - base.Dispose(disposing); - } - } - - // marked as SecurityCritical because allocates SafeHandle. - [System.Security.SecurityCritical] - internal static EventLogHandle GetBookmarkHandleFromBookmark(EventBookmark bookmark) - { - if (bookmark == null) - return EventLogHandle.Zero; - EventLogHandle handle = NativeWrapper.EvtCreateBookmark(bookmark.BookmarkText); - return handle; - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogSession.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogSession.cs deleted file mode 100644 index b2b634321e..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogSession.cs +++ /dev/null @@ -1,297 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** Defines a session for Event Log operations. The session can -** be configured for a remote machine and can use specific -** user credentials. -============================================================*/ - -using System.Security; -using System.Collections.Generic; -using System.Globalization; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Session Login Type. - /// - public enum SessionAuthentication - { - Default = 0, - Negotiate = 1, - Kerberos = 2, - Ntlm = 3 - } - - /// - /// The type: log / external log file to query. - /// - public enum PathType - { - LogName = 1, - FilePath = 2 - } - - public class EventLogSession : IDisposable - { - // - // the two context handles for rendering (for EventLogRecord). - // the system and user context handles. They are both common for all the event instances and can be created only once. - // access to the data member references is safe, while - // invoking methods on it is marked SecurityCritical as appropriate. - // - internal EventLogHandle renderContextHandleSystem = EventLogHandle.Zero; - internal EventLogHandle renderContextHandleUser = EventLogHandle.Zero; - - // the dummy sync object for the two contexts. - private object _syncObject = null; - - private string _server; - private string _user; - private string _domain; - private SessionAuthentication _logOnType; - // we do not maintain the password here. - - // - // access to the data member references is safe, while - // invoking methods on it is marked SecurityCritical as appropriate. - // - private EventLogHandle _handle = EventLogHandle.Zero; - - // setup the System Context, once for all the EventRecords. - [System.Security.SecuritySafeCritical] - internal void SetupSystemContext() - { - if (!this.renderContextHandleSystem.IsInvalid) - return; - lock (_syncObject) - { - if (this.renderContextHandleSystem.IsInvalid) - { - // create the SYSTEM render context - // call the EvtCreateRenderContext to get the renderContextHandleSystem, so that we can get the system/values/user properties. - this.renderContextHandleSystem = NativeWrapper.EvtCreateRenderContext(0, null, UnsafeNativeMethods.EvtRenderContextFlags.EvtRenderContextSystem); - } - } - } - - [System.Security.SecuritySafeCritical] - internal void SetupUserContext() - { - lock (_syncObject) - { - if (this.renderContextHandleUser.IsInvalid) - { - // create the USER render context - this.renderContextHandleUser = NativeWrapper.EvtCreateRenderContext(0, null, UnsafeNativeMethods.EvtRenderContextFlags.EvtRenderContextUser); - } - } - } - - // marked as SecurityCritical because allocates SafeHandle. - // marked as TreatAsSafe because performs Demand(). - [System.Security.SecurityCritical] - public EventLogSession() - { - // handle = EventLogHandle.Zero; - _syncObject = new object(); - } - - public EventLogSession(string server) - : - this(server, null, null, (SecureString)null, SessionAuthentication.Default) - { - } - - // marked as TreatAsSafe because performs Demand(). - [System.Security.SecurityCritical] - public EventLogSession(string server, string domain, string user, SecureString password, SessionAuthentication logOnType) - { - if (server == null) - server = "localhost"; - - _syncObject = new object(); - - _server = server; - _domain = domain; - _user = user; - _logOnType = logOnType; - - UnsafeNativeMethods.EvtRpcLogin erLogin = new UnsafeNativeMethods.EvtRpcLogin(); - erLogin.Server = _server; - erLogin.User = _user; - erLogin.Domain = _domain; - erLogin.Flags = (int)_logOnType; - erLogin.Password = CoTaskMemUnicodeSafeHandle.Zero; - - try - { - if (password != null) - erLogin.Password.SetMemory(SecureStringMarshal.SecureStringToCoTaskMemUnicode(password)); - // open a session using the erLogin structure. - _handle = NativeWrapper.EvtOpenSession(UnsafeNativeMethods.EvtLoginClass.EvtRpcLogin, ref erLogin, 0, 0); - } - finally - { - erLogin.Password.Dispose(); - } - } - - internal EventLogHandle Handle - { - get - { - return _handle; - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - [System.Security.SecuritySafeCritical] - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - if (this == s_globalSession) - throw new InvalidOperationException(); - } - - if (this.renderContextHandleSystem != null && - !this.renderContextHandleSystem.IsInvalid) - this.renderContextHandleSystem.Dispose(); - - if (this.renderContextHandleUser != null && - !this.renderContextHandleUser.IsInvalid) - this.renderContextHandleUser.Dispose(); - - if (_handle != null && !_handle.IsInvalid) - _handle.Dispose(); - } - - public void CancelCurrentOperations() - { - NativeWrapper.EvtCancel(_handle); - } - - private static EventLogSession s_globalSession = new EventLogSession(); - public static EventLogSession GlobalSession - { - get { return s_globalSession; } - } - - [System.Security.SecurityCritical] - public IEnumerable GetProviderNames() - { - List namesList = new List(100); - - using (EventLogHandle ProviderEnum = NativeWrapper.EvtOpenProviderEnum(this.Handle, 0)) - { - bool finish = false; - - do - { - string s = NativeWrapper.EvtNextPublisherId(ProviderEnum, ref finish); - if (finish == false) namesList.Add(s); - } - while (finish == false); - - return namesList; - } - } - - [System.Security.SecurityCritical] - public IEnumerable GetLogNames() - { - List namesList = new List(100); - - using (EventLogHandle channelEnum = NativeWrapper.EvtOpenChannelEnum(this.Handle, 0)) - { - bool finish = false; - - do - { - string s = NativeWrapper.EvtNextChannelPath(channelEnum, ref finish); - if (finish == false) namesList.Add(s); - } - while (finish == false); - - return namesList; - } - } - - public EventLogInformation GetLogInformation(string logName, PathType pathType) - { - if (logName == null) - throw new ArgumentNullException("logName"); - - return new EventLogInformation(this, logName, pathType); - } - - public void ExportLog(string path, PathType pathType, string query, string targetFilePath) - { - this.ExportLog(path, pathType, query, targetFilePath, false); - } - - public void ExportLog(string path, PathType pathType, string query, string targetFilePath, bool tolerateQueryErrors) - { - if (path == null) - throw new ArgumentNullException("path"); - - if (targetFilePath == null) - throw new ArgumentNullException("targetFilePath"); - - UnsafeNativeMethods.EvtExportLogFlags flag; - switch (pathType) - { - case PathType.LogName: - flag = UnsafeNativeMethods.EvtExportLogFlags.EvtExportLogChannelPath; - break; - case PathType.FilePath: - flag = UnsafeNativeMethods.EvtExportLogFlags.EvtExportLogFilePath; - break; - default: - throw new ArgumentOutOfRangeException("pathType"); - } - - if (tolerateQueryErrors == false) - NativeWrapper.EvtExportLog(this.Handle, path, query, targetFilePath, (int)flag); - else - NativeWrapper.EvtExportLog(this.Handle, path, query, targetFilePath, (int)flag | (int)UnsafeNativeMethods.EvtExportLogFlags.EvtExportLogTolerateQueryErrors); - } - - public void ExportLogAndMessages(string path, PathType pathType, string query, string targetFilePath) - { - this.ExportLogAndMessages(path, pathType, query, targetFilePath, false, CultureInfo.CurrentCulture); - } - - public void ExportLogAndMessages(string path, PathType pathType, string query, string targetFilePath, bool tolerateQueryErrors, CultureInfo targetCultureInfo) - { - if (targetCultureInfo == null) - targetCultureInfo = CultureInfo.CurrentCulture; - ExportLog(path, pathType, query, targetFilePath, tolerateQueryErrors); - // Ignore the CultureInfo, pass 0 to use the calling thread's locale - NativeWrapper.EvtArchiveExportedLog(this.Handle, targetFilePath, 0, 0); - } - - public void ClearLog(string logName) - { - this.ClearLog(logName, null); - } - - public void ClearLog(string logName, string backupPath) - { - if (logName == null) - throw new ArgumentNullException("logName"); - - NativeWrapper.EvtClearLog(this.Handle, logName, backupPath, 0); - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogStatus.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogStatus.cs deleted file mode 100644 index 489c47e6e7..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventLogStatus.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes the status of a particular -** log with respect to an instantiated EventLogReader. -** Since it is possible to instantiate an EventLogReader -** with a query containing multiple logs and the reader can -** be configured to tolerate errors in attaching to those logs, -** this class allows the user to determine exactly what the status -** of those logs is. -============================================================*/ - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Describes the status of a particular log with respect to - /// an instantiated EventLogReader. Since it is possible to - /// instantiate an EventLogReader with a query containing - /// multiple logs and the reader can be configured to tolerate - /// errors in attaching to those logs, this class allows the - /// user to determine exactly what the status of those logs is. - /// - public sealed class EventLogStatus - { - private string _channelName; - private int _win32ErrorCode; - - internal EventLogStatus(string channelName, int win32ErrorCode) - { - _channelName = channelName; - _win32ErrorCode = win32ErrorCode; - } - - public string LogName - { - get { return _channelName; } - } - - public int StatusCode - { - get { return _win32ErrorCode; } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventMetadata.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventMetadata.cs deleted file mode 100644 index ddbfaa49a8..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventMetadata.cs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes the metadata for a specific event -** raised by Provider. An instance of this class is obtained from -** ProviderMetadata class. -** -============================================================*/ - -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Event Metadata. - /// - public sealed class EventMetadata - { - private long _id; - private byte _version; - private byte _channelId; - private byte _level; - private short _opcode; - private int _task; - private long _keywords; - private string _template; - private string _description; - - private ProviderMetadata _pmReference; - - internal EventMetadata(uint id, byte version, byte channelId, - byte level, byte opcode, short task, long keywords, - string template, string description, ProviderMetadata pmReference) - { - _id = id; - _version = version; - _channelId = channelId; - _level = level; - _opcode = opcode; - _task = task; - _keywords = keywords; - _template = template; - _description = description; - _pmReference = pmReference; - } - - // - // Max value will be UINT32.MaxValue - it is a long because this property - // is really a UINT32. The legacy API allows event message ids to be declared - // as UINT32 and these event/messages may be migrated into a Provider's - // manifest as UINT32. Note that EventRecord ids are - // still declared as int, because those ids max value is UINT16.MaxValue - // and rest of the bits of the legacy event id would be stored in - // Qualifiers property. - // - public long Id - { - get - { - return _id; - } - } - - public byte Version - { - get - { - return _version; - } - } - - public EventLogLink LogLink - { - get - { - return new EventLogLink((uint)_channelId, _pmReference); - } - } - - public EventLevel Level - { - get - { - return new EventLevel(_level, _pmReference); - } - } - - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "Opcode", Justification = "matell: Shipped public in 3.5, breaking change to fix now.")] - public EventOpcode Opcode - { - get - { - return new EventOpcode(_opcode, _pmReference); - } - } - - public EventTask Task - { - get - { - return new EventTask(_task, _pmReference); - } - } - - public IEnumerable Keywords - { - get - { - List list = new List(); - - ulong theKeywords = unchecked((ulong)_keywords); - ulong mask = 0x8000000000000000; - - // for every bit - // for (int i = 0; i < 64 && theKeywords != 0; i++) - for (int i = 0; i < 64; i++) - { - // if this bit is set - if ((theKeywords & mask) > 0) - { - // the mask is the keyword we will be searching for. - list.Add(new EventKeyword(unchecked((long)mask), _pmReference)); - // theKeywords = theKeywords - mask; - } - // modify the mask to check next bit. - mask = mask >> 1; - } - - return list; - } - } - - public string Template - { - get - { - return _template; - } - } - - public string Description - { - get - { - return _description; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventOpcode.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventOpcode.cs deleted file mode 100644 index b460dbba8a..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventOpcode.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes the metadata for a specific Opcode -** defined by a Provider. An instance of this class is obtained from -** a ProviderMetadata object. -** -============================================================*/ - -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace System.Diagnostics.Eventing.Reader -{ - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "Opcode", Justification = "matell: Shipped public in 3.5, breaking change to fix now.")] - public sealed class EventOpcode - { - private int _value; - private string _name; - private string _displayName; - private bool _dataReady; - private ProviderMetadata _pmReference; - private object _syncObject; - - // call from EventMetadata - internal EventOpcode(int value, ProviderMetadata pmReference) - { - _value = value; - _pmReference = pmReference; - _syncObject = new object(); - } - - // call from ProviderMetadata - internal EventOpcode(string name, int value, string displayName) - { - _value = value; - _name = name; - _displayName = displayName; - _dataReady = true; - _syncObject = new object(); - } - - internal void PrepareData() - { - lock (_syncObject) - { - if (_dataReady == true) return; - - // get the data - IEnumerable result = _pmReference.Opcodes; - // set the names and display names to null - _name = null; - _displayName = null; - _dataReady = true; - foreach (EventOpcode op in result) - { - if (op.Value == _value) - { - _name = op.Name; - _displayName = op.DisplayName; - _dataReady = true; - break; - } - } - } - } - - public string Name - { - get - { - PrepareData(); - return _name; - } - } - - public int Value - { - get - { - return _value; - } - } - - public string DisplayName - { - get - { - PrepareData(); - return _displayName; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventProperty.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventProperty.cs deleted file mode 100644 index dd9cdecfb4..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventProperty.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class defines the methods / properties for the -** individual Data Values of an EventRecord. Instances of this -** class are obtained from EventRecord. -** -============================================================*/ - -namespace System.Diagnostics.Eventing.Reader -{ - public sealed class EventProperty - { - private object _value; - - internal EventProperty(object value) - { - _value = value; - } - - public object Value - { - get - { - return _value; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventPropertyContext.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventPropertyContext.cs deleted file mode 100644 index a87441f331..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventPropertyContext.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public abstract class defines the methods / properties -** for a context object used to access a set of Data Values from -** an EventRecord. -** -============================================================*/ - -namespace System.Diagnostics.Eventing.Reader -{ - public abstract class EventPropertyContext : IDisposable - { - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventRecord.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventRecord.cs deleted file mode 100644 index 045ec27f37..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventRecord.cs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public abstract class defines the methods / properties -** that all events should support. -** -============================================================*/ - -using System.Collections.Generic; -using System.Security.Principal; -using System.Diagnostics.CodeAnalysis; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Represents an event obtained from an EventReader. - /// - public abstract class EventRecord : IDisposable - { - public abstract int Id { get; } - - public abstract byte? Version { get; } - - public abstract byte? Level { get; } - - public abstract int? Task { get; } - - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "Opcode", Justification = "matell: Shipped public in 3.5, breaking change to fix now.")] - public abstract short? Opcode { get; } - - public abstract long? Keywords { get; } - - public abstract long? RecordId { get; } - - public abstract string ProviderName { get; } - - public abstract Guid? ProviderId { get; } - - public abstract string LogName { get; } - - public abstract int? ProcessId { get; } - - public abstract int? ThreadId { get; } - - public abstract string MachineName { get; } - - public abstract SecurityIdentifier UserId { get; } - - public abstract DateTime? TimeCreated { get; } - - public abstract Guid? ActivityId { get; } - - public abstract Guid? RelatedActivityId { get; } - - public abstract int? Qualifiers { get; } - - public abstract string FormatDescription(); - public abstract string FormatDescription(IEnumerable values); - - public abstract string LevelDisplayName { get; } - - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "Opcode", Justification = "matell: Shipped public in 3.5, breaking change to fix now.")] - public abstract string OpcodeDisplayName { get; } - - public abstract string TaskDisplayName { get; } - - public abstract IEnumerable KeywordsDisplayNames { get; } - - public abstract EventBookmark Bookmark { get; } - - public abstract IList Properties { get; } - - public abstract string ToXml(); - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) { } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventTask.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventTask.cs deleted file mode 100644 index 622a1290b9..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/EventTask.cs +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class describes the metadata for a specific Task -** defined by a Provider. An instance of this class is obtained -** from a ProviderMetadata object. -** -============================================================*/ - -using System.Collections.Generic; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Describes the metadata for a specific Task defined by a Provider. - /// An instance of this class is obtained from a ProviderMetadata object. - /// - public sealed class EventTask - { - private int _value; - private string _name; - private string _displayName; - private Guid _guid; - private bool _dataReady; - private ProviderMetadata _pmReference; - private object _syncObject; - - // called from EventMetadata - internal EventTask(int value, ProviderMetadata pmReference) - { - _value = value; - _pmReference = pmReference; - _syncObject = new object(); - } - - // called from ProviderMetadata - internal EventTask(string name, int value, string displayName, Guid guid) - { - _value = value; - _name = name; - _displayName = displayName; - _guid = guid; - _dataReady = true; - _syncObject = new object(); - } - - internal void PrepareData() - { - lock (_syncObject) - { - if (_dataReady == true) return; - - IEnumerable result = _pmReference.Tasks; - - _name = null; - _displayName = null; - _guid = Guid.Empty; - _dataReady = true; - - foreach (EventTask task in result) - { - if (task.Value == _value) - { - _name = task.Name; - _displayName = task.DisplayName; - _guid = task.EventGuid; - _dataReady = true; - break; - } - } - } - } - - public string Name - { - get - { - PrepareData(); - return _name; - } - } - - public int Value - { - get - { - return _value; - } - } - - public string DisplayName - { - get - { - PrepareData(); - return _displayName; - } - } - - public Guid EventGuid - { - get - { - PrepareData(); - return _guid; - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs index e60771aedc..a94c0142c4 100644 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs +++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/NativeWrapper.cs @@ -15,6 +15,7 @@ ============================================================*/ using System.Collections.Generic; +using System.ComponentModel; using System.Runtime.InteropServices; using System.Text; using System.Security.Principal; @@ -52,6 +53,43 @@ namespace System.Diagnostics.Eventing.Reader } } + private static void ThrowEventLogException(int errorCode) + { + string message = new Win32Exception(errorCode).Message; + + switch (errorCode) + { + case 2: + case 3: + case 15007: + case 15027: + case 15028: + case 15002: + throw new EventLogNotFoundException(message); + + case 13: + case 15005: + throw new EventLogInvalidDataException(message); + + case 1818: // RPC_S_CALL_CANCELED is converted to ERROR_CANCELLED + case 1223: + throw new OperationCanceledException(); + + case 15037: + throw new EventLogProviderDisabledException(message); + + case 5: + throw new UnauthorizedAccessException(); + + case 15011: + case 15012: + throw new EventLogReadingException(message); + + default: + throw new EventLogException(message); + } + } + [System.Security.SecurityCritical] public static EventLogHandle EvtQuery( EventLogHandle session, @@ -62,7 +100,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle handle = UnsafeNativeMethods.EvtQuery(session, path, query, flags); int win32Error = Marshal.GetLastWin32Error(); if (handle.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return handle; } @@ -77,7 +115,7 @@ namespace System.Diagnostics.Eventing.Reader bool status = UnsafeNativeMethods.EvtSeek(resultSet, position, bookmark, timeout, flags); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } [System.Security.SecurityCritical] @@ -92,7 +130,7 @@ namespace System.Diagnostics.Eventing.Reader bool status = UnsafeNativeMethods.EvtNext(queryHandle, eventSize, events, timeout, flags, ref returned); int win32Error = Marshal.GetLastWin32Error(); if (!status && win32Error != UnsafeNativeMethods.ERROR_NO_MORE_ITEMS) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return win32Error == 0; } @@ -102,7 +140,7 @@ namespace System.Diagnostics.Eventing.Reader if (!UnsafeNativeMethods.EvtCancel(handle)) { int win32Error = Marshal.GetLastWin32Error(); - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } } @@ -133,7 +171,7 @@ namespace System.Diagnostics.Eventing.Reader int win32Error = Marshal.GetLastWin32Error(); if (handle.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return handle; } @@ -144,7 +182,7 @@ namespace System.Diagnostics.Eventing.Reader bool status = UnsafeNativeMethods.EvtGetObjectArraySize(objectArray, out arraySize); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return arraySize; } @@ -154,7 +192,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle emEnumHandle = UnsafeNativeMethods.EvtOpenEventMetadataEnum(ProviderMetadata, flags); int win32Error = Marshal.GetLastWin32Error(); if (emEnumHandle.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return emEnumHandle; } @@ -168,7 +206,7 @@ namespace System.Diagnostics.Eventing.Reader if (emHandle.IsInvalid) { if (win32Error != UnsafeNativeMethods.ERROR_NO_MORE_ITEMS) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return null; } @@ -181,7 +219,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle channelEnum = UnsafeNativeMethods.EvtOpenChannelEnum(session, flags); int win32Error = Marshal.GetLastWin32Error(); if (channelEnum.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return channelEnum; } @@ -191,7 +229,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle pubEnum = UnsafeNativeMethods.EvtOpenPublisherEnum(session, flags); int win32Error = Marshal.GetLastWin32Error(); if (pubEnum.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return pubEnum; } @@ -201,7 +239,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle handle = UnsafeNativeMethods.EvtOpenChannelConfig(session, channelPath, flags); int win32Error = Marshal.GetLastWin32Error(); if (handle.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return handle; } @@ -211,7 +249,7 @@ namespace System.Diagnostics.Eventing.Reader bool status = UnsafeNativeMethods.EvtSaveChannelConfig(channelConfig, flags); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } [System.Security.SecurityCritical] @@ -220,7 +258,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle logHandle = UnsafeNativeMethods.EvtOpenLog(session, path, flags); int win32Error = Marshal.GetLastWin32Error(); if (logHandle.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return logHandle; } @@ -236,7 +274,7 @@ namespace System.Diagnostics.Eventing.Reader status = UnsafeNativeMethods.EvtExportLog(session, channelPath, query, targetFilePath, flags); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } [System.Security.SecuritySafeCritical] @@ -250,7 +288,7 @@ namespace System.Diagnostics.Eventing.Reader status = UnsafeNativeMethods.EvtArchiveExportedLog(session, logFilePath, locale, flags); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } [System.Security.SecuritySafeCritical] @@ -264,7 +302,7 @@ namespace System.Diagnostics.Eventing.Reader status = UnsafeNativeMethods.EvtClearLog(session, channelPath, targetFilePath, flags); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } [System.Security.SecurityCritical] @@ -276,7 +314,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle renderContextHandleValues = UnsafeNativeMethods.EvtCreateRenderContext(valuePathsCount, valuePaths, flags); int win32Error = Marshal.GetLastWin32Error(); if (renderContextHandleValues.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return renderContextHandleValues; } @@ -304,7 +342,7 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } } } @@ -315,7 +353,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle handle = UnsafeNativeMethods.EvtOpenSession(loginClass, ref login, timeout, flags); int win32Error = Marshal.GetLastWin32Error(); if (handle.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return handle; } @@ -325,7 +363,7 @@ namespace System.Diagnostics.Eventing.Reader EventLogHandle handle = UnsafeNativeMethods.EvtCreateBookmark(bookmarkXml); int win32Error = Marshal.GetLastWin32Error(); if (handle.IsInvalid) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return handle; } @@ -335,7 +373,7 @@ namespace System.Diagnostics.Eventing.Reader bool status = UnsafeNativeMethods.EvtUpdateBookmark(bookmark, eventHandle); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } [System.Security.SecuritySafeCritical] @@ -353,14 +391,14 @@ namespace System.Diagnostics.Eventing.Reader if (error == UnsafeNativeMethods.ERROR_SUCCESS) { } else if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetEventInfo(handle, enumType, bufferNeeded, buffer, out bufferNeeded); error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(error); + ThrowEventLogException(error); UnsafeNativeMethods.EvtVariant varVal = Marshal.PtrToStructure(buffer); return ConvertToObject(varVal); @@ -384,14 +422,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetQueryInfo(handle, enumType, bufferNeeded, buffer, ref bufferNeeded); error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(error); + ThrowEventLogException(error); UnsafeNativeMethods.EvtVariant varVal = Marshal.PtrToStructure(buffer); return ConvertToObject(varVal); @@ -415,14 +453,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetPublisherMetadataProperty(pmHandle, thePropertyId, 0, bufferNeeded, buffer, out bufferNeeded); error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(error); + ThrowEventLogException(error); UnsafeNativeMethods.EvtVariant varVal = Marshal.PtrToStructure(buffer); return ConvertToObject(varVal); @@ -445,14 +483,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetPublisherMetadataProperty(pmHandle, thePropertyId, 0, bufferNeeded, buffer, out bufferNeeded); error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(error); + ThrowEventLogException(error); // // note: there is a case where returned variant does have allocated native resources @@ -496,7 +534,7 @@ namespace System.Diagnostics.Eventing.Reader } if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } sb.EnsureCapacity(bufferNeeded); @@ -522,7 +560,7 @@ namespace System.Diagnostics.Eventing.Reader return null; } - EventLogException.Throw(error); + ThrowEventLogException(error); } return sb.ToString(); @@ -542,14 +580,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetObjectArrayProperty(objArrayHandle, thePropertyId, index, 0, bufferNeeded, buffer, out bufferNeeded); error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(error); + ThrowEventLogException(error); UnsafeNativeMethods.EvtVariant varVal = Marshal.PtrToStructure(buffer); return ConvertToObject(varVal); @@ -573,14 +611,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (win32Error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetEventMetadataProperty(handle, enumType, 0, bufferNeeded, buffer, out bufferNeeded); win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); UnsafeNativeMethods.EvtVariant varVal = Marshal.PtrToStructure(buffer); return ConvertToObject(varVal); @@ -605,14 +643,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (win32Error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetChannelConfigProperty(handle, enumType, 0, bufferNeeded, buffer, out bufferNeeded); win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); // // note: there is a case where returned variant does have allocated native resources @@ -717,7 +755,7 @@ namespace System.Diagnostics.Eventing.Reader bool status = UnsafeNativeMethods.EvtSetChannelConfigProperty(handle, enumType, 0, ref varVal); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } } @@ -738,14 +776,14 @@ namespace System.Diagnostics.Eventing.Reader } if (win32Error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } sb.EnsureCapacity(channelNameNeeded); status = UnsafeNativeMethods.EvtNextChannelPath(handle, channelNameNeeded, sb, out channelNameNeeded); win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return sb.ToString(); } @@ -767,14 +805,14 @@ namespace System.Diagnostics.Eventing.Reader } if (win32Error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } sb.EnsureCapacity(ProviderIdNeeded); status = UnsafeNativeMethods.EvtNextPublisherId(handle, ProviderIdNeeded, sb, out ProviderIdNeeded); win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); return sb.ToString(); } @@ -792,14 +830,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (win32Error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtGetLogInfo(handle, enumType, bufferNeeded, buffer, out bufferNeeded); win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); UnsafeNativeMethods.EvtVariant varVal = Marshal.PtrToStructure(buffer); return ConvertToObject(varVal); @@ -826,14 +864,14 @@ namespace System.Diagnostics.Eventing.Reader { int error = Marshal.GetLastWin32Error(); if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtRender(contextHandle, eventHandle, flag, bufferNeeded, buffer, out bufferNeeded, out propCount); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); if (propCount != SYSTEM_PROPERTY_COUNT) throw new InvalidOperationException("We do not have " + SYSTEM_PROPERTY_COUNT + " variants given for the UnsafeNativeMethods.EvtRenderFlags.EvtRenderEventValues flag. (System Properties)"); @@ -929,14 +967,14 @@ namespace System.Diagnostics.Eventing.Reader { int error = Marshal.GetLastWin32Error(); if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtRender(contextHandle, eventHandle, flag, bufferNeeded, buffer, out bufferNeeded, out propCount); int win32Error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(win32Error); + ThrowEventLogException(win32Error); List valuesList = new List(propCount); if (propCount > 0) @@ -987,7 +1025,7 @@ namespace System.Diagnostics.Eventing.Reader } if (error != (int)UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } sb.EnsureCapacity(bufferNeeded); @@ -1006,7 +1044,7 @@ namespace System.Diagnostics.Eventing.Reader return null; } - EventLogException.Throw(error); + ThrowEventLogException(error); } return sb.ToString(); @@ -1038,7 +1076,7 @@ namespace System.Diagnostics.Eventing.Reader } if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal(bufferNeeded * 2); @@ -1056,7 +1094,7 @@ namespace System.Diagnostics.Eventing.Reader return keywordsList; } - EventLogException.Throw(error); + ThrowEventLogException(error); } IntPtr pointer = buffer; @@ -1095,14 +1133,14 @@ namespace System.Diagnostics.Eventing.Reader if (!status) { if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } buffer = Marshal.AllocHGlobal((int)bufferNeeded); status = UnsafeNativeMethods.EvtRender(EventLogHandle.Zero, eventHandle, flag, bufferNeeded, buffer, out bufferNeeded, out propCount); error = Marshal.GetLastWin32Error(); if (!status) - EventLogException.Throw(error); + ThrowEventLogException(error); return Marshal.PtrToStringUni(buffer); } @@ -1149,7 +1187,7 @@ namespace System.Diagnostics.Eventing.Reader } if (error != UnsafeNativeMethods.ERROR_INSUFFICIENT_BUFFER) - EventLogException.Throw(error); + ThrowEventLogException(error); } sb.EnsureCapacity(bufferNeeded); @@ -1168,7 +1206,7 @@ namespace System.Diagnostics.Eventing.Reader return null; } - EventLogException.Throw(error); + ThrowEventLogException(error); } return sb.ToString(); diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/ProviderMetadata.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/ProviderMetadata.cs deleted file mode 100644 index 43ec555a97..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/ProviderMetadata.cs +++ /dev/null @@ -1,599 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This public class exposes all the metadata for a specific -** Provider. An instance of this class is obtained from -** EventLogManagement and is scoped to a single Locale. -** -============================================================*/ - -using System.Globalization; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// Exposes all the metadata for a specific event Provider. An instance - /// of this class is obtained from EventLogManagement and is scoped to a - /// single Locale. - /// - public class ProviderMetadata : IDisposable - { - // - // access to the data member reference is safe, while - // invoking methods on it is marked SecurityCritical as appropriate. - // - private EventLogHandle _handle = EventLogHandle.Zero; - - private EventLogHandle _defaultProviderHandle = EventLogHandle.Zero; - - private EventLogSession _session = null; - - private string _providerName; - private CultureInfo _cultureInfo; - private string _logFilePath; - - // caching of the IEnumerable, , , on the ProviderMetadata - // they do not change with every call. - private IList _levels = null; - private IList _opcodes = null; - private IList _tasks = null; - private IList _keywords = null; - private IList _standardLevels = null; - private IList _standardOpcodes = null; - private IList _standardTasks = null; - private IList _standardKeywords = null; - private IList _channelReferences = null; - - private object _syncObject; - - public ProviderMetadata(string providerName) - : this(providerName, null, null, null) - { - } - - public ProviderMetadata(string providerName, EventLogSession session, CultureInfo targetCultureInfo) - : this(providerName, session, targetCultureInfo, null) - { - } - - // SecurityCritical since it allocates SafeHandles. - // Marked TreatAsSafe since we perform the Demand check. - [System.Security.SecuritySafeCritical] - internal ProviderMetadata(string providerName, EventLogSession session, CultureInfo targetCultureInfo, string logFilePath) - { - if (targetCultureInfo == null) - targetCultureInfo = CultureInfo.CurrentCulture; - - if (session == null) - session = EventLogSession.GlobalSession; - - _session = session; - _providerName = providerName; - _cultureInfo = targetCultureInfo; - _logFilePath = logFilePath; - - _handle = NativeWrapper.EvtOpenProviderMetadata(_session.Handle, _providerName, _logFilePath, 0, 0); - - _syncObject = new object(); - } - - internal EventLogHandle Handle - { - get - { - return _handle; - } - } - - public string Name - { - get { return _providerName; } - } - - public Guid Id - { - get - { - return (Guid)NativeWrapper.EvtGetPublisherMetadataProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataPublisherGuid); - } - } - - public string MessageFilePath - { - get - { - return (string)NativeWrapper.EvtGetPublisherMetadataProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataMessageFilePath); - } - } - - public string ResourceFilePath - { - get - { - return (string)NativeWrapper.EvtGetPublisherMetadataProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataResourceFilePath); - } - } - - public string ParameterFilePath - { - get - { - return (string)NativeWrapper.EvtGetPublisherMetadataProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataParameterFilePath); - } - } - - public Uri HelpLink - { - get - { - string helpLinkStr = (string)NativeWrapper.EvtGetPublisherMetadataProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataHelpLink); - if (helpLinkStr == null || helpLinkStr.Length == 0) - return null; - return new Uri(helpLinkStr); - } - } - - private uint ProviderMessageID - { - get - { - return (uint)NativeWrapper.EvtGetPublisherMetadataProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataPublisherMessageID); - } - } - - public string DisplayName - { - [System.Security.SecurityCritical] - get - { - uint msgId = (uint)this.ProviderMessageID; - - if (msgId == 0xffffffff) - return null; - - return NativeWrapper.EvtFormatMessage(_handle, msgId); - } - } - - public IList LogLinks - { - [System.Security.SecurityCritical] - get - { - EventLogHandle elHandle = EventLogHandle.Zero; - try - { - lock (_syncObject) - { - if (_channelReferences != null) - return _channelReferences; - - elHandle = NativeWrapper.EvtGetPublisherMetadataPropertyHandle(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataChannelReferences); - - int arraySize = NativeWrapper.EvtGetObjectArraySize(elHandle); - - List channelList = new List(arraySize); - - for (int index = 0; index < arraySize; index++) - { - string channelName = (string)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataChannelReferencePath); - - uint channelId = (uint)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataChannelReferenceID); - - uint flag = (uint)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataChannelReferenceFlags); - - bool isImported; - if (flag == (int)UnsafeNativeMethods.EvtChannelReferenceFlags.EvtChannelReferenceImported) isImported = true; - else isImported = false; - - int channelRefMessageId = unchecked((int)((uint)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataChannelReferenceMessageID))); - string channelRefDisplayName; - - // if channelRefMessageId == -1, we do not have anything in the message table. - if (channelRefMessageId == -1) - { - channelRefDisplayName = null; - } - else - { - channelRefDisplayName = NativeWrapper.EvtFormatMessage(_handle, unchecked((uint)channelRefMessageId)); - } - - if (channelRefDisplayName == null && isImported) - { - if (string.Compare(channelName, "Application", StringComparison.OrdinalIgnoreCase) == 0) - channelRefMessageId = 256; - else if (string.Compare(channelName, "System", StringComparison.OrdinalIgnoreCase) == 0) - channelRefMessageId = 258; - else if (string.Compare(channelName, "Security", StringComparison.OrdinalIgnoreCase) == 0) - channelRefMessageId = 257; - else - channelRefMessageId = -1; - - if (channelRefMessageId != -1) - { - if (_defaultProviderHandle.IsInvalid) - { - _defaultProviderHandle = NativeWrapper.EvtOpenProviderMetadata(_session.Handle, null, null, 0, 0); - } - - channelRefDisplayName = NativeWrapper.EvtFormatMessage(_defaultProviderHandle, unchecked((uint)channelRefMessageId)); - } - } - - channelList.Add(new EventLogLink(channelName, isImported, channelRefDisplayName, channelId)); - } - - _channelReferences = channelList.AsReadOnly(); - } - - return _channelReferences; - } - finally - { - elHandle.Dispose(); - } - } - } - - internal enum ObjectTypeName - { - Level = 0, - Opcode = 1, - Task = 2, - Keyword = 3 - } - - internal string FindStandardLevelDisplayName(string name, uint value) - { - if (_standardLevels == null) - _standardLevels = (List)GetProviderListProperty(_defaultProviderHandle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataLevels); - foreach (EventLevel standardLevel in _standardLevels) - { - if (standardLevel.Name == name && standardLevel.Value == value) - return standardLevel.DisplayName; - } - - return null; - } - - internal string FindStandardOpcodeDisplayName(string name, uint value) - { - if (_standardOpcodes == null) - _standardOpcodes = (List)GetProviderListProperty(_defaultProviderHandle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataOpcodes); - foreach (EventOpcode standardOpcode in _standardOpcodes) - { - if (standardOpcode.Name == name && standardOpcode.Value == value) - return standardOpcode.DisplayName; - } - - return null; - } - - internal string FindStandardKeywordDisplayName(string name, long value) - { - if (_standardKeywords == null) - _standardKeywords = (List)GetProviderListProperty(_defaultProviderHandle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataKeywords); - foreach (EventKeyword standardKeyword in _standardKeywords) - { - if (standardKeyword.Name == name && standardKeyword.Value == value) - return standardKeyword.DisplayName; - } - - return null; - } - - internal string FindStandardTaskDisplayName(string name, uint value) - { - if (_standardTasks == null) - _standardTasks = (List)GetProviderListProperty(_defaultProviderHandle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTasks); - foreach (EventTask standardTask in _standardTasks) - { - if (standardTask.Name == name && standardTask.Value == value) - return standardTask.DisplayName; - } - - return null; - } - - [System.Security.SecuritySafeCritical] - internal object GetProviderListProperty(EventLogHandle providerHandle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId metadataProperty) - { - EventLogHandle elHandle = EventLogHandle.Zero; - - try - { - UnsafeNativeMethods.EvtPublisherMetadataPropertyId propName; - UnsafeNativeMethods.EvtPublisherMetadataPropertyId propValue; - UnsafeNativeMethods.EvtPublisherMetadataPropertyId propMessageId; - ObjectTypeName objectTypeName; - - List levelList = null; - List opcodeList = null; - List keywordList = null; - List taskList = null; - - elHandle = NativeWrapper.EvtGetPublisherMetadataPropertyHandle(providerHandle, metadataProperty); - - int arraySize = NativeWrapper.EvtGetObjectArraySize(elHandle); - - switch (metadataProperty) - { - case UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataLevels: - propName = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataLevelName; - propValue = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataLevelValue; - propMessageId = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataLevelMessageID; - objectTypeName = ObjectTypeName.Level; - levelList = new List(arraySize); - break; - - case UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataOpcodes: - propName = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataOpcodeName; - propValue = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataOpcodeValue; - propMessageId = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataOpcodeMessageID; - objectTypeName = ObjectTypeName.Opcode; - opcodeList = new List(arraySize); - break; - - case UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataKeywords: - propName = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataKeywordName; - propValue = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataKeywordValue; - propMessageId = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataKeywordMessageID; - objectTypeName = ObjectTypeName.Keyword; - keywordList = new List(arraySize); - break; - - case UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTasks: - propName = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTaskName; - propValue = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTaskValue; - propMessageId = UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTaskMessageID; - objectTypeName = ObjectTypeName.Task; - taskList = new List(arraySize); - break; - - default: - return null; - } - - for (int index = 0; index < arraySize; index++) - { - string generalName = (string)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)propName); - - uint generalValue = 0; - long generalValueKeyword = 0; - if (objectTypeName != ObjectTypeName.Keyword) - { - generalValue = (uint)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)propValue); - } - else - { - generalValueKeyword = unchecked((long)((ulong)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)propValue))); - } - - int generalMessageId = unchecked((int)((uint)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)propMessageId))); - - string generalDisplayName = null; - - if (generalMessageId == -1) - { - if (providerHandle != _defaultProviderHandle) - { - if (_defaultProviderHandle.IsInvalid) - { - _defaultProviderHandle = NativeWrapper.EvtOpenProviderMetadata(_session.Handle, null, null, 0, 0); - } - - switch (objectTypeName) - { - case ObjectTypeName.Level: - generalDisplayName = FindStandardLevelDisplayName(generalName, generalValue); - break; - case ObjectTypeName.Opcode: - generalDisplayName = FindStandardOpcodeDisplayName(generalName, generalValue >> 16); - break; - case ObjectTypeName.Keyword: - generalDisplayName = FindStandardKeywordDisplayName(generalName, generalValueKeyword); - break; - case ObjectTypeName.Task: - generalDisplayName = FindStandardTaskDisplayName(generalName, generalValue); - break; - default: - generalDisplayName = null; - break; - } - } - } - else - { - generalDisplayName = NativeWrapper.EvtFormatMessage(providerHandle, unchecked((uint)generalMessageId)); - } - - switch (objectTypeName) - { - case ObjectTypeName.Level: - levelList.Add(new EventLevel(generalName, (int)generalValue, generalDisplayName)); - break; - case ObjectTypeName.Opcode: - opcodeList.Add(new EventOpcode(generalName, (int)(generalValue >> 16), generalDisplayName)); - break; - case ObjectTypeName.Keyword: - keywordList.Add(new EventKeyword(generalName, (long)generalValueKeyword, generalDisplayName)); - break; - case ObjectTypeName.Task: - Guid taskGuid = (Guid)NativeWrapper.EvtGetObjectArrayProperty(elHandle, index, (int)UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTaskEventGuid); - taskList.Add(new EventTask(generalName, (int)generalValue, generalDisplayName, taskGuid)); - break; - default: - return null; - } - } - - switch (objectTypeName) - { - case ObjectTypeName.Level: - return levelList; - case ObjectTypeName.Opcode: - return opcodeList; - case ObjectTypeName.Keyword: - return keywordList; - case ObjectTypeName.Task: - return taskList; - } - - return null; - } - finally - { - elHandle.Dispose(); - } - } - - public IList Levels - { - get - { - List el; - lock (_syncObject) - { - if (_levels != null) - return _levels; - - el = (List)this.GetProviderListProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataLevels); - _levels = el.AsReadOnly(); - } - - return _levels; - } - } - - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "Opcodes", Justification = "matell: Shipped public in 3.5, breaking change to fix now.")] - public IList Opcodes - { - get - { - List eo; - lock (_syncObject) - { - if (_opcodes != null) - return _opcodes; - - eo = (List)this.GetProviderListProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataOpcodes); - _opcodes = eo.AsReadOnly(); - } - - return _opcodes; - } - } - - public IList Keywords - { - get - { - List ek; - lock (_syncObject) - { - if (_keywords != null) - return _keywords; - - ek = (List)this.GetProviderListProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataKeywords); - _keywords = ek.AsReadOnly(); - } - - return _keywords; - } - } - - public IList Tasks - { - get - { - List et; - lock (_syncObject) - { - if (_tasks != null) - return _tasks; - - et = (List)this.GetProviderListProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTasks); - _tasks = et.AsReadOnly(); - } - - return _tasks; - } - } - - public IEnumerable Events - { - [System.Security.SecurityCritical] - get - { - List emList = new List(); - - EventLogHandle emEnumHandle = NativeWrapper.EvtOpenEventMetadataEnum(_handle, 0); - - using (emEnumHandle) - { - while (true) - { - EventLogHandle emHandle = emHandle = NativeWrapper.EvtNextEventMetadata(emEnumHandle, 0); - if (emHandle == null) - break; - - using (emHandle) - { - unchecked - { - uint emId = (uint)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventID); - byte emVersion = (byte)((uint)(NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventVersion))); - byte emChannelId = (byte)((uint)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventChannel)); - byte emLevel = (byte)((uint)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventLevel)); - byte emOpcode = (byte)((uint)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventOpcode)); - short emTask = (short)((uint)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventTask)); - long emKeywords = (long)(ulong)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventKeyword); - string emTemplate = (string)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventTemplate); - int messageId = (int)((uint)NativeWrapper.EvtGetEventMetadataProperty(emHandle, UnsafeNativeMethods.EvtEventMetadataPropertyId.EventMetadataEventMessageID)); - - string emMessage = (messageId == -1) - ? null - : NativeWrapper.EvtFormatMessage(_handle, (uint)messageId); - - EventMetadata em = new EventMetadata(emId, emVersion, emChannelId, emLevel, emOpcode, emTask, emKeywords, emTemplate, emMessage, this); - emList.Add(em); - } - } - } - - return emList.AsReadOnly(); - } - } - } - - // throws if Provider metadata has been uninstalled since this object was created. - - internal void CheckReleased() - { - lock (_syncObject) - { - this.GetProviderListProperty(_handle, UnsafeNativeMethods.EvtPublisherMetadataPropertyId.EvtPublisherMetadataTasks); - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - [System.Security.SecuritySafeCritical] - protected virtual void Dispose(bool disposing) - { - if (_handle != null && !_handle.IsInvalid) - _handle.Dispose(); - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/ProviderMetadataCachedInformation.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/ProviderMetadataCachedInformation.cs deleted file mode 100644 index 238dc13df8..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/ProviderMetadataCachedInformation.cs +++ /dev/null @@ -1,312 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** This internal class exposes a limited set of cached Provider -** metadata information. It is meant to support the Metadata -** -============================================================*/ - -using System.Globalization; -using System.Collections.Generic; - -namespace System.Diagnostics.Eventing.Reader -{ - // - // this class does not expose underlying Provider metadata objects. Instead it - // exposes a limited set of Provider metadata information from the cache. The reason - // for this is so the cache can easily Dispose the metadata object without worrying - // about who is using it. - // - internal class ProviderMetadataCachedInformation - { - private Dictionary _cache; - private int _maximumCacheSize; - private EventLogSession _session; - private string _logfile; - - private class ProviderMetadataId - { - private string _providerName; - private CultureInfo _cultureInfo; - - public ProviderMetadataId(string providerName, CultureInfo cultureInfo) - { - _providerName = providerName; - _cultureInfo = cultureInfo; - } - - public override bool Equals(object obj) - { - ProviderMetadataId rhs = obj as ProviderMetadataId; - if (rhs == null) return false; - if (_providerName.Equals(rhs._providerName) && (_cultureInfo == rhs._cultureInfo)) - return true; - return false; - } - - public override int GetHashCode() - { - return _providerName.GetHashCode() ^ _cultureInfo.GetHashCode(); - } - - public string ProviderName - { - get - { - return _providerName; - } - } - - public CultureInfo TheCultureInfo - { - get - { - return _cultureInfo; - } - } - } - - private class CacheItem - { - private ProviderMetadata _pm; - private DateTime _theTime; - - public CacheItem(ProviderMetadata pm) - { - _pm = pm; - _theTime = DateTime.Now; - } - - public DateTime TheTime - { - get - { - return _theTime; - } - - set - { - _theTime = value; - } - } - - public ProviderMetadata ProviderMetadata - { - get - { - return _pm; - } - } - } - - public ProviderMetadataCachedInformation(EventLogSession session, string logfile, int maximumCacheSize) - { - Debug.Assert(session != null); - _session = session; - _logfile = logfile; - _cache = new Dictionary(); - _maximumCacheSize = maximumCacheSize; - } - - private bool IsCacheFull() - { - return _cache.Count == _maximumCacheSize; - } - - private bool IsProviderinCache(ProviderMetadataId key) - { - return _cache.ContainsKey(key); - } - - private void DeleteCacheEntry(ProviderMetadataId key) - { - if (!IsProviderinCache(key)) - return; - - CacheItem value = _cache[key]; - _cache.Remove(key); - - value.ProviderMetadata.Dispose(); - } - - private void AddCacheEntry(ProviderMetadataId key, ProviderMetadata pm) - { - if (IsCacheFull()) - FlushOldestEntry(); - - CacheItem value = new CacheItem(pm); - _cache.Add(key, value); - return; - } - - private void FlushOldestEntry() - { - double maxPassedTime = -10; - DateTime timeNow = DateTime.Now; - ProviderMetadataId keyToDelete = null; - - // get the entry in the cache which was not accessed for the longest time. - foreach (KeyValuePair kvp in _cache) - { - // the time difference (in ms) between the timeNow and the last used time of each entry - TimeSpan timeDifference = timeNow.Subtract(kvp.Value.TheTime); - - // for the "unused" items (with ReferenceCount == 0) -> can possible be deleted. - if (timeDifference.TotalMilliseconds >= maxPassedTime) - { - maxPassedTime = timeDifference.TotalMilliseconds; - keyToDelete = kvp.Key; - } - } - - if (keyToDelete != null) - DeleteCacheEntry(keyToDelete); - } - - private static void UpdateCacheValueInfoForHit(CacheItem cacheItem) - { - cacheItem.TheTime = DateTime.Now; - } - - private ProviderMetadata GetProviderMetadata(ProviderMetadataId key) - { - if (!IsProviderinCache(key)) - { - ProviderMetadata pm; - try - { - pm = new ProviderMetadata(key.ProviderName, _session, key.TheCultureInfo, _logfile); - } - catch (EventLogNotFoundException) - { - pm = new ProviderMetadata(key.ProviderName, _session, key.TheCultureInfo); - } - - AddCacheEntry(key, pm); - return pm; - } - else - { - CacheItem cacheItem = _cache[key]; - - ProviderMetadata pm = cacheItem.ProviderMetadata; - - // - // check Provider metadata to be sure it's hasn't been - // uninstalled since last time it was used. - // - - try - { - pm.CheckReleased(); - UpdateCacheValueInfoForHit(cacheItem); - } - catch (EventLogException) - { - DeleteCacheEntry(key); - try - { - pm = new ProviderMetadata(key.ProviderName, _session, key.TheCultureInfo, _logfile); - } - catch (EventLogNotFoundException) - { - pm = new ProviderMetadata(key.ProviderName, _session, key.TheCultureInfo); - } - - AddCacheEntry(key, pm); - } - - return pm; - } - } - - // marking as TreatAsSafe because just passing around a reference to an EventLogHandle is safe. - [System.Security.SecuritySafeCritical] - public string GetFormatDescription(string ProviderName, EventLogHandle eventHandle) - { - lock (this) - { - ProviderMetadataId key = new ProviderMetadataId(ProviderName, CultureInfo.CurrentCulture); - - try - { - ProviderMetadata pm = GetProviderMetadata(key); - return NativeWrapper.EvtFormatMessageRenderName(pm.Handle, eventHandle, UnsafeNativeMethods.EvtFormatMessageFlags.EvtFormatMessageEvent); - } - catch (EventLogNotFoundException) - { - return null; - } - } - } - - public string GetFormatDescription(string ProviderName, EventLogHandle eventHandle, string[] values) - { - lock (this) - { - ProviderMetadataId key = new ProviderMetadataId(ProviderName, CultureInfo.CurrentCulture); - ProviderMetadata pm = GetProviderMetadata(key); - try - { - return NativeWrapper.EvtFormatMessageFormatDescription(pm.Handle, eventHandle, values); - } - catch (EventLogNotFoundException) - { - return null; - } - } - } - - // marking as TreatAsSafe because just passing around a reference to an EventLogHandle is safe. - [System.Security.SecuritySafeCritical] - public string GetLevelDisplayName(string ProviderName, EventLogHandle eventHandle) - { - lock (this) - { - ProviderMetadataId key = new ProviderMetadataId(ProviderName, CultureInfo.CurrentCulture); - ProviderMetadata pm = GetProviderMetadata(key); - return NativeWrapper.EvtFormatMessageRenderName(pm.Handle, eventHandle, UnsafeNativeMethods.EvtFormatMessageFlags.EvtFormatMessageLevel); - } - } - - // marking as TreatAsSafe because just passing around a reference to an EventLogHandle is safe. - [System.Security.SecuritySafeCritical] - public string GetOpcodeDisplayName(string ProviderName, EventLogHandle eventHandle) - { - lock (this) - { - ProviderMetadataId key = new ProviderMetadataId(ProviderName, CultureInfo.CurrentCulture); - ProviderMetadata pm = GetProviderMetadata(key); - return NativeWrapper.EvtFormatMessageRenderName(pm.Handle, eventHandle, UnsafeNativeMethods.EvtFormatMessageFlags.EvtFormatMessageOpcode); - } - } - - // marking as TreatAsSafe because just passing around a reference to an EventLogHandle is safe. - [System.Security.SecuritySafeCritical] - public string GetTaskDisplayName(string ProviderName, EventLogHandle eventHandle) - { - lock (this) - { - ProviderMetadataId key = new ProviderMetadataId(ProviderName, CultureInfo.CurrentCulture); - ProviderMetadata pm = GetProviderMetadata(key); - return NativeWrapper.EvtFormatMessageRenderName(pm.Handle, eventHandle, UnsafeNativeMethods.EvtFormatMessageFlags.EvtFormatMessageTask); - } - } - - // marking as TreatAsSafe because just passing around a reference to an EventLogHandle is safe. - [System.Security.SecuritySafeCritical] - public IEnumerable GetKeywordDisplayNames(string ProviderName, EventLogHandle eventHandle) - { - lock (this) - { - ProviderMetadataId key = new ProviderMetadataId(ProviderName, CultureInfo.CurrentCulture); - ProviderMetadata pm = GetProviderMetadata(key); - return NativeWrapper.EvtFormatMessageRenderKeywords(pm.Handle, eventHandle, UnsafeNativeMethods.EvtFormatMessageFlags.EvtFormatMessageKeyword); - } - } - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/Winmeta.cs b/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/Winmeta.cs deleted file mode 100644 index ecf9acdc08..0000000000 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/DotNetCode/Eventing/Reader/Winmeta.cs +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/*============================================================ -** -** -** Purpose: -** Contains eventing constants defined by the Windows -** environment. -** -============================================================*/ - -using System.Diagnostics.CodeAnalysis; - -namespace System.Diagnostics.Eventing.Reader -{ - /// - /// WindowsEventLevel. - /// - public enum StandardEventLevel - { - /// - /// Log always. - /// - LogAlways = 0, - /// - /// Only critical errors. - /// - Critical, - /// - /// All errors, including previous levels. - /// - Error, - /// - /// All warnings, including previous levels. - /// - Warning, - /// - /// All informational events, including previous levels. - /// - Informational, - /// - /// All events, including previous levels. - /// - Verbose - } - /// - /// WindowsEventTask. - /// - public enum StandardEventTask - { - /// - /// Undefined task. - /// - None = 0 - } - - /// - /// EventOpcode. - /// - [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "Opcode", Justification = "matell: Shipped public in 3.5, breaking change to fix now.")] - public enum StandardEventOpcode - { - /// - /// An informational event. - /// - Info = 0, - /// - /// An activity start event. - /// - Start, - /// - /// An activity end event. - /// - Stop, - /// - /// A trace collection start event. - /// - DataCollectionStart, - /// - /// A trace collection end event. - /// - DataCollectionStop, - /// - /// An extensional event. - /// - Extension, - /// - /// A reply event. - /// - Reply, - /// - /// An event representing the activity resuming from the suspension. - /// - Resume, - /// - /// An event representing the activity is suspended, pending another activity's completion. - /// - Suspend, - /// - /// An event representing the activity is transferred to another component, and can continue to work. - /// - Send, - /// - /// An event representing receiving an activity transfer from another component. - /// - Receive = 240 - } - - /// - /// EventOpcode. - /// - [Flags] - public enum StandardEventKeywords : long - { - /// - /// Wild card value. - /// - None = 0x0, - /// - /// Events providing response time information. - /// - ResponseTime = 0x01000000000000, - /// - /// WDI context events. - /// - WdiContext = 0x02000000000000, - /// - /// WDI diagnostic events. - /// - WdiDiagnostic = 0x04000000000000, - /// - /// SQM events. - /// - Sqm = 0x08000000000000, - /// - /// FAiled security audits. - /// - AuditFailure = 0x10000000000000, - /// - /// Successful security audits. - /// - AuditSuccess = 0x20000000000000, - /// - /// Incorrect CorrelationHint value mistakenly shipped in .NET 3.5. Don't use: duplicates AuditFailure. - /// - [Obsolete("Incorrect value: use CorrelationHint2 instead", false)] - CorrelationHint = 0x10000000000000, - /// - /// Transfer events where the related Activity ID is a computed value and not a GUID. - /// - CorrelationHint2 = 0x40000000000000, - /// - /// Events raised using classic eventlog API. - /// - EventLogClassic = 0x80000000000000 - } -} diff --git a/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj b/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj index c86785e18b..229b4eb454 100644 --- a/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj +++ b/src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj b/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj index b57902c0d6..a169a5bb92 100644 --- a/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj +++ b/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj b/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj index d4433fd220..57265ce2c8 100644 --- a/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj +++ b/src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/System.Management.Automation/System.Management.Automation.csproj b/src/System.Management.Automation/System.Management.Automation.csproj index 259a6f59ce..5e43415663 100644 --- a/src/System.Management.Automation/System.Management.Automation.csproj +++ b/src/System.Management.Automation/System.Management.Automation.csproj @@ -6,8 +6,11 @@ System.Management.Automation - + + + + diff --git a/test/powershell/Modules/Microsoft.PowerShell.Management/Set-Service.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Management/Set-Service.Tests.ps1 index b43777f27a..ce38dee9cd 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Management/Set-Service.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Management/Set-Service.Tests.ps1 @@ -336,9 +336,8 @@ Describe "Set/New/Remove-Service cmdlet tests" -Tags "Feature", "RequireAdminOnW Name = $servicename; BinaryPathName = "$PSHOME\pwsh.exe" } - $service = New-Service @parameters - $service | Should -Not -BeNullOrEmpty - $script = { Set-Service $service -DisplayName $newdisplayname } + + $script = { New-Service @parameters | Set-Service -DisplayName $newdisplayname } { & $script } | Should -Not -Throw $service = Get-Service -Name $servicename $service.DisplayName | Should -BeExactly $newdisplayname