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 
11 typedef UINT SimilarityFileIndexT;
12 
13 typedef enum _GeneratorParametersType {
14   RDCGENTYPE_Unused      = 0,
15   RDCGENTYPE_FilterMax   = 1
16 } GeneratorParametersType;
17 
18 typedef enum _RdcCreatedTables {
19   RDCTABLE_InvalidOrUnknown   = 0,
20   RDCTABLE_Existing           = 1,
21   RDCTABLE_New                = 2
22 } RdcCreatedTables;
23 
24 typedef enum _RdcMappingAccessMode {
25   RDCMAPPING_Undefined   = 0,
26   RDCMAPPING_ReadOnly    = 1,
27   RDCMAPPING_ReadWrite   = 2
28 } RdcMappingAccessMode;
29 
30 typedef 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 
44 typedef enum _RdcNeedType {
45   RDCNEED_SOURCE     = 0,
46   RDCNEED_TARGET     = 1,
47   RDCNEED_SEED       = 2,
48   RDCNEED_SEED_MAX   = 255
49 } RdcNeedType;
50 
51 typedef struct _FindSimilarFileIndexResults {
52   SimilarityFileIndexT m_FileIndex;
53   unsigned             m_MatchCount;
54 } FindSimilarFileIndexResults;
55 
56 typedef struct _RdcBufferPointer {
57   ULONG m_Size;
58   ULONG m_Used;
59   BYTE  *m_Data;
60 } RdcBufferPointer;
61 
62 typedef struct _RdcNeed {
63   RdcNeedType      m_BlockType;
64   unsigned __int64 m_FileOffset;
65   unsigned __int64 m_BlockLength;
66 } RdcNeed;
67 
68 typedef struct _RdcNeedPointer {
69   ULONG   m_Size;
70   ULONG   m_Used;
71   RdcNeed *m_Data;
72 } RdcNeedPointer;
73 
74 typedef struct _RdcSignature {
75   BYTE   m_Signature[MSRDC_SIGNATURE_HASHSIZE];
76   USHORT m_BlockLength;
77 } RdcSignature;
78 
79 typedef struct _RdcSignaturePointer {
80   ULONG        m_Size;
81   ULONG        m_Used;
82   RdcSignature *m_Data;
83 } RdcSignaturePointer;
84 
85 typedef struct _SimilarityData {
86   unsigned char m_Data[16];
87 } SimilarityData;
88 
89 typedef struct _SimilarityDumpData {
90   SimilarityFileIndexT m_FileIndex;
91   SimilarityData       m_Data;
92 } SimilarityDumpData;
93 
94 typedef struct _SimilarityFileId {
95   byte m_FileId[SimilarityFileIdMaxSize];
96 } SimilarityFileId;
97 
98 struct 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
DECLARE_INTERFACE_(IRdcFileWriter,IUnknown)110 DECLARE_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
DECLARE_INTERFACE_(ISimilarityFileIdTable,IUnknown)142 DECLARE_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
DECLARE_INTERFACE_(ISimilarityTraitsMappedView,IUnknown)182 DECLARE_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
DECLARE_INTERFACE_(IFindSimilarResults,IUnknown)216 DECLARE_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
DECLARE_INTERFACE_(ISimilarityTraitsMapping,IUnknown)246 DECLARE_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
DECLARE_INTERFACE_(ISimilarityReportProgress,IUnknown)286 DECLARE_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
DECLARE_INTERFACE_(ISimilarity,IUnknown)314 DECLARE_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 
351