master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifndef _INC_MSRDC
  7#define _INC_MSRDC
  8
  9#if (_WIN32_WINNT >= 0x0600)
 10
 11typedef UINT SimilarityFileIndexT;
 12
 13typedef enum _GeneratorParametersType {
 14  RDCGENTYPE_Unused      = 0,
 15  RDCGENTYPE_FilterMax   = 1 
 16} GeneratorParametersType;
 17
 18typedef enum _RdcCreatedTables {
 19  RDCTABLE_InvalidOrUnknown   = 0,
 20  RDCTABLE_Existing           = 1,
 21  RDCTABLE_New                = 2 
 22} RdcCreatedTables;
 23
 24typedef enum _RdcMappingAccessMode {
 25  RDCMAPPING_Undefined   = 0,
 26  RDCMAPPING_ReadOnly    = 1,
 27  RDCMAPPING_ReadWrite   = 2 
 28} RdcMappingAccessMode;
 29
 30typedef enum _RDC_ErrorCode {
 31  RDC_NoError                  = 0,
 32  RDC_HeaderVersionNewer       = 1,
 33  RDC_HeaderVersionOlder       = 2,
 34  RDC_HeaderMissingOrCorrupt   = 3,
 35  RDC_HeaderWrongType          = 4,
 36  RDC_DataMissingOrCorrupt     = 5,
 37  RDC_DataTooManyRecords       = 6,
 38  RDC_FileChecksumMismatch     = 7,
 39  RDC_ApplicationError         = 8,
 40  RDC_Aborted                  = 9,
 41  RDC_Win32Error               = 10 
 42} RDC_ErrorCode;
 43
 44typedef enum _RdcNeedType {
 45  RDCNEED_SOURCE     = 0,
 46  RDCNEED_TARGET     = 1,
 47  RDCNEED_SEED       = 2,
 48  RDCNEED_SEED_MAX   = 255 
 49} RdcNeedType;
 50
 51typedef struct _FindSimilarFileIndexResults {
 52  SimilarityFileIndexT m_FileIndex;
 53  unsigned             m_MatchCount;
 54} FindSimilarFileIndexResults;
 55
 56typedef struct _RdcBufferPointer {
 57  ULONG m_Size;
 58  ULONG m_Used;
 59  BYTE  *m_Data;
 60} RdcBufferPointer;
 61
 62typedef struct _RdcNeed {
 63  RdcNeedType      m_BlockType;
 64  unsigned __int64 m_FileOffset;
 65  unsigned __int64 m_BlockLength;
 66} RdcNeed;
 67
 68typedef struct _RdcNeedPointer {
 69  ULONG   m_Size;
 70  ULONG   m_Used;
 71  RdcNeed *m_Data;
 72} RdcNeedPointer;
 73
 74typedef struct _RdcSignature {
 75  BYTE   m_Signature[MSRDC_SIGNATURE_HASHSIZE];
 76  USHORT m_BlockLength;
 77} RdcSignature;
 78
 79typedef struct _RdcSignaturePointer {
 80  ULONG        m_Size;
 81  ULONG        m_Used;
 82  RdcSignature *m_Data;
 83} RdcSignaturePointer;
 84
 85typedef struct _SimilarityData {
 86  unsigned char m_Data[16];
 87} SimilarityData;
 88
 89typedef struct _SimilarityDumpData {
 90  SimilarityFileIndexT m_FileIndex;
 91  SimilarityData       m_Data;
 92} SimilarityDumpData;
 93
 94typedef struct _SimilarityFileId {
 95  byte m_FileId[SimilarityFileIdMaxSize];
 96} SimilarityFileId;
 97
 98struct SimilarityMappedViewInfo {
 99  unsigned char *m_Data;
100  DWORD         m_Length;
101};
102
103#undef  INTERFACE
104#define INTERFACE IRdcFileWriter
105#ifdef __GNUC__
106#warning COM interfaces layout in this header has not been verified.
107#warning COM interfaces with incorrect layout may not work at all.
108__MINGW_BROKEN_INTERFACE(INTERFACE)
109#endif
110DECLARE_INTERFACE_(IRdcFileWriter,IUnknown)
111{
112    BEGIN_INTERFACE
113
114    /* IUnknown methods */
115    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
116    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
117    STDMETHOD_(ULONG, Release)(THIS) PURE;
118
119    /* IRdcFileWriter methods */
120    STDMETHOD_(HRESULT,Write)(THIS_ ULONGLONG offsetFileStart,ULONG bytesToWrite,BYTE *buffer) PURE;
121    STDMETHOD_(HRESULT,Truncate)(THIS) PURE;
122    STDMETHOD_(HRESULT,DeleteOnClose)(THIS) PURE;
123
124    END_INTERFACE
125};
126#ifdef COBJMACROS
127#define IRdcFileWriter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
128#define IRdcFileWriter_AddRef(This) (This)->lpVtbl->AddRef(This)
129#define IRdcFileWriter_Release(This) (This)->lpVtbl->Release(This)
130#define IRdcFileWriter_Write(This,offsetFileStart,bytesToWrite,buffer) (This)->lpVtbl->Write(This,offsetFileStart,bytesToWrite,buffer)
131#define IRdcFileWriter_Truncate() (This)->lpVtbl->Truncate(This)
132#define IRdcFileWriter_DeleteOnClose() (This)->lpVtbl->DeleteOnClose(This)
133#endif /*COBJMACROS*/
134
135#undef  INTERFACE
136#define INTERFACE ISimilarityFileIdTable
137#ifdef __GNUC__
138#warning COM interfaces layout in this header has not been verified.
139#warning COM interfaces with incorrect layout may not work at all.
140__MINGW_BROKEN_INTERFACE(INTERFACE)
141#endif
142DECLARE_INTERFACE_(ISimilarityFileIdTable,IUnknown)
143{
144    BEGIN_INTERFACE
145
146    /* IUnknown methods */
147    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
148    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
149    STDMETHOD_(ULONG, Release)(THIS) PURE;
150
151    /* ISimilarityFileIdTable methods */
152    STDMETHOD_(HRESULT,CreateTable)(THIS_ wchar_t *path,WINBOOL truncate,BYTE *securityDescriptor,DWORD recordSize,RdcCreatedTables *isNew) PURE;
153    STDMETHOD_(HRESULT,CreateTableIndirect)(THIS_ IRdcFileWriter *fileIdFile,WINBOOL truncate,DWORD recordSize,RdcCreatedTables *isNew) PURE;
154    STDMETHOD_(HRESULT,CloseTable)(THIS_ WINBOOL isValid) PURE;
155    STDMETHOD_(HRESULT,Append)(THIS_ SimilarityFileId *similarityFileId,SimilarityFileIndexT *similarityFileIndex) PURE;
156    STDMETHOD_(HRESULT,Lookup)(THIS_ SimilarityFileIndexT similarityFileIndex,SimilarityFileId *similarityFileId) PURE;
157    STDMETHOD_(HRESULT,Invalidate)(THIS_ SimilarityFileIndexT similarityFileIndex) PURE;
158    STDMETHOD_(HRESULT,GetRecordCount)(THIS_ DWORD *recordCount) PURE;
159
160    END_INTERFACE
161};
162#ifdef COBJMACROS
163#define ISimilarityFileIdTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
164#define ISimilarityFileIdTable_AddRef(This) (This)->lpVtbl->AddRef(This)
165#define ISimilarityFileIdTable_Release(This) (This)->lpVtbl->Release(This)
166#define ISimilarityFileIdTable_CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew) (This)->lpVtbl->CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew)
167#define ISimilarityFileIdTable_CreateTableIndirect(This,fileIdFile,truncate,recordSize,isNew) (This)->lpVtbl->CreateTableIndirect(This,fileIdFile,truncate,recordSize,isNew)
168#define ISimilarityFileIdTable_CloseTable(This,isValid) (This)->lpVtbl->CloseTable(This,isValid)
169#define ISimilarityFileIdTable_Append(This,similarityFileId,similarityFileIndex) (This)->lpVtbl->Append(This,similarityFileId,similarityFileIndex)
170#define ISimilarityFileIdTable_Lookup(This,similarityFileIndex,similarityFileId) (This)->lpVtbl->Lookup(This,similarityFileIndex,similarityFileId)
171#define ISimilarityFileIdTable_Invalidate(This,similarityFileIndex) (This)->lpVtbl->Invalidate(This,similarityFileIndex)
172#define ISimilarityFileIdTable_GetRecordCount(This,recordCount) (This)->lpVtbl->GetRecordCount(This,recordCount)
173#endif /*COBJMACROS*/
174
175#undef  INTERFACE
176#define INTERFACE ISimilarityTraitsMappedView
177#ifdef __GNUC__
178#warning COM interfaces layout in this header has not been verified.
179#warning COM interfaces with incorrect layout may not work at all.
180__MINGW_BROKEN_INTERFACE(INTERFACE)
181#endif
182DECLARE_INTERFACE_(ISimilarityTraitsMappedView,IUnknown)
183{
184    BEGIN_INTERFACE
185
186    /* IUnknown methods */
187    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
188    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
189    STDMETHOD_(ULONG, Release)(THIS) PURE;
190
191    /* ISimilarityTraitsMappedView methods */
192    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
193    STDMETHOD_(HRESULT,Unmap)(THIS) PURE;
194    STDMETHOD_(HRESULT,Get)(THIS_ unsigned __int64 fileOffset,WINBOOL dirty,DWORD numElements,SimilarityMappedViewInfo *viewInfo) PURE;
195    STDMETHOD(GetView)(THIS_ unsigned char const **mappedPageBegin,unsigned char const **mappedPageEnd) PURE;
196
197    END_INTERFACE
198};
199#ifdef COBJMACROS
200#define ISimilarityTraitsMappedView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
201#define ISimilarityTraitsMappedView_AddRef(This) (This)->lpVtbl->AddRef(This)
202#define ISimilarityTraitsMappedView_Release(This) (This)->lpVtbl->Release(This)
203#define ISimilarityTraitsMappedView_Flush() (This)->lpVtbl->Flush(This)
204#define ISimilarityTraitsMappedView_Unmap() (This)->lpVtbl->Unmap(This)
205#define ISimilarityTraitsMappedView_Get(This,fileOffset,dirty,numElements,viewInfo) (This)->lpVtbl->Get(This,fileOffset,dirty,numElements,viewInfo)
206#define ISimilarityTraitsMappedView_GetView(This,mappedPageBegin,mappedPageEnd) (This)->lpVtbl->GetView(This,mappedPageBegin,mappedPageEnd)
207#endif /*COBJMACROS*/
208
209#undef  INTERFACE
210#define INTERFACE IFindSimilarResults
211#ifdef __GNUC__
212#warning COM interfaces layout in this header has not been verified.
213#warning COM interfaces with incorrect layout may not work at all.
214__MINGW_BROKEN_INTERFACE(INTERFACE)
215#endif
216DECLARE_INTERFACE_(IFindSimilarResults,IUnknown)
217{
218    BEGIN_INTERFACE
219
220    /* IUnknown methods */
221    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
222    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
223    STDMETHOD_(ULONG, Release)(THIS) PURE;
224
225    /* IFindSimilarResults methods */
226    STDMETHOD_(HRESULT,GetSize)(THIS_ DWORD *size) PURE;
227    STDMETHOD_(HRESULT,GetNextFileId)(THIS_ DWORD *numTraitsMatched,SimilarityFileId *similarityFileId) PURE;
228
229    END_INTERFACE
230};
231#ifdef COBJMACROS
232#define IFindSimilarResults_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
233#define IFindSimilarResults_AddRef(This) (This)->lpVtbl->AddRef(This)
234#define IFindSimilarResults_Release(This) (This)->lpVtbl->Release(This)
235#define IFindSimilarResults_GetSize(This,size) (This)->lpVtbl->GetSize(This,size)
236#define IFindSimilarResults_GetNextFileId(This,numTraitsMatched,similarityFileId) (This)->lpVtbl->GetNextFileId(This,numTraitsMatched,similarityFileId)
237#endif /*COBJMACROS*/
238
239#undef  INTERFACE
240#define INTERFACE ISimilarityTraitsMapping
241#ifdef __GNUC__
242#warning COM interfaces layout in this header has not been verified.
243#warning COM interfaces with incorrect layout may not work at all.
244__MINGW_BROKEN_INTERFACE(INTERFACE)
245#endif
246DECLARE_INTERFACE_(ISimilarityTraitsMapping,IUnknown)
247{
248    BEGIN_INTERFACE
249
250    /* IUnknown methods */
251    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
252    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
253    STDMETHOD_(ULONG, Release)(THIS) PURE;
254
255    /* ISimilarityTraitsMapping methods */
256    STDMETHOD(CloseMapping)(THIS) PURE;
257    STDMETHOD_(HRESULT,SetFileSize)(THIS_ unsigned __int64 *fileSize) PURE;
258    STDMETHOD_(HRESULT,GetFileSize)(THIS_ unsigned __int64 *fileSize) PURE;
259    STDMETHOD_(HRESULT,OpenMapping)(THIS_ RdcMappingAccessMode accessMode,unsigned __int64 begin,unsigned __int64 end,unsigned __int64 *actualEnd) PURE;
260    STDMETHOD_(HRESULT,ResizeMapping)(THIS_ RdcMappingAccessMode accessMode,unsigned __int64 begin,unsigned __int64 end,unsigned __int64 *actualEnd) PURE;
261    STDMETHOD(GetPageSize)(THIS_ DWORD *pageSize) PURE;
262    STDMETHOD_(HRESULT,CreateView)(THIS_ DWORD minimumMappedPages,RdcMappingAccessMode accessMode,ISimilarityTraitsMappedView **mappedView) PURE;
263
264    END_INTERFACE
265};
266#ifdef COBJMACROS
267#define ISimilarityTraitsMapping_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
268#define ISimilarityTraitsMapping_AddRef(This) (This)->lpVtbl->AddRef(This)
269#define ISimilarityTraitsMapping_Release(This) (This)->lpVtbl->Release(This)
270#define ISimilarityTraitsMapping_CloseMapping() (This)->lpVtbl->CloseMapping(This)
271#define ISimilarityTraitsMapping_SetFileSize(This,fileSize) (This)->lpVtbl->SetFileSize(This,fileSize)
272#define ISimilarityTraitsMapping_GetFileSize(This,fileSize) (This)->lpVtbl->GetFileSize(This,fileSize)
273#define ISimilarityTraitsMapping_OpenMapping(This,accessMode,begin,end,actualEnd) (This)->lpVtbl->OpenMapping(This,accessMode,begin,end,actualEnd)
274#define ISimilarityTraitsMapping_ResizeMapping(This,accessMode,begin,end,actualEnd) (This)->lpVtbl->ResizeMapping(This,accessMode,begin,end,actualEnd)
275#define ISimilarityTraitsMapping_GetPageSize(This,pageSize) (This)->lpVtbl->GetPageSize(This,pageSize)
276#define ISimilarityTraitsMapping_CreateView(This,minimumMappedPages,accessMode,mappedView) (This)->lpVtbl->CreateView(This,minimumMappedPages,accessMode,mappedView)
277#endif /*COBJMACROS*/
278
279#undef  INTERFACE
280#define INTERFACE ISimilarityReportProgress
281#ifdef __GNUC__
282#warning COM interfaces layout in this header has not been verified.
283#warning COM interfaces with incorrect layout may not work at all.
284__MINGW_BROKEN_INTERFACE(INTERFACE)
285#endif
286DECLARE_INTERFACE_(ISimilarityReportProgress,IUnknown)
287{
288    BEGIN_INTERFACE
289
290    /* IUnknown methods */
291    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
292    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
293    STDMETHOD_(ULONG, Release)(THIS) PURE;
294
295    /* ISimilarityReportProgress methods */
296    STDMETHOD_(HRESULT,ReportProgress)(THIS_ DWORD percentCompleted) PURE;
297
298    END_INTERFACE
299};
300#ifdef COBJMACROS
301#define ISimilarityReportProgress_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
302#define ISimilarityReportProgress_AddRef(This) (This)->lpVtbl->AddRef(This)
303#define ISimilarityReportProgress_Release(This) (This)->lpVtbl->Release(This)
304#define ISimilarityReportProgress_ReportProgress(This,percentCompleted) (This)->lpVtbl->ReportProgress(This,percentCompleted)
305#endif /*COBJMACROS*/
306
307#undef  INTERFACE
308#define INTERFACE ISimilarity
309#ifdef __GNUC__
310#warning COM interfaces layout in this header has not been verified.
311#warning COM interfaces with incorrect layout may not work at all.
312__MINGW_BROKEN_INTERFACE(INTERFACE)
313#endif
314DECLARE_INTERFACE_(ISimilarity,IUnknown)
315{
316    BEGIN_INTERFACE
317
318    /* IUnknown methods */
319    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
320    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
321    STDMETHOD_(ULONG, Release)(THIS) PURE;
322
323    /* ISimilarity methods */
324    STDMETHOD_(HRESULT,CreateTable)(THIS_ wchar_t *path,WINBOOL truncate,BYTE *securityDescriptor,DWORD recordSize,RdcCreatedTables *isNew) PURE;
325    STDMETHOD_(HRESULT,CreateTableIndirect)(THIS_ ISimilarityTraitsMapping *mapping,IRdcFileWriter *fileIdFile,WINBOOL truncate,DWORD recordSize,RdcCreatedTables *isNew) PURE;
326    STDMETHOD_(HRESULT,CloseTable)(THIS_ WINBOOL isValid) PURE;
327    STDMETHOD_(HRESULT,Append)(THIS_ SimilarityFileId *similarityFileId,SimilarityData *similarityData) PURE;
328    STDMETHOD_(HRESULT,FindSimilarFileId)(THIS_ SimilarityData *similarityData,DWORD resultsSize,IFindSimilarResults **findSimilarResults) PURE;
329    STDMETHOD_(HRESULT,CopyAndSwap)(THIS_ ISimilarityReportProgress *reportProgress) PURE;
330    STDMETHOD_(HRESULT,GetRecordCount)(THIS_ DWORD *recordCount) PURE;
331
332    END_INTERFACE
333};
334#ifdef COBJMACROS
335#define ISimilarity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
336#define ISimilarity_AddRef(This) (This)->lpVtbl->AddRef(This)
337#define ISimilarity_Release(This) (This)->lpVtbl->Release(This)
338#define ISimilarity_CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew) (This)->lpVtbl->CreateTable(This,path,truncate,securityDescriptor,recordSize,isNew)
339#define ISimilarity_CreateTableIndirect(This,mapping,fileIdFile,truncate,recordSize,isNew) (This)->lpVtbl->CreateTableIndirect(This,mapping,fileIdFile,truncate,recordSize,isNew)
340#define ISimilarity_CloseTable(This,isValid) (This)->lpVtbl->CloseTable(This,isValid)
341#define ISimilarity_Append(This,similarityFileId,similarityData) (This)->lpVtbl->Append(This,similarityFileId,similarityData)
342#define ISimilarity_FindSimilarFileId(This,similarityData,resultsSize,findSimilarResults) (This)->lpVtbl->FindSimilarFileId(This,similarityData,resultsSize,findSimilarResults)
343#define ISimilarity_CopyAndSwap(This,reportProgress) (This)->lpVtbl->CopyAndSwap(This,reportProgress)
344#define ISimilarity_GetRecordCount(This,recordCount) (This)->lpVtbl->GetRecordCount(This,recordCount)
345#endif /*COBJMACROS*/
346
347#endif /*(_WIN32_WINNT >= 0x0600)*/
348
349#endif /* _INC_MSRDC */
350