00001
00002
00003
00004
00005 #ifndef __IARCHIVE_H
00006 #define __IARCHIVE_H
00007
00008 #include "IStream.h"
00009 #include "IProgress.h"
00010 #include "PropID.h"
00011
00012 #define ARCHIVE_INTERFACE_SUB(i, base, x) \
00013 DEFINE_GUID(IID_ ## i, \
00014 0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x06, 0x00, x, 0x00, 0x00); \
00015 struct i: public base
00016
00017 #define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x)
00018
00019 namespace NFileTimeType
00020 {
00021 enum EEnum
00022 {
00023 kWindows,
00024 kUnix,
00025 kDOS
00026 };
00027 }
00028
00029 namespace NArchive
00030 {
00031 enum
00032 {
00033 kName = 0,
00034 kClassID,
00035 kExtension,
00036 kAddExtension,
00037 kUpdate,
00038 kKeepName,
00039 kStartSignature,
00040 kFinishSignature,
00041 kAssociate
00042 };
00043
00044 namespace NExtract
00045 {
00046 namespace NAskMode
00047 {
00048 enum
00049 {
00050 kExtract = 0,
00051 kTest,
00052 kSkip,
00053 };
00054 }
00055 namespace NOperationResult
00056 {
00057 enum
00058 {
00059 kOK = 0,
00060 kUnSupportedMethod,
00061 kDataError,
00062 kCRCError,
00063 };
00064 }
00065 }
00066 namespace NUpdate
00067 {
00068 namespace NOperationResult
00069 {
00070 enum
00071 {
00072 kOK = 0,
00073 kError,
00074 };
00075 }
00076 }
00077 }
00078
00079 ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10)
00080 {
00081 STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) PURE;
00082 STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) PURE;
00083 };
00084
00085 ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20)
00086 {
00087 STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream,
00088 Int32 askExtractMode) PURE;
00089
00090 STDMETHOD(PrepareOperation)(Int32 askExtractMode) PURE;
00091 STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) PURE;
00092 };
00093
00094 ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30)
00095 {
00096 STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) PURE;
00097 STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) PURE;
00098 };
00099
00100 ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40)
00101 {
00102 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE;
00103 };
00104
00105 ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50)
00106 {
00107 STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE;
00108 };
00109
00110 ARCHIVE_INTERFACE(IInArchive, 0x60)
00111 {
00112 STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition,
00113 IArchiveOpenCallback *openArchiveCallback) PURE;
00114 STDMETHOD(Close)() PURE;
00115 STDMETHOD(GetNumberOfItems)(UInt32 *numItems) PURE;
00116 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
00117 STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems,
00118 Int32 testMode, IArchiveExtractCallback *extractCallback) PURE;
00119
00120
00121
00122
00123 STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) PURE;
00124
00125 STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties) PURE;
00126 STDMETHOD(GetPropertyInfo)(UInt32 index,
00127 BSTR *name, PROPID *propID, VARTYPE *varType) PURE;
00128
00129 STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties) PURE;
00130 STDMETHOD(GetArchivePropertyInfo)(UInt32 index,
00131 BSTR *name, PROPID *propID, VARTYPE *varType) PURE;
00132 };
00133
00134 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80)
00135 {
00136 STDMETHOD(GetUpdateItemInfo)(UInt32 index,
00137 Int32 *newData,
00138 Int32 *newProperties,
00139 UInt32 *indexInArchive
00140 ) PURE;
00141 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
00142 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) PURE;
00143 STDMETHOD(SetOperationResult)(Int32 operationResult) PURE;
00144 };
00145
00146 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82)
00147 {
00148 STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) PURE;
00149 STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) PURE;
00150 };
00151
00152 ARCHIVE_INTERFACE(IOutArchive, 0xA0)
00153 {
00154 STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems,
00155 IArchiveUpdateCallback *updateCallback) PURE;
00156 STDMETHOD(GetFileTimeType)(UInt32 *type) PURE;
00157 };
00158
00159 ARCHIVE_INTERFACE(ISetProperties, 0x03)
00160 {
00161 STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE;
00162 };
00163
00164 #endif