Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }