public int GetThreadProperties100(uint dwFields, THREADPROPERTIES100[] ptp) { enum_THREADPROPERTY_FIELDS100 fields = (enum_THREADPROPERTY_FIELDS100)dwFields; if (ptp == null) { throw new ArgumentNullException("ptp"); } if (ptp.Length == 0) { throw new ArgumentException(); } ptp[0].dwFields = 0; // thread ID if ((dwFields & (uint)enum_THREADPROPERTY_FIELDS100.TPF100_ID) != 0) { if (ErrorHandler.Succeeded(GetThreadId(out ptp[0].dwThreadId))) { ptp[0].dwManagedThreadId = ptp[0].dwThreadId; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_ID; } } // thread location if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_LOCATION) != 0) { if (TryGetLocation(out ptp[0].bstrLocation)) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_LOCATION; } } // name if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_NAME) != 0) { if (ErrorHandler.Succeeded(GetName(out ptp[0].bstrName))) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_NAME; } } // display name if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME) != 0) { if (ErrorHandler.Succeeded(GetName(out ptp[0].bstrDisplayName))) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME; } } // display name priority if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME_PRIORITY) != 0) { ptp[0].DisplayNamePriority = (uint)DISPLAY_NAME_PRIORITY100.DISPLAY_NAME_PRI_NORMAL_100; ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_DISPLAY_NAME_PRIORITY; } // thread priority (string) if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY) != 0) { if (ErrorHandler.Succeeded(GetThreadPriority(out ptp[0].bstrPriority))) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY; } } // thread priority (id) if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID) != 0) { if (ErrorHandler.Succeeded(GetThreadPriorityId(out ptp[0].priorityId))) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_PRIORITY_ID; } } #if !HIDE_THREADS ThreadStatus status = _thread.GetStatus(); int suspendCount = status != ThreadStatus.Zombie ? _thread.GetSuspendCount() : 0; // thread state if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_STATE) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_STATE; enum_THREADSTATE vsthreadState = 0; if (suspendCount > 1) { vsthreadState = enum_THREADSTATE.THREADSTATE_FROZEN; } else if (status == ThreadStatus.Zombie) { vsthreadState = enum_THREADSTATE.THREADSTATE_DEAD; } else if (status == ThreadStatus.Sleeping || status == ThreadStatus.Wait || status == ThreadStatus.Monitor) { vsthreadState = enum_THREADSTATE.THREADSTATE_STOPPED; } else if (status == ThreadStatus.NotStarted) { vsthreadState = enum_THREADSTATE.THREADSTATE_FRESH; } else { vsthreadState = enum_THREADSTATE.THREADSTATE_RUNNING; } ptp[0].dwThreadState = (uint)vsthreadState; } // suspend count if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_SUSPENDCOUNT) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_SUSPENDCOUNT; ptp[0].dwSuspendCount = (uint)suspendCount; } #endif #if false // affinity if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_AFFINITY; ptp[0].AffinityMask = ~0UL; } #endif // category if ((fields & enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY) != 0) { ptp[0].dwFields |= (uint)enum_THREADPROPERTY_FIELDS100.TPF100_CATEGORY; ptp[0].dwThreadCategory = (uint)_category; } return(VSConstants.S_OK); }
public int GetThreadProperties(enum_THREADPROPERTY_FIELDS dwFields, THREADPROPERTIES[] ptp) { if (ptp == null) { throw new ArgumentNullException("ptp"); } if (ptp.Length == 0) { throw new ArgumentException(); } ptp[0].dwFields = 0; if ((dwFields & enum_THREADPROPERTY_FIELDS.TPF_ID) != 0) { if (ErrorHandler.Succeeded(GetThreadId(out ptp[0].dwThreadId))) { ptp[0].dwFields |= enum_THREADPROPERTY_FIELDS.TPF_ID; } } if ((dwFields & enum_THREADPROPERTY_FIELDS.TPF_LOCATION) != 0) { if (TryGetLocation(out ptp[0].bstrLocation)) { ptp[0].dwFields |= enum_THREADPROPERTY_FIELDS.TPF_LOCATION; } } if ((dwFields & enum_THREADPROPERTY_FIELDS.TPF_NAME) != 0) { if (ErrorHandler.Succeeded(GetName(out ptp[0].bstrName))) { ptp[0].dwFields |= enum_THREADPROPERTY_FIELDS.TPF_NAME; } } if ((dwFields & enum_THREADPROPERTY_FIELDS.TPF_PRIORITY) != 0) { if (ErrorHandler.Succeeded(GetThreadPriority(out ptp[0].bstrPriority))) { ptp[0].dwFields |= enum_THREADPROPERTY_FIELDS.TPF_PRIORITY; } } #if !HIDE_THREADS ThreadStatus status = _thread.GetStatus(); int suspendCount = status != ThreadStatus.Zombie ? _thread.GetSuspendCount() : 0; if ((dwFields & enum_THREADPROPERTY_FIELDS.TPF_STATE) != 0) { ptp[0].dwFields |= enum_THREADPROPERTY_FIELDS.TPF_STATE; enum_THREADSTATE vsthreadState = 0; if (suspendCount > 1) { vsthreadState = enum_THREADSTATE.THREADSTATE_FROZEN; } else if (status == ThreadStatus.Zombie) { vsthreadState = enum_THREADSTATE.THREADSTATE_DEAD; } else if (status == ThreadStatus.Sleeping || status == ThreadStatus.Wait || status == ThreadStatus.Monitor) { vsthreadState = enum_THREADSTATE.THREADSTATE_STOPPED; } else if (status == ThreadStatus.NotStarted) { vsthreadState = enum_THREADSTATE.THREADSTATE_FRESH; } else { vsthreadState = enum_THREADSTATE.THREADSTATE_RUNNING; } ptp[0].dwThreadState = (uint)vsthreadState; } if ((dwFields & enum_THREADPROPERTY_FIELDS.TPF_SUSPENDCOUNT) != 0) { ptp[0].dwFields |= enum_THREADPROPERTY_FIELDS.TPF_SUSPENDCOUNT; ptp[0].dwSuspendCount = (uint)suspendCount; } #endif return(VSConstants.S_OK); }