public static PerformanceCounterCategory Create(string categoryName, string categoryHelp, PerformanceCounterCategoryType categoryType, CounterCreationDataCollection counterData) { if (categoryType < PerformanceCounterCategoryType.Unknown || categoryType > PerformanceCounterCategoryType.MultiInstance) { throw new ArgumentOutOfRangeException("categoryType"); } if (counterData == null) { throw new ArgumentNullException("counterData"); } CheckValidCategory(categoryName); if (categoryHelp != null) { // null categoryHelp is a valid option - it gets set to "Help Not Available" later on. CheckValidHelp(categoryHelp); } string machineName = "."; PerformanceCounterPermission permission = new PerformanceCounterPermission(PerformanceCounterPermissionAccess.Administer, machineName, categoryName); permission.Demand(); SharedUtils.CheckNtEnvironment(); Mutex mutex = null; RuntimeHelpers.PrepareConstrainedRegions(); try { SharedUtils.EnterMutex(perfMutexName, ref mutex); if (PerformanceCounterLib.IsCustomCategory(machineName, categoryName) || PerformanceCounterLib.CategoryExists(machineName, categoryName)) { throw new InvalidOperationException(SR.GetString(SR.PerformanceCategoryExists, categoryName)); } CheckValidCounterLayout(counterData); PerformanceCounterLib.RegisterCategory(categoryName, categoryType, categoryHelp, counterData); return(new PerformanceCounterCategory(categoryName, machineName)); } finally { if (mutex != null) { mutex.ReleaseMutex(); mutex.Close(); } } }
public static PerformanceCounterCategory Create(string categoryName, string categoryHelp, PerformanceCounterCategoryType categoryType, CounterCreationDataCollection counterData) { PerformanceCounterCategory category; if ((categoryType < PerformanceCounterCategoryType.Unknown) || (categoryType > PerformanceCounterCategoryType.MultiInstance)) { throw new ArgumentOutOfRangeException("categoryType"); } if (counterData == null) { throw new ArgumentNullException("counterData"); } CheckValidCategory(categoryName); if (categoryHelp != null) { CheckValidHelp(categoryHelp); } string machineName = "."; new PerformanceCounterPermission(PerformanceCounterPermissionAccess.Administer, machineName, categoryName).Demand(); SharedUtils.CheckNtEnvironment(); Mutex mutex = null; RuntimeHelpers.PrepareConstrainedRegions(); try { SharedUtils.EnterMutex("netfxperf.1.0", ref mutex); if (PerformanceCounterLib.IsCustomCategory(machineName, categoryName) || PerformanceCounterLib.CategoryExists(machineName, categoryName)) { throw new InvalidOperationException(SR.GetString("PerformanceCategoryExists", new object[] { categoryName })); } CheckValidCounterLayout(counterData); PerformanceCounterLib.RegisterCategory(categoryName, categoryType, categoryHelp, counterData); category = new PerformanceCounterCategory(categoryName, machineName); } finally { if (mutex != null) { mutex.ReleaseMutex(); mutex.Close(); } } return(category); }
public static PerformanceCounterCategory Create(string categoryName, string categoryHelp, PerformanceCounterCategoryType categoryType, CounterCreationDataCollection counterData) { if (categoryType < PerformanceCounterCategoryType.Unknown || categoryType > PerformanceCounterCategoryType.MultiInstance) { throw new ArgumentOutOfRangeException(nameof(categoryType)); } if (counterData == null) { throw new ArgumentNullException(nameof(counterData)); } CheckValidCategory(categoryName); if (categoryHelp != null) { // null categoryHelp is a valid option - it gets set to "Help Not Available" later on. CheckValidHelp(categoryHelp); } string machineName = "."; Mutex mutex = null; try { NetFrameworkUtils.EnterMutex(PerfMutexName, ref mutex); if (PerformanceCounterLib.IsCustomCategory(machineName, categoryName) || PerformanceCounterLib.CategoryExists(machineName, categoryName)) { throw new InvalidOperationException(SR.Format(SR.PerformanceCategoryExists, categoryName)); } CheckValidCounterLayout(counterData); PerformanceCounterLib.RegisterCategory(categoryName, categoryType, categoryHelp, counterData); return(new PerformanceCounterCategory(categoryName, machineName)); } finally { if (mutex != null) { mutex.ReleaseMutex(); mutex.Close(); } } }
internal static PerformanceCounterCategory Create(string categoryName, string categoryHelp, CounterCreationDataCollection counterData, string machineName, string localizedIniFilePath) { CheckValidCategory(categoryName); if (!SyntaxCheck.CheckMachineName(machineName)) { throw new ArgumentException(SR.GetString(SR.InvalidParameter, "machineName", machineName)); } if (machineName != "." && String.Compare(machineName, PerformanceCounterLib.ComputerName, true, CultureInfo.InvariantCulture) != 0) { throw new NotSupportedException(SR.GetString(SR.RemoteCounterAdmin)); } PerformanceCounterPermission permission = new PerformanceCounterPermission(PerformanceCounterPermissionAccess.Administer, machineName, categoryName); permission.Demand(); SharedUtils.CheckNtEnvironment(); Mutex mutex = SharedUtils.EnterMutex(perfMutexName); try { if (PerformanceCounterLib.IsCustomCategory(machineName, categoryName) || PerformanceCounterLib.CategoryExists(machineName, categoryName)) { throw new InvalidOperationException(SR.GetString(SR.PerformanceCategoryExists)); } // Ensure that there are no duplicate counter names being created Hashtable h = new Hashtable(); for (int i = 0; i < counterData.Count; i++) { // Ensure that all counter help strings aren't null or empty if (counterData[i].CounterName == null || counterData[i].CounterName.Length == 0) { throw new ArgumentException(SR.GetString(SR.InvalidCounterName)); } int currentSampleType = (int)counterData[i].CounterType; if ((currentSampleType == NativeMethods.PERF_AVERAGE_BULK) || (currentSampleType == NativeMethods.PERF_COUNTER_QUEUELEN_TYPE) || (currentSampleType == NativeMethods.PERF_COUNTER_LARGE_QUEUELEN_TYPE) || (currentSampleType == NativeMethods.PERF_100NSEC_MULTI_TIMER) || (currentSampleType == NativeMethods.PERF_100NSEC_MULTI_TIMER_INV) || (currentSampleType == NativeMethods.PERF_COUNTER_MULTI_TIMER) || (currentSampleType == NativeMethods.PERF_COUNTER_MULTI_TIMER_INV) || (currentSampleType == NativeMethods.PERF_RAW_FRACTION) || (currentSampleType == NativeMethods.PERF_SAMPLE_FRACTION) || (currentSampleType == NativeMethods.PERF_SAMPLE_COUNTER) || (currentSampleType == NativeMethods.PERF_AVERAGE_TIMER)) { if (counterData.Count <= (i + 1)) { throw new InvalidOperationException(SR.GetString(SR.CounterLayout)); } else { currentSampleType = (int)counterData[i + 1].CounterType; if (currentSampleType != NativeMethods.PERF_AVERAGE_BASE && currentSampleType != NativeMethods.PERF_COUNTER_MULTI_BASE && currentSampleType != NativeMethods.PERF_RAW_BASE && currentSampleType != NativeMethods.PERF_SAMPLE_BASE) { throw new InvalidOperationException(SR.GetString(SR.CounterLayout)); } } } else if (currentSampleType == NativeMethods.PERF_AVERAGE_BASE || currentSampleType == NativeMethods.PERF_COUNTER_MULTI_BASE || currentSampleType == NativeMethods.PERF_RAW_BASE || currentSampleType == NativeMethods.PERF_SAMPLE_BASE) { if (i == 0) { throw new InvalidOperationException(SR.GetString(SR.CounterLayout)); } else { currentSampleType = (int)counterData[i - 1].CounterType; if ( (currentSampleType != NativeMethods.PERF_AVERAGE_BULK) && (currentSampleType != NativeMethods.PERF_COUNTER_QUEUELEN_TYPE) && (currentSampleType != NativeMethods.PERF_COUNTER_LARGE_QUEUELEN_TYPE) && (currentSampleType != NativeMethods.PERF_100NSEC_MULTI_TIMER) && (currentSampleType != NativeMethods.PERF_100NSEC_MULTI_TIMER_INV) && (currentSampleType != NativeMethods.PERF_COUNTER_MULTI_TIMER) && (currentSampleType != NativeMethods.PERF_COUNTER_MULTI_TIMER_INV) && (currentSampleType != NativeMethods.PERF_RAW_FRACTION) && (currentSampleType != NativeMethods.PERF_SAMPLE_FRACTION) && (currentSampleType != NativeMethods.PERF_SAMPLE_COUNTER) && (currentSampleType != NativeMethods.PERF_AVERAGE_TIMER)) { throw new InvalidOperationException(SR.GetString(SR.CounterLayout)); } } } if (h.ContainsKey(counterData[i].CounterName)) { throw new ArgumentException(SR.GetString(SR.DuplicateCounterName, counterData[i].CounterName)); } else { h.Add(counterData[i].CounterName, String.Empty); // Ensure that all counter help strings aren't null or empty if (counterData[i].CounterHelp == null || counterData[i].CounterHelp.Length == 0) { counterData[i].CounterHelp = counterData[i].CounterName + " help"; } } } if (localizedIniFilePath == null) { PerformanceCounterLib.RegisterCategory(machineName, categoryName, categoryHelp, counterData); } else { PerformanceCounterLib.RegisterCategory(machineName, categoryName, categoryHelp, counterData, localizedIniFilePath); } return(new PerformanceCounterCategory(categoryName, machineName)); } finally { mutex.ReleaseMutex(); mutex.Close(); } }