1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// IArchive.h
2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __IARCHIVE_H
4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __IARCHIVE_H
5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../IProgress.h"
7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../IStream.h"
8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../PropID.h"
9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define ARCHIVE_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 6, x)
11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x)
12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
13baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NFileTimeType
14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  enum EEnum
16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kWindows,
18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kUnix,
19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kDOS
20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  };
21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
23baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NArchive
24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  enum
26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kName = 0,
28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kClassID,
29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kExtension,
30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kAddExtension,
31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kUpdate,
32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kKeepName,
33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kStartSignature,
34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kFinishSignature,
35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    kAssociate
36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  };
37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  namespace NExtract
39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    namespace NAskMode
41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    {
42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      enum
43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      {
44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kExtract = 0,
45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kTest,
46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kSkip
47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      };
48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    namespace NOperationResult
50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    {
51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      enum
52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      {
53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kOK = 0,
54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kUnSupportedMethod,
55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kDataError,
56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kCRCError
57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      };
58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  namespace NUpdate
61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    namespace NOperationResult
63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    {
64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      enum
65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      {
66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kOK = 0,
67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        kError
68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      };
69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
72baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
73baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IArchiveOpenCallback(x) \
74baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) x; \
75baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) x; \
76baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
77baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10)
78baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
79baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveOpenCallback(PURE);
80baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
81baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
82baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
83baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IArchiveExtractCallback(x) \
84baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IProgress(x) \
85baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream,  Int32 askExtractMode) x; \
86baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(PrepareOperation)(Int32 askExtractMode) x; \
87baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) x; \
88baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
89baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20)
90baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
91baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveExtractCallback(PURE)
92baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
93baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
94baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
95baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IArchiveOpenVolumeCallback(x) \
96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) x; \
97baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) x; \
98baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
99baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30)
100baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
101baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveOpenVolumeCallback(PURE);
102baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
103baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
104baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
105baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(IInArchiveGetStream, 0x40)
106baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
107baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE;
108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
110baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
111baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50)
112baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
113baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE;
114baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
115baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
116baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
117baa3858d3f5d128a5c8466b700098109edcad5f2repo sync/*
118baa3858d3f5d128a5c8466b700098109edcad5f2repo syncIInArchive::Extract:
119baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  indices must be sorted
120baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  numItems = 0xFFFFFFFF means "all files"
121baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  testMode != 0 means "test files without writing to outStream"
122baa3858d3f5d128a5c8466b700098109edcad5f2repo sync*/
123baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
124baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IInArchive(x) \
125baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openArchiveCallback) x; \
126baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(Close)() x; \
127baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetNumberOfItems)(UInt32 *numItems) x; \
128baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \
129baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback) x; \
130baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) x; \
131baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties) x; \
132baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetPropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x; \
133baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties) x; \
134baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x;
135baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
136baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(IInArchive, 0x60)
137baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
138baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IInArchive(PURE)
139baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
140baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
141baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(IArchiveOpenSeq, 0x61)
142baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
143baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(OpenSeq)(ISequentialInStream *stream) PURE;
144baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
145baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
146baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IArchiveUpdateCallback(x) \
147baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IProgress(x); \
148baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetUpdateItemInfo)(UInt32 index,  \
149baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      Int32 *newData, /*1 - new data, 0 - old data */ \
150baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      Int32 *newProperties, /* 1 - new properties, 0 - old properties */ \
151baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      UInt32 *indexInArchive /* -1 if there is no in archive, or if doesn't matter */ \
152baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      )  x; \
153baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \
154baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) x; \
155baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(SetOperationResult)(Int32 operationResult) x; \
156baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
157baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80)
158baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
159baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveUpdateCallback(PURE);
160baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
161baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
162baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IArchiveUpdateCallback2(x) \
163baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveUpdateCallback(x) \
164baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) x; \
165baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) x; \
166baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
167baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82)
168baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
169baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveUpdateCallback2(PURE);
170baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
171baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
172baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
173baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IOutArchive(x) \
174baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback) x; \
175baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(GetFileTimeType)(UInt32 *type) x;
176baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
177baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(IOutArchive, 0xA0)
178baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
179baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IOutArchive(PURE)
180baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
181baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
182baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
183baa3858d3f5d128a5c8466b700098109edcad5f2repo syncARCHIVE_INTERFACE(ISetProperties, 0x03)
184baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
185baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE;
186baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
187baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
188baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
189baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_GetProp(k) \
190baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \
191baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \
192baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    const STATPROPSTG &srcItem = k[index]; \
193baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    *propID = srcItem.propid; *varType = srcItem.vt; *name = 0; return S_OK; } \
194baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
195baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_GetProp_WITH_NAME(k) \
196baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \
197baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \
198baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    const STATPROPSTG &srcItem = k[index]; \
199baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    *propID = srcItem.propid; *varType = srcItem.vt; \
200baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    if (srcItem.lpwstrName == 0) *name = 0; else *name = ::SysAllocString(srcItem.lpwstrName); return S_OK; } \
201baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
202baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_Props \
203baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \
204baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \
205baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp(kProps)
206baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
207baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_Props_WITH_NAME \
208baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \
209baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \
210baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kProps)
211baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
212baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
213baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_ArcProps \
214baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \
215baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; } \
216baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp(kArcProps)
217baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
218baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_ArcProps_WITH_NAME \
219baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \
220baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; } \
221baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kArcProps)
222baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
223baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_ArcProps_NO_Table \
224baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \
225baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { *numProperties = 0; return S_OK; } \
226baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetArchivePropertyInfo(UInt32, BSTR *, PROPID *, VARTYPE *) \
227baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { return E_NOTIMPL; } \
228baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
229baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IMP_IInArchive_ArcProps_NO \
230baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  IMP_IInArchive_ArcProps_NO_Table \
231baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHODIMP CHandler::GetArchiveProperty(PROPID, PROPVARIANT *value) \
232baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    { value->vt = VT_EMPTY; return S_OK; }
233baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
234baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
235