| /******************************************************************************* | 
 |  * 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  | 
 |     } | 
 | } |