public static ComStorage OpenStorageOnStream(Stream stream, ComStorage.OpenMode openMode) { Util.ThrowOnNullArgument(stream, "stream"); ComStorage.CheckOpenMode(openMode, "openMode", ComStorage.validOpenModes); ComStorage comStorage = null; Interop.IStorage storage = null; try { LockBytesOnStream lockBytes = new LockBytesOnStream(stream); int num = Interop.StgOpenStorageOnILockBytes(lockBytes, IntPtr.Zero, (uint)openMode, IntPtr.Zero, 0U, out storage); if (num != 0) { throw new MsgStorageException(MsgStorageErrorCode.OpenStorageOnStreamFailed, MsgStorageStrings.FailedOpenStorage("ILockBytes"), num); } comStorage = new ComStorage(storage); } finally { if (comStorage == null && storage != null) { Marshal.ReleaseComObject(storage); } } return(comStorage); }
public static ComStorage OpenFileStorage(string filename, ComStorage.OpenMode openMode) { Util.ThrowOnNullArgument(filename, "filename"); ComStorage.CheckOpenMode(openMode, "openMode", ComStorage.validOpenModes); object obj = null; ComStorage result; try { Guid iidistorage = Interop.IIDIStorage; int num = Interop.StgOpenStorageEx(filename, (uint)openMode, 0, 0U, IntPtr.Zero, IntPtr.Zero, ref iidistorage, out obj); if (num != 0) { throw new MsgStorageException(MsgStorageErrorCode.OpenStorageFileFailed, MsgStorageStrings.FailedOpenStorage(filename), num); } Interop.IStorage storage = obj as Interop.IStorage; if (storage == null) { throw new MsgStorageException(MsgStorageErrorCode.OpenStorageFileFailed, MsgStorageStrings.FailedOpenStorage(filename)); } obj = null; result = new ComStorage(storage); } finally { if (obj != null) { Marshal.ReleaseComObject(obj); } } return(result); }