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