private static ThreadInfo GetThreadInfo(NativeMethods.PERF_OBJECT_TYPE type, IntPtr instancePtr, NativeMethods.PERF_COUNTER_DEFINITION[] counters) { ThreadInfo threadInfo = new ThreadInfo(); for (int i = 0; i < counters.Length; i++) { NativeMethods.PERF_COUNTER_DEFINITION pERF_COUNTER_DEFINITION = counters[i]; long num = NtProcessManager.ReadCounterValue(pERF_COUNTER_DEFINITION.CounterType, (IntPtr)((long)instancePtr + (long)pERF_COUNTER_DEFINITION.CounterOffset)); switch (pERF_COUNTER_DEFINITION.CounterNameTitlePtr) { case 11: threadInfo.threadId = (int)num; break; case 12: threadInfo.processId = (int)num; break; case 13: threadInfo.basePriority = (int)num; break; case 14: threadInfo.currentPriority = (int)num; break; case 17: threadInfo.startAddress = (IntPtr)num; break; case 18: threadInfo.threadState = (System.Diagnostics.ThreadState)num; break; case 19: threadInfo.threadWaitReason = NtProcessManager.GetThreadWaitReason((int)num); break; } } return(threadInfo); }
private static ProcessInfo GetProcessInfo(NativeMethods.PERF_OBJECT_TYPE type, IntPtr instancePtr, NativeMethods.PERF_COUNTER_DEFINITION[] counters) { ProcessInfo processInfo = new ProcessInfo(); for (int i = 0; i < counters.Length; i++) { NativeMethods.PERF_COUNTER_DEFINITION pERF_COUNTER_DEFINITION = counters[i]; long num = NtProcessManager.ReadCounterValue(pERF_COUNTER_DEFINITION.CounterType, (IntPtr)((long)instancePtr + (long)pERF_COUNTER_DEFINITION.CounterOffset)); switch (pERF_COUNTER_DEFINITION.CounterNameTitlePtr) { case 0: processInfo.handleCount = (int)num; break; case 1: processInfo.poolPagedBytes = num; break; case 2: processInfo.poolNonpagedBytes = num; break; case 4: processInfo.virtualBytesPeak = num; break; case 5: processInfo.virtualBytes = num; break; case 6: processInfo.privateBytes = num; break; case 7: processInfo.pageFileBytes = num; break; case 8: processInfo.pageFileBytesPeak = num; break; case 9: processInfo.workingSetPeak = num; break; case 10: processInfo.workingSet = num; break; case 12: processInfo.processId = (int)num; break; case 13: processInfo.basePriority = (int)num; break; } } return(processInfo); }