1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 use shared
::guiddef
::{CLSID, FMTID, GUID, REFCLSID, REFFMTID}
;
7 use shared
::minwindef
::{
8 BYTE
, DWORD
, FILETIME
, FLOAT
, HIBYTE
, HIWORD
, INT
, LOBYTE
, LOWORD
, UINT
, WORD
11 BOOLEAN
, CHAR
, HRESULT
, LARGE_INTEGER
, LONG
, LPSTR
, LPWSTR
, PVOID
, SHORT
,
12 UCHAR
, ULARGE_INTEGER
, ULONG
, USHORT
15 BSTR
, BSTRBLOB
, CLIPDATA
, CY
, DATE
, DECIMAL
, PROPID
, VARIANT_BOOL
, VARTYPE
17 use shared
::wtypesbase
::{BLOB, DOUBLE, LPOLESTR, SCODE}
;
18 use um
::oaidl
::{IDispatch, LPSAFEARRAY}
;
19 use um
::objidlbase
::IStream
;
20 use um
::unknwnbase
::{IUnknown, IUnknownVtbl}
;
21 pub const PROPSETFLAG_DEFAULT
: DWORD
= 0;
22 pub const PROPSETFLAG_NONSIMPLE
: DWORD
= 1;
23 pub const PROPSETFLAG_ANSI
: DWORD
= 2;
24 pub const PROPSETFLAG_UNBUFFERED
: DWORD
= 4;
25 pub const PROPSET_BEHAVIOR_CASE_SENSITIVE
: DWORD
= 1;
26 STRUCT
!{struct VERSIONEDSTREAM
{
28 pStream
: *mut IStream
,
30 pub type LPVERSIONEDSTREAM
= *mut VERSIONEDSTREAM
;
31 macro_rules
! TYPEDEF_CA
{
32 ($type_
:ty
, $name
:ident
) => { STRUCT
!{struct $name
{
33 cElems
: $
crate::shared
::ntdef
::ULONG
,
37 TYPEDEF_CA
!(CHAR
, CAC
);
38 TYPEDEF_CA
!(UCHAR
, CAUB
);
39 TYPEDEF_CA
!(SHORT
, CAI
);
40 TYPEDEF_CA
!(USHORT
, CAUI
);
41 TYPEDEF_CA
!(LONG
, CAL
);
42 TYPEDEF_CA
!(ULONG
, CAUL
);
43 TYPEDEF_CA
!(FLOAT
, CAFLT
);
44 TYPEDEF_CA
!(DOUBLE
, CADBL
);
45 TYPEDEF_CA
!(CY
, CACY
);
46 TYPEDEF_CA
!(DATE
, CADATE
);
47 TYPEDEF_CA
!(BSTR
, CABSTR
);
48 TYPEDEF_CA
!(BSTRBLOB
, CABSTRBLOB
);
49 TYPEDEF_CA
!(VARIANT_BOOL
, CABOOL
);
50 TYPEDEF_CA
!(SCODE
, CASCODE
);
51 TYPEDEF_CA
!(PROPVARIANT
, CAPROPVARIANT
);
52 TYPEDEF_CA
!(LARGE_INTEGER
, CAH
);
53 TYPEDEF_CA
!(ULARGE_INTEGER
, CAUH
);
54 TYPEDEF_CA
!(LPSTR
, CALPSTR
);
55 TYPEDEF_CA
!(LPWSTR
, CALPWSTR
);
56 TYPEDEF_CA
!(FILETIME
, CAFILETIME
);
57 TYPEDEF_CA
!(CLIPDATA
, CACLIPDATA
);
58 TYPEDEF_CA
!(CLSID
, CACLSID
);
59 UNION
!{union PROPVARIANT_data
{
64 uiVal uiVal_mut
: USHORT
,
66 ulVal ulVal_mut
: ULONG
,
67 intVal intVal_mut
: INT
,
68 uintVal uintVal_mut
: UINT
,
69 hVal hVal_mut
: LARGE_INTEGER
,
70 uhVal uhVal_mut
: ULARGE_INTEGER
,
71 fltVal fltVal_mut
: FLOAT
,
72 dblVal dblVal_mut
: DOUBLE
,
73 boolVal boolVal_mut
: VARIANT_BOOL
,
74 scode scode_mut
: SCODE
,
77 filetime filetime_mut
: FILETIME
,
78 puuid puuid_mut
: *mut CLSID
,
79 pclipdata pclipdata_mut
: *mut CLIPDATA
,
80 bstrVal bstrVal_mut
: BSTR
,
81 bstrblobVal bstrblobVal_mut
: BSTRBLOB
,
83 pszVal pszVal_mut
: LPSTR
,
84 pwszVal pwszVal_mut
: LPWSTR
,
85 punkVal punkVal_mut
: *mut IUnknown
,
86 pdispVal pdisp_mut
: *mut IDispatch
,
87 pStream pStream_mut
: *mut IStream
,
88 // pStorage pStorage_mut: *mut IStorage,
89 pVersionedStream pVersionedStream_mut
: LPVERSIONEDSTREAM
,
90 parray parray_mut
: LPSAFEARRAY
,
99 caflt caflt_mut
: CAFLT
,
100 cadbl cadbl_mut
: CADBL
,
101 cabool cabool_mut
: CABOOL
,
102 cascode cascode_mut
: CASCODE
,
104 cadate cadate_mut
: CADATE
,
105 cafiletime cafiletime_mut
: CAFILETIME
,
106 cauuid cauuid_mut
: CACLSID
,
107 caclipdata caclipdata_mut
: CACLIPDATA
,
108 cabstr cabstr_mut
: CABSTR
,
109 cabstrblob cabstrblob_mut
: CABSTRBLOB
,
110 calpstr calpstr_mut
: CALPSTR
,
111 calpwstr calpwstr_mut
: CALPWSTR
,
112 capropvar capropvar_mut
: CAPROPVARIANT
,
113 pcVal pcVal_mut
: *mut CHAR
,
114 pbVal pbVal_mut
: *mut UCHAR
,
115 piVal piVal_mut
: *mut SHORT
,
116 puiVal puiVal_mut
: *mut USHORT
,
117 plVal plVal_mut
: *mut LONG
,
118 pulVal pulVal_mut
: *mut ULONG
,
119 pintVal pintVal_mut
: *mut INT
,
120 puintVal puintVal_mut
: *mut UINT
,
121 pfltVal pfltVal_mut
: *mut FLOAT
,
122 pdblVal pdblVal_mut
: *mut DOUBLE
,
123 pboolVal pboolVal_mut
: *mut VARIANT_BOOL
,
124 pdecVal pdecVal_mut
: *mut DECIMAL
,
125 pscode pscode_mut
: *mut SCODE
,
126 pcyVal pcyVal_mut
: *mut CY
,
127 pdate pdate_mut
: *mut DATE
,
128 ppunkVal ppunkVal_mut
: *mut *mut IUnknown
,
129 ppdispVal ppdispVal_mut
: *mut *mut IDispatch
,
130 ppStream ppStream_mut
: *mut *mut IStream
,
131 // ppStorage ppStorage_mut: *mut *mut IStorage,
133 // This is actually defined as a union between this struct
134 // and DECIMAL. I don't this we need to do that.
135 STRUCT
!{struct PROPVARIANT
{
140 data
: PROPVARIANT_data
,
142 pub type LPPROPVARIANT
= *mut PROPVARIANT
;
143 pub type REFPROPVARIANT
= *const PROPVARIANT
;
144 pub const PID_DICTIONARY
: DWORD
= 0;
145 pub const PID_CODEPAGE
: DWORD
= 0x1;
146 pub const PID_FIRST_USABLE
: DWORD
= 0x2;
147 pub const PID_FIRST_NAME_DEFAULT
: DWORD
= 0xfff;
148 pub const PID_LOCALE
: DWORD
= 0x80000000;
149 pub const PID_MODIFY_TIME
: DWORD
= 0x80000001;
150 pub const PID_SECURITY
: DWORD
= 0x80000002;
151 pub const PID_BEHAVIOR
: DWORD
= 0x80000003;
152 pub const PID_ILLEGAL
: DWORD
= 0xffffffff;
153 pub const PID_MIN_READONLY
: DWORD
= 0x80000000;
154 pub const PID_MAX_READONLY
: DWORD
= 0xbfffffff;
155 pub const PRSPEC_INVALID
: ULONG
= 0xffffffff;
156 pub const PRSPEC_LPWSTR
: ULONG
= 0;
157 pub const PRSPEC_PROPID
: ULONG
= 1;
158 UNION
!{union PROPSPEC_u
{
160 propid propid_mut
: PROPID
,
161 lpwstr lpwstr_mut
: LPOLESTR
,
163 STRUCT
!{struct PROPSPEC
{
167 STRUCT
!{struct STATPROPSTG
{
168 lpwstrName
: LPOLESTR
,
173 pub fn PROPSETHDR_OSVER_KIND(dwOSVer
: DWORD
) -> WORD
{
177 pub fn PROPSETHDR_OSVER_MAJOR(dwOSVer
: DWORD
) -> BYTE
{
178 LOBYTE(LOWORD(dwOSVer
))
181 pub fn PROPSETHDR_OSVER_MINOR(dwOSVer
: DWORD
) -> BYTE
{
182 HIBYTE(LOWORD(dwOSVer
))
184 pub const PROPSETHDR_OSVERSION_UNKNOWN
: DWORD
= 0xFFFFFFFF;
185 STRUCT
!{struct STATPROPSETSTG
{
194 RIDL
!{#[uuid(0x00000138, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
195 interface
IPropertyStorage(IPropertyStorageVtbl
): IUnknown(IUnknownVtbl
) {
198 rgpspec
: *const PROPSPEC
,
199 rgpropvar
: *mut PROPVARIANT
,
203 rgpspec
: *const PROPSPEC
,
204 rgpropvar
: *const PROPVARIANT
,
208 rgpspec
: *const PROPSPEC
,
210 fn ReadPropertyNames(
212 rgpropid
: *const PROPID
,
213 rglpwstrName
: *mut LPOLESTR
,
215 fn WritePropertyNames(
217 rgpropid
: *const PROPID
,
218 rglpwstrName
: *const LPOLESTR
,
220 fn DeletePropertyNames(
222 rgpropid
: *const PROPID
,
225 grfCommitFlags
: DWORD
,
227 fn Revert() -> HRESULT
,
229 ppenum
: *mut *mut IEnumSTATPROPSTG
,
232 pctime
: *const FILETIME
,
233 patime
: *const FILETIME
,
234 pmtime
: *const FILETIME
,
240 pstatpsstg
: *mut STATPROPSETSTG
,
243 pub type LPPROPERTYSETSTORAGE
= *mut IPropertySetStorage
;
244 RIDL
!{#[uuid(0x0000013A, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
245 interface
IPropertySetStorage(IPropertySetStorageVtbl
): IUnknown(IUnknownVtbl
) {
248 pclsid
: *const CLSID
,
251 ppprstg
: *mut *mut IPropertyStorage
,
256 ppprstg
: *mut *mut IPropertyStorage
,
262 ppenum
: *mut *mut IEnumSTATPROPSTG
,
265 pub type LPENUMSTATPROPSTG
= *mut IEnumSTATPROPSTG
;
266 RIDL
!{#[uuid(0x00000139, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
267 interface
IEnumSTATPROPSTG(IEnumSTATPROPSTGVtbl
): IUnknown(IUnknownVtbl
) {
270 rgelt
: *mut STATPROPSTG
,
271 pceltFetched
: *mut ULONG
,
276 fn Revert() -> HRESULT
,
278 ppenum
: *mut *mut IEnumSTATPROPSTG
,
281 pub type LPENUMSTATPROPSETSTG
= *mut IEnumSTATPROPSETSTG
;
282 RIDL
!{#[uuid(0x0000013B, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
283 interface
IEnumSTATPROPSETSTG(IEnumSTATPROPSETSTGVtbl
): IUnknown(IUnknownVtbl
) {
286 rgelt
: *mut STATPROPSETSTG
,
287 pceltFetched
: *mut ULONG
,
292 fn Revert() -> HRESULT
,
294 ppenum
: *mut *mut IEnumSTATPROPSETSTG
,
297 pub type LPPROPERTYSTORAGE
= *mut IPropertyStorage
;
298 pub const PIDDI_THUMBNAIL
: DWORD
= 0x00000002;
299 pub const PIDSI_TITLE
: DWORD
= 0x00000002;
300 pub const PIDSI_SUBJECT
: DWORD
= 0x00000003;
301 pub const PIDSI_AUTHOR
: DWORD
= 0x00000004;
302 pub const PIDSI_KEYWORDS
: DWORD
= 0x00000005;
303 pub const PIDSI_COMMENTS
: DWORD
= 0x00000006;
304 pub const PIDSI_TEMPLATE
: DWORD
= 0x00000007;
305 pub const PIDSI_LASTAUTHOR
: DWORD
= 0x00000008;
306 pub const PIDSI_REVNUMBER
: DWORD
= 0x00000009;
307 pub const PIDSI_EDITTIME
: DWORD
= 0x0000000a;
308 pub const PIDSI_LASTPRINTED
: DWORD
= 0x0000000b;
309 pub const PIDSI_CREATE_DTM
: DWORD
= 0x0000000c;
310 pub const PIDSI_LASTSAVE_DTM
: DWORD
= 0x0000000d;
311 pub const PIDSI_PAGECOUNT
: DWORD
= 0x0000000e;
312 pub const PIDSI_WORDCOUNT
: DWORD
= 0x0000000f;
313 pub const PIDSI_CHARCOUNT
: DWORD
= 0x00000010;
314 pub const PIDSI_THUMBNAIL
: DWORD
= 0x00000011;
315 pub const PIDSI_APPNAME
: DWORD
= 0x00000012;
316 pub const PIDSI_DOC_SECURITY
: DWORD
= 0x00000013;
317 pub const PIDDSI_CATEGORY
: DWORD
= 0x00000002;
318 pub const PIDDSI_PRESFORMAT
: DWORD
= 0x00000003;
319 pub const PIDDSI_BYTECOUNT
: DWORD
= 0x00000004;
320 pub const PIDDSI_LINECOUNT
: DWORD
= 0x00000005;
321 pub const PIDDSI_PARCOUNT
: DWORD
= 0x00000006;
322 pub const PIDDSI_SLIDECOUNT
: DWORD
= 0x00000007;
323 pub const PIDDSI_NOTECOUNT
: DWORD
= 0x00000008;
324 pub const PIDDSI_HIDDENCOUNT
: DWORD
= 0x00000009;
325 pub const PIDDSI_MMCLIPCOUNT
: DWORD
= 0x0000000A;
326 pub const PIDDSI_SCALE
: DWORD
= 0x0000000B;
327 pub const PIDDSI_HEADINGPAIR
: DWORD
= 0x0000000C;
328 pub const PIDDSI_DOCPARTS
: DWORD
= 0x0000000D;
329 pub const PIDDSI_MANAGER
: DWORD
= 0x0000000E;
330 pub const PIDDSI_COMPANY
: DWORD
= 0x0000000F;
331 pub const PIDDSI_LINKSDIRTY
: DWORD
= 0x00000010;
332 pub const PIDMSI_EDITOR
: DWORD
= 0x00000002;
333 pub const PIDMSI_SUPPLIER
: DWORD
= 0x00000003;
334 pub const PIDMSI_SOURCE
: DWORD
= 0x00000004;
335 pub const PIDMSI_SEQUENCE_NO
: DWORD
= 0x00000005;
336 pub const PIDMSI_PROJECT
: DWORD
= 0x00000006;
337 pub const PIDMSI_STATUS
: DWORD
= 0x00000007;
338 pub const PIDMSI_OWNER
: DWORD
= 0x00000008;
339 pub const PIDMSI_RATING
: DWORD
= 0x00000009;
340 pub const PIDMSI_PRODUCTION
: DWORD
= 0x0000000A;
341 pub const PIDMSI_COPYRIGHT
: DWORD
= 0x0000000B;
342 ENUM
!{enum PIDMSI_STATUS_VALUE
{
343 PIDMSI_STATUS_NORMAL
= 0,
345 PIDMSI_STATUS_PRELIM
,
347 PIDMSI_STATUS_INPROGRESS
,
349 PIDMSI_STATUS_REVIEW
,
352 PIDMSI_STATUS_OTHER
= 0x7fff,
355 pub fn PropVariantCopy(
356 pvarDest
: *mut PROPVARIANT
,
357 pvarSrc
: *const PROPVARIANT
,
359 pub fn PropVariantClear(
360 pvar
: *mut PROPVARIANT
,
362 pub fn FreePropVariantArray(
364 rgvars
: *mut PROPVARIANT
,
368 // pub fn PropVariantInit(pvar: *mut PROPVARIANT) {
369 // memset(pvar, 0, sizeof(PROPVARIANT))
371 STRUCT
!{struct SERIALIZEDPROPERTYVALUE
{
375 pub type PMemoryAllocator
= PVOID
;
377 pub fn StgConvertVariantToProperty(
378 pvar
: *const PROPVARIANT
,
380 pprop
: *mut SERIALIZEDPROPERTYVALUE
,
384 pcIndirect
: *mut ULONG
,
385 ) -> *mut SERIALIZEDPROPERTYVALUE
;
386 pub fn StgConvertPropertyToVariant(
387 pprop
: *const SERIALIZEDPROPERTYVALUE
,
389 pvar
: *mut PROPVARIANT
,
390 pma
: *mut PMemoryAllocator