1use ctypes::c_void;
8use shared::basetsd::UINT64;
9use shared::guiddef::{CLSID, IID, REFCLSID, REFIID};
10use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, HGLOBAL, ULONG, WORD};
11use shared::ntdef::LONG;
12use shared::windef::{HBITMAP, HENHMETAFILE};
13use shared::wtypes::{CLIPFORMAT, HMETAFILEPICT};
14use shared::wtypesbase::{LPCOLESTR, LPOLESTR, OLECHAR};
15use um::objidlbase::{IEnumString, IStream, STATSTG};
16use um::unknwnbase::{IUnknown, IUnknownVtbl};
17use um::winnt::{HRESULT, ULARGE_INTEGER};
18STRUCT!{struct BIND_OPTS {
20 cbStruct: DWORD,
21 grfFlags: DWORD,
22 grfMode: DWORD,
23 dwTickCountDeadline: DWORD,
24}}
25pub type LPBIND_OPTS = *mut BIND_OPTS;
26RIDL!{#[uuid(0x0000000e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
28interface IBindCtx(IBindCtxVtbl): IUnknown(IUnknownVtbl) {
29 fn RegisterObjectBound(
30 punk: *mut IUnknown,
31 ) -> HRESULT,
32 fn RevokeObjectBound(
33 punk: *mut IUnknown,
34 ) -> HRESULT,
35 fn ReleaseBoundObjects() -> HRESULT,
36 fn SetBindOptions(
37 pbindopts: *mut BIND_OPTS,
38 ) -> HRESULT,
39 fn GetBindOptions(
40 pbindopts: *mut BIND_OPTS,
41 ) -> HRESULT,
42 fn GetRunningObjectTable(
43 pprot: *mut *mut IRunningObjectTable,
44 ) -> HRESULT,
45 fn RegisterObjectParam(
46 pszKey: LPOLESTR,
47 punk: *mut IUnknown,
48 ) -> HRESULT,
49 fn GetObjectParam(
50 pszKey: LPOLESTR,
51 ppunk: *mut *mut IUnknown,
52 ) -> HRESULT,
53 fn EnumObjectParam(
54 ppenum: *mut *mut IEnumString,
55 ) -> HRESULT,
56 fn RevokeObjectParam(
57 pszKey: LPOLESTR,
58 ) -> HRESULT,
59}}
60RIDL!{#[uuid(0x00000102, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
62interface IEnumMoniker(IEnumMonikerVtbl): IUnknown(IUnknownVtbl) {
63 fn Next(
64 celt: ULONG,
65 rgelt: *mut *mut IMoniker,
66 pceltFetched: *mut ULONG,
67 ) -> HRESULT,
68 fn Skip(
69 celt: ULONG,
70 ) -> HRESULT,
71 fn Reset() -> HRESULT,
72 fn Clone(
73 ppenum: *mut *mut IEnumMoniker,
74 ) -> HRESULT,
75}}
76RIDL!{#[uuid(0x00000010, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
78interface IRunningObjectTable(IRunningObjectTableVtbl): IUnknown(IUnknownVtbl) {
79 fn Register(
80 grfFlags: DWORD,
81 punkObject: *mut IUnknown,
82 pmkObjectName: *mut IMoniker,
83 pdwRegister: *mut DWORD,
84 ) -> HRESULT,
85 fn Revoke(
86 dwRegister: DWORD,
87 ) -> HRESULT,
88 fn IsRunning(
89 pmkObjectName: *mut IMoniker,
90 ) -> HRESULT,
91 fn GetObject(
92 pmkObjectName: *mut IMoniker,
93 ppunkObject: *mut *mut IUnknown,
94 ) -> HRESULT,
95 fn NoteChangeTime(
96 dwRegister: DWORD,
97 pfiletime: *mut FILETIME,
98 ) -> HRESULT,
99 fn GetTimeOfLastChange(
100 pmkObjectName: *mut IMoniker,
101 pfiletime: *mut FILETIME,
102 ) -> HRESULT,
103 fn EnumRunning(
104 ppenumMoniker: *mut *mut IEnumMoniker,
105 ) -> HRESULT,
106}}
107RIDL!{#[uuid(0x0000010c, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
109interface IPersist(IPersistVtbl): IUnknown(IUnknownVtbl) {
110 fn GetClassID(
111 pClassID: *mut CLSID,
112 ) -> HRESULT,
113}}
114RIDL!{#[uuid(0x00000109, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
116interface IPersistStream(IPersistStreamVtbl): IPersist(IPersistVtbl) {
117 fn IsDirty() -> HRESULT,
118 fn Load(
119 pStm: *mut IStream,
120 ) -> HRESULT,
121 fn Save(
122 pStm: *mut IStream,
123 fClearDirty: BOOL,
124 ) -> HRESULT,
125 fn GetSizeMax(
126 pcbSize: *mut ULARGE_INTEGER,
127 ) -> HRESULT,
128}}
129RIDL!{#[uuid(0x0000000f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
131interface IMoniker(IMonikerVtbl): IPersistStream(IPersistStreamVtbl) {
132 fn BindToObject(
133 pbc: *mut IBindCtx,
134 pmkToLeft: *mut IMoniker,
135 riidResult: REFIID,
136 ppvResult: *mut *mut c_void,
137 ) -> HRESULT,
138 fn BindToStorage(
139 pbc: *mut IBindCtx,
140 pmkToLeft: *mut IMoniker,
141 riid: REFIID,
142 ppvObj: *mut *mut c_void,
143 ) -> HRESULT,
144 fn Reduce(
145 pbc: *mut IBindCtx,
146 dwReduceHowFar: DWORD,
147 ppmkToLeft: *mut *mut IMoniker,
148 ppmkReduced: *mut *mut IMoniker,
149 ) -> HRESULT,
150 fn ComposeWith(
151 pmkRight: *mut IMoniker,
152 fOnlyIfNotGeneric: BOOL,
153 ppmkComposite: *mut *mut IMoniker,
154 ) -> HRESULT,
155 fn Enum(
156 fForward: BOOL,
157 ppenumMoniker: *mut *mut IEnumMoniker,
158 ) -> HRESULT,
159 fn IsEqual(
160 pmkOtherMoniker: *mut IMoniker,
161 ) -> HRESULT,
162 fn Hash(
163 pdwHash: *mut DWORD,
164 ) -> HRESULT,
165 fn IsRunning(
166 pbc: *mut IBindCtx,
167 pmkToLeft: *mut IMoniker,
168 pmkNewlyRunning: *mut IMoniker,
169 ) -> HRESULT,
170 fn GetTimeOfLastChange(
171 pbc: *mut IBindCtx,
172 pmkToLeft: *mut IMoniker,
173 pFileTime: *mut FILETIME,
174 ) -> HRESULT,
175 fn Inverse(
176 ppmk: *mut *mut IMoniker,
177 ) -> HRESULT,
178 fn CommonPrefixWith(
179 pmkOther: *mut IMoniker,
180 ppmkPrefix: *mut *mut IMoniker,
181 ) -> HRESULT,
182 fn RelativePathTo(
183 pmkOther: *mut IMoniker,
184 ppmkRelPath: *mut *mut IMoniker,
185 ) -> HRESULT,
186 fn GetDisplayName(
187 pbc: *mut IBindCtx,
188 pmkToLeft: *mut IMoniker,
189 ppszDisplayName: *mut LPOLESTR,
190 ) -> HRESULT,
191 fn ParseDisplayName(
192 pbc: *mut IBindCtx,
193 pmkToLeft: *mut IMoniker,
194 pszDisplayName: LPOLESTR,
195 pchEaten: *mut ULONG,
196 ppmkOut: *mut *mut IMoniker,
197 ) -> HRESULT,
198 fn IsSystemMoniker(
199 pdwMksys: *mut DWORD,
200 ) -> HRESULT,
201}}
202ENUM!{enum EOLE_AUTHENTICATION_CAPABILITIES {
203 EOAC_NONE = 0,
204 EOAC_MUTUAL_AUTH = 0x1,
205 EOAC_STATIC_CLOAKING = 0x20,
206 EOAC_DYNAMIC_CLOAKING = 0x40,
207 EOAC_ANY_AUTHORITY = 0x80,
208 EOAC_MAKE_FULLSIC = 0x100,
209 EOAC_DEFAULT = 0x800,
210 EOAC_SECURE_REFS = 0x2,
211 EOAC_ACCESS_CONTROL = 0x4,
212 EOAC_APPID = 0x8,
213 EOAC_DYNAMIC = 0x10,
214 EOAC_REQUIRE_FULLSIC = 0x200,
215 EOAC_AUTO_IMPERSONATE = 0x400,
216 EOAC_NO_CUSTOM_MARSHAL = 0x2000,
217 EOAC_DISABLE_AAA = 0x1000,
218}}
219STRUCT!{struct SOLE_AUTHENTICATION_SERVICE {
220 dwAuthnSvc: DWORD,
221 dwAuthzSvc: DWORD,
222 pPrincipalName: *mut OLECHAR,
223 hr: HRESULT,
224}}
225RIDL!{#[uuid(0x0000000d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
226interface IEnumSTATSTG(IEnumSTATSTGVtbl): IUnknown(IUnknownVtbl) {
227 fn Next(
228 celt: ULONG,
229 rgelt: *mut STATSTG,
230 pceltFetched: *mut ULONG,
231 ) -> HRESULT,
232 fn Skip(
233 celt: ULONG,
234 ) -> HRESULT,
235 fn Reset() -> HRESULT,
236 fn Clone(
237 ppenum: *mut *mut IEnumSTATSTG,
238 ) -> HRESULT,
239}}
240pub type SNB = *const *const OLECHAR;
241RIDL!{#[uuid(0x0000000b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
242interface IStorage(IStorageVtbl): IUnknown(IUnknownVtbl) {
243 fn CreateStream(
244 pwcsName: *const OLECHAR,
245 grfMode: DWORD,
246 reserved1: DWORD,
247 reserved2: DWORD,
248 ppstm: *mut *mut IStream,
249 ) -> HRESULT,
250 fn OpenStream(
251 pwcsName: *const OLECHAR,
252 reserved1: *const c_void,
253 grfMode: DWORD,
254 reserved2: DWORD,
255 ppstm: *mut *mut IStream,
256 ) -> HRESULT,
257 fn CreateStorage(
258 pwcsName: *const OLECHAR,
259 grfMode: DWORD,
260 reserved1: DWORD,
261 reserved2: DWORD,
262 ppstg: *mut *mut IStorage,
263 ) -> HRESULT,
264 fn OpenStorage(
265 pwcsName: *const OLECHAR,
266 pstgPriority: IStorage,
267 grfMode: DWORD,
268 snbExclude: SNB,
269 reserved: DWORD,
270 ppstg: *mut *mut IStorage,
271 ) -> HRESULT,
272 fn CopyTo(
273 ciidExclude: DWORD,
274 rgiidExclude: *const IID,
275 snbExclude: SNB,
276 pstgDest: *const IStorage,
277 ) -> HRESULT,
278 fn MoveElementTo(
279 pwcsName: *const OLECHAR,
280 pstgDest: *const IStorage,
281 pwcsNewName: *const OLECHAR,
282 grfFlags: DWORD,
283 ) -> HRESULT,
284 fn Commit(
285 grfCommitFlags: DWORD,
286 ) -> HRESULT,
287 fn Revert() -> HRESULT,
288 fn EnumElements(
289 reserved1: DWORD,
290 reserved2: *const c_void,
291 reserved3: DWORD,
292 ppenum: *mut *mut IEnumSTATSTG,
293 ) -> HRESULT,
294 fn DestroyElement(
295 pwcsName: *const OLECHAR,
296 ) -> HRESULT,
297 fn RenameElement(
298 pwcsOldName: *const OLECHAR,
299 pwcsNewName: *const OLECHAR,
300 ) -> HRESULT,
301 fn SetElementTimes(
302 pwcsName: *const OLECHAR,
303 pctime: *const FILETIME,
304 patime: *const FILETIME,
305 pmtime: *const FILETIME,
306 ) -> HRESULT,
307 fn SetClass(
308 clsid: REFCLSID,
309 ) -> HRESULT,
310 fn SetStateBits(
311 grfStateBits: DWORD,
312 grfMask: DWORD,
313 ) -> HRESULT,
314 fn Stat(
315 pstatstg: *mut STATSTG,
316 grfStatFlag: DWORD,
317 ) -> HRESULT,
318}}
319RIDL!{#[uuid(0x0000010b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
320interface IPersistFile(IPersistFileVtbl): IPersist(IPersistVtbl) {
321 fn IsDirty() -> HRESULT,
322 fn Load(
323 pszFileName: LPCOLESTR,
324 dwMode: DWORD,
325 ) -> HRESULT,
326 fn Save(
327 pszFileName: LPCOLESTR,
328 fRemember: BOOL,
329 ) -> HRESULT,
330 fn SaveCompleted(
331 pszFileName: LPCOLESTR,
332 ) -> HRESULT,
333 fn GetCurFile(
334 ppszFileName: *mut LPOLESTR,
335 ) -> HRESULT,
336}}
337STRUCT!{struct DVTARGETDEVICE {
338 tdSize: DWORD,
339 tdDriverNameOffset: WORD,
340 tdDeviceNameOffset: WORD,
341 tdPortNameOffset: WORD,
342 tdExtDevmodeOFfset: WORD,
343 tdData: [BYTE; 1],
344}}
345STRUCT!{struct FORMATETC {
346 cfFormat: CLIPFORMAT,
347 ptd: *const DVTARGETDEVICE,
348 dwAspect: DWORD,
349 lindex: LONG,
350 tymed: DWORD,
351}}
352RIDL!{#[uuid(0x00000103, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
353interface IEnumFORMATETC(IEnumFORMATETCVtbl): IUnknown(IUnknownVtbl) {
354 fn Next(
355 celt: ULONG,
356 rgelt: *mut FORMATETC,
357 pceltFetched: *mut ULONG,
358 ) -> HRESULT,
359 fn Skip(
360 celt: ULONG,
361 ) -> HRESULT,
362 fn Reset() -> HRESULT,
363 fn Clone(
364 ppenum: *mut *mut IEnumFORMATETC,
365 ) -> HRESULT,
366}}
367ENUM!{enum ADVF {
368 ADVF_NODATA = 1,
369 ADVF_PRIMEFIRST = 2,
370 ADVF_ONLYONCE = 4,
371 ADVF_DATAONSTOP = 64,
372 ADVFCACHE_NOHANDLER = 8,
373 ADVFCACHE_FORCEBUILTIN = 16,
374 ADVFCACHE_ONSAVE = 32,
375}}
376STRUCT!{struct STATDATA {
377 formatetc: FORMATETC,
378 advf: DWORD,
379 pAdvSInk: *mut IAdviseSink,
380 dwConnection: DWORD,
381}}
382RIDL!{#[uuid(0x00000105, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
383interface IEnumSTATDATA(IEnumSTATDATAVtbl): IUnknown(IUnknownVtbl) {
384 fn Next(
385 celt: ULONG,
386 rgelt: *mut STATDATA,
387 pceltFetched: *mut ULONG,
388 ) -> HRESULT,
389 fn Skip(
390 celt: ULONG,
391 ) -> HRESULT,
392 fn Reset() -> HRESULT,
393 fn Clone(
394 ppenum: *mut *mut IEnumSTATDATA,
395 ) -> HRESULT,
396}}
397ENUM!{enum TYMED {
398 TYMED_HGLOBAL = 1,
399 TYMED_FILE = 2,
400 TYMED_ISTREAM = 4,
401 TYMED_ISTORAGE = 8,
402 TYMED_GDI = 16,
403 TYMED_MFPICT = 32,
404 TYMED_ENHMF = 64,
405 TYMED_NULL = 0,
406}}
407UNION!{union STGMEDIUM_u {
408 [u64; 7], hBitmap hBitmap_mut: HBITMAP,
410 hMetaFilePict hMetaFilePict_mut: HMETAFILEPICT,
411 hEnhMetaFile hEnhMetaFile_mut: HENHMETAFILE,
412 hGlobal hGlobal_mut: HGLOBAL,
413 lpszFileName lpszFileName_mut: LPOLESTR,
414 pstm pstm_mut: *mut IStream,
415 pstg pstg_mut: *mut IStorage,
416}}
417STRUCT!{struct STGMEDIUM {
418 tymed: DWORD,
419 u: *mut STGMEDIUM_u,
420 pUnkForRelease: *mut IUnknown,
421}}
422RIDL!{#[uuid(0x0000010f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
423interface IAdviseSink(IAdviseSinkVtbl): IUnknown(IUnknownVtbl) {
424 fn OnDataChange(
425 pformatetc: *mut FORMATETC,
426 pStgmed: *mut STGMEDIUM,
427 ) -> c_void,
428 fn OnViewChange(
429 dwAspect: DWORD,
430 lindex: LONG,
431 ) -> c_void,
432 fn OnRename(
433 pmk: *mut IMoniker,
434 ) -> c_void,
435 fn OnSave() -> c_void,
436 fn OnClose() -> c_void,
437}}
438ENUM!{enum DATADIR {
439 DATADIR_GET = 1,
440 DATADIR_SET = 2,
441}}
442pub type LPDATAOBJECT = *mut IDataObject;
443RIDL!{#[uuid(0x0000010e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
444interface IDataObject(IDataObjectVtbl): IUnknown(IUnknownVtbl) {
445 fn GetData(
446 pformatetcIn: *const FORMATETC,
447 pmedium: *mut STGMEDIUM,
448 ) -> HRESULT,
449 fn GetDataHere(
450 pformatetc: *const FORMATETC,
451 pmedium: *mut STGMEDIUM,
452 ) -> HRESULT,
453 fn QueryGetData(
454 pformatetc: *const FORMATETC,
455 ) -> HRESULT,
456 fn GetCanonicalFormatEtc(
457 pformatetcIn: *const FORMATETC,
458 pformatetcOut: *mut FORMATETC,
459 ) -> HRESULT,
460 fn SetData(
461 pformatetc: *const FORMATETC,
462 pformatetcOut: *const FORMATETC,
463 fRelease: BOOL,
464 ) -> HRESULT,
465 fn EnumFormatEtc(
466 dwDirection: DWORD,
467 ppenumFormatEtc: *mut *mut IEnumFORMATETC,
468 ) -> HRESULT,
469 fn DAdvise(
470 pformatetc: *const FORMATETC,
471 advf: DWORD,
472 pAdvSInk: *const IAdviseSink,
473 pdwConnection: *mut DWORD,
474 ) -> HRESULT,
475 fn DUnadvise(
476 dwConnection: DWORD,
477 ) -> HRESULT,
478 fn EnumDAdvise(
479 ppenumAdvise: *const *const IEnumSTATDATA,
480 ) -> HRESULT,
481}}
482RIDL!{#[uuid(0xa2f05a09, 0x27a2, 0x42b5, 0xbc, 0x0e, 0xac, 0x16, 0x3e, 0xf4, 0x9d, 0x9b)]
483interface IApartmentShutdown(IApartmentShutdownVtbl): IUnknown(IUnknownVtbl) {
484 fn OnUninitialize(
485 ui64ApartmentIdentifier: UINT64,
486 ) -> (),
487}}
488RIDL!{#[uuid(0x00000003, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
489interface IMarshal(IMarshalVtbl): IUnknown(IUnknownVtbl) {
490 fn GetUnmarshalClass(
491 riid: REFIID,
492 pv: *mut c_void,
493 dwDestContext: DWORD,
494 pvDestContext: *mut c_void,
495 mshlflags: DWORD,
496 pCid: *mut CLSID,
497 ) -> HRESULT,
498 fn GetMarshalSizeMax(
499 riid: REFIID,
500 pv: *mut c_void,
501 dwDestContext: DWORD,
502 pvDestContext: *mut c_void,
503 mshlflags: DWORD,
504 pSize: *mut DWORD,
505 ) -> HRESULT,
506 fn MarshalInterface(
507 pStm: *mut IStream,
508 riid: REFIID,
509 pv: *mut c_void,
510 dwDestContext: DWORD,
511 pvDestContext: *mut c_void,
512 mshlflags: DWORD,
513 ) -> HRESULT,
514 fn UnmarshalInterface(
515 pStm: *mut IStream,
516 riid: REFIID,
517 ppv: *mut *mut c_void,
518 ) -> HRESULT,
519 fn ReleaseMarshalData(
520 pStm: *mut IStream,
521 ) -> HRESULT,
522 fn DisconnectObject(
523 dwReserved: DWORD,
524 ) -> HRESULT,
525}}