public static void ProcessRDTDocuments(RDTDocumentsDelegate processAction) { var runningDocumentTable = (IVsRunningDocumentTable)GetService(typeof(SVsRunningDocumentTable)); IEnumRunningDocuments ppenum; runningDocumentTable.GetRunningDocumentsEnum(out ppenum); var rgelt = new uint[10]; uint pceltFetched; while (HResult.Succeeded(ppenum.Next((uint)rgelt.Length, rgelt, out pceltFetched)) && pceltFetched > 0U) { for (var index = 0; (long)index < (long)pceltFetched; ++index) { uint pgrfRDTFlags; uint pdwReadLocks; uint pdwEditLocks; string pbstrMkDocument; IVsHierarchy ppHier; uint pitemid; IntPtr ppunkDocData; var documentInfo = runningDocumentTable.GetDocumentInfo(rgelt[index], out pgrfRDTFlags, out pdwReadLocks, out pdwEditLocks, out pbstrMkDocument, out ppHier, out pitemid, out ppunkDocData); try { if (HResult.Succeeded(documentInfo)) { if (!(ppunkDocData == IntPtr.Zero)) { processAction(pgrfRDTFlags, pdwReadLocks, pdwEditLocks, pbstrMkDocument, ppHier, pitemid, ppunkDocData); } } } finally { TFCommonUtil.SafeRelease(ppunkDocData); } } } }
public static IVsHierarchy GetNestedHierarchy(IVsHierarchy hierarchy, uint itemId, out uint nestedItemId) { var iidHierarchyNested = IID_IVsHierarchy; IntPtr ppHierarchyNested; var nestedHierarchy = hierarchy.GetNestedHierarchy(itemId, ref iidHierarchyNested, out ppHierarchyNested, out nestedItemId); IVsHierarchy vsHierarchy = null; try { if (HResult.Succeeded(nestedHierarchy)) { if (ppHierarchyNested != IntPtr.Zero) { vsHierarchy = (IVsHierarchy)Marshal.GetObjectForIUnknown(ppHierarchyNested); } } } finally { TFCommonUtil.SafeRelease(ppHierarchyNested); } return(vsHierarchy); }