| /******************************************************************************* |
| * You may amend and distribute as you like, but don't remove this header! |
| * |
| * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets. |
| * See http://www.codeplex.com/EPPlus for details. |
| * |
| * Copyright (C) 2011 Jan Källman |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * See the GNU Lesser General Public License for more details. |
| * |
| * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php |
| * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html |
| * |
| * All code and executables are provided "as is" with no warranty either express or implied. |
| * The author accepts no liability for any damage or loss of business that this product may cause. |
| ************************************************************************************** |
| * This class is created with the help of the MS-OFFCRYPTO PDF documentation... http://msdn.microsoft.com/en-us/library/cc313071(office.12).aspx |
| * Decryption library for Office Open XML files(Lyquidity) and Sminks very nice example |
| * on "Reading compound documents in c#" on Stackoverflow. Many thanks! |
| *************************************************************************************** |
| * Code change notes: |
| * |
| * Author Change Date |
| ******************************************************************************* |
| * Jan Källman Added 10-AUG-2010 |
| * Jan Källman License changed GPL-->LGPL 2011-12-16 |
| *******************************************************************************/ |
| using System; |
| using System.Collections.Generic; |
| using System.Text; |
| using System.Runtime.InteropServices; |
| using comTypes=System.Runtime.InteropServices.ComTypes; |
| using System.IO; |
| using System.Security.Cryptography; |
| using System.Xml; |
| namespace OfficeOpenXml.Utils |
| { |
| [ComImport] |
| [Guid("0000000d-0000-0000-C000-000000000046")] |
| [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] |
| internal interface IEnumSTATSTG |
| { |
| // The user needs to allocate an STATSTG array whose size is celt. |
| [PreserveSig] |
| uint Next( |
| uint celt, |
| [MarshalAs(UnmanagedType.LPArray), Out] |
| System.Runtime.InteropServices.ComTypes.STATSTG[] rgelt, |
| out uint pceltFetched |
| ); |
| |
| void Skip(uint celt); |
| |
| void Reset(); |
| |
| [return: MarshalAs(UnmanagedType.Interface)] |
| IEnumSTATSTG Clone(); |
| } |
| |
| [ComImport] |
| [Guid("0000000b-0000-0000-C000-000000000046")] |
| [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] |
| interface IStorage |
| { |
| void CreateStream( |
| /* [string][in] */ string pwcsName, |
| /* [in] */ uint grfMode, |
| /* [in] */ uint reserved1, |
| /* [in] */ uint reserved2, |
| /* [out] */ out comTypes.IStream ppstm); |
| |
| void OpenStream( |
| /* [string][in] */ string pwcsName, |
| /* [unique][in] */ IntPtr reserved1, |
| /* [in] */ uint grfMode, |
| /* [in] */ uint reserved2, |
| /* [out] */ out comTypes.IStream ppstm); |
| |
| void CreateStorage( |
| /* [string][in] */ string pwcsName, |
| /* [in] */ uint grfMode, |
| /* [in] */ uint reserved1, |
| /* [in] */ uint reserved2, |
| /* [out] */ out IStorage ppstg); |
| |
| void OpenStorage( |
| /* [string][unique][in] */ string pwcsName, |
| /* [unique][in] */ IStorage pstgPriority, |
| /* [in] */ uint grfMode, |
| /* [unique][in] */ IntPtr snbExclude, |
| /* [in] */ uint reserved, |
| /* [out] */ out IStorage ppstg); |
| |
| void CopyTo( |
| [InAttribute] uint ciidExclude, |
| [InAttribute] Guid[] rgiidExclude, |
| [InAttribute] IntPtr snbExclude, |
| [InAttribute] IStorage pstgDest |
| ); |
| |
| void MoveElementTo( |
| /* [string][in] */ string pwcsName, |
| /* [unique][in] */ IStorage pstgDest, |
| /* [string][in] */ string pwcsNewName, |
| /* [in] */ uint grfFlags); |
| |
| void Commit( |
| /* [in] */ uint grfCommitFlags); |
| |
| void Revert(); |
| |
| void EnumElements( |
| /* [in] */ uint reserved1, |
| /* [size_is][unique][in] */ IntPtr reserved2, |
| /* [in] */ uint reserved3, |
| /* [out] */ out IEnumSTATSTG ppenum); |
| |
| void DestroyElement( |
| /* [string][in] */ string pwcsName); |
| |
| void RenameElement( |
| /* [string][in] */ string pwcsOldName, |
| /* [string][in] */ string pwcsNewName); |
| |
| void SetElementTimes( |
| /* [string][unique][in] */ string pwcsName, |
| /* [unique][in] */ System.Runtime.InteropServices.ComTypes.FILETIME pctime, |
| /* [unique][in] */ System.Runtime.InteropServices.ComTypes.FILETIME patime, |
| /* [unique][in] */ System.Runtime.InteropServices.ComTypes.FILETIME pmtime); |
| |
| void SetClass( |
| /* [in] */ Guid clsid); |
| |
| void SetStateBits( |
| /* [in] */ uint grfStateBits, |
| /* [in] */ uint grfMask); |
| |
| void Stat( |
| /* [out] */ out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, |
| /* [in] */ uint grfStatFlag); |
| |
| } |
| [ComVisible(false)] |
| [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("0000000A-0000-0000-C000-000000000046")] |
| internal interface ILockBytes |
| { |
| void ReadAt(long ulOffset, System.IntPtr pv, int cb, out UIntPtr pcbRead); |
| void WriteAt(long ulOffset, System.IntPtr pv, int cb, out UIntPtr pcbWritten); |
| void Flush(); |
| void SetSize(long cb); |
| void LockRegion(long libOffset, long cb, int dwLockType); |
| void UnlockRegion(long libOffset, long cb, int dwLockType); |
| void Stat(out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, int grfStatFlag); |
| } |
| [Flags] |
| internal enum STGM : int |
| { |
| DIRECT = 0x00000000, |
| TRANSACTED = 0x00010000, |
| SIMPLE = 0x08000000, |
| READ = 0x00000000, |
| WRITE = 0x00000001, |
| READWRITE = 0x00000002, |
| SHARE_DENY_NONE = 0x00000040, |
| SHARE_DENY_READ = 0x00000030, |
| SHARE_DENY_WRITE = 0x00000020, |
| SHARE_EXCLUSIVE = 0x00000010, |
| PRIORITY = 0x00040000, |
| DELETEONRELEASE = 0x04000000, |
| NOSCRATCH = 0x00100000, |
| CREATE = 0x00001000, |
| CONVERT = 0x00020000, |
| FAILIFTHERE = 0x00000000, |
| NOSNAPSHOT = 0x00200000, |
| DIRECT_SWMR = 0x00400000, |
| } |
| |
| internal enum STATFLAG : uint |
| { |
| STATFLAG_DEFAULT = 0, |
| STATFLAG_NONAME = 1, |
| STATFLAG_NOOPEN = 2 |
| } |
| |
| internal enum STGTY : int |
| { |
| STGTY_STORAGE = 1, |
| STGTY_STREAM = 2, |
| STGTY_LOCKBYTES = 3, |
| STGTY_PROPERTY = 4 |
| } |
| } |