private static int CreateSymbolReader(ISymUnmanagedBinder3 binder, IntPtr importer, string filename, string searchPath, bool avoidLocks, out ISymUnmanagedReader reader) { if (!avoidLocks) { return(binder.GetReaderForFile(importer, filename, searchPath, out reader)); } reader = null; string pdbFilename = Path.ChangeExtension(filename, ".pdb"); if (!File.Exists(pdbFilename)) { return(E_PDB_NOT_FOUND); } try { byte[] bytes = File.ReadAllBytes(pdbFilename); #if USE_ISTREAM IStream stream = new ComStream(new MemoryStream(bytes, 0, bytes.Length, false, true)); return(binder.GetReaderFromStream(importer, stream, out reader)); #else IDiaReadExeAtOffsetCallback callback = new DiaReadExeAtOffsetCallback(bytes); return(binder.GetReaderFromCallback(importer, filename, searchPath, CorSymSearchPolicyAttributes.AllowReferencePathAccess, callback, out reader)); #endif } catch (IOException) { return(E_FAIL); } }
private static int CreateSymbolReader(ISymUnmanagedBinder3 binder, IntPtr importer, string filename, string searchPath, bool avoidLocks, out ISymUnmanagedReader reader) { if (! avoidLocks) return binder.GetReaderForFile(importer, filename, searchPath, out reader); reader = null; string pdbFilename = Path.ChangeExtension(filename, ".pdb"); if (!File.Exists(pdbFilename)) return E_PDB_NOT_FOUND; try { byte[] bytes = File.ReadAllBytes(pdbFilename); #if USE_ISTREAM IStream stream = new ComStream(new MemoryStream(bytes, 0, bytes.Length, false, true)); return binder.GetReaderFromStream(importer, stream, out reader); #else IDiaReadExeAtOffsetCallback callback = new DiaReadExeAtOffsetCallback(bytes); return binder.GetReaderFromCallback(importer, filename, searchPath, CorSymSearchPolicyAttributes.AllowReferencePathAccess, callback, out reader); #endif } catch (IOException) { return E_FAIL; } }