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 ctypes::{__int64, c_double, c_short, c_ushort, c_void, wchar_t};
7 use shared::guiddef::{CLSID, GUID};
8 use shared::minwindef::{BYTE, DWORD, ULONG, USHORT, WORD};
9 use shared::ntdef::{LCID, LONG, LONGLONG, ULONGLONG};
10 use shared::rpcndr::byte;
11 use shared::wtypesbase::{
12     BYTE_BLOB, DWORD_BLOB, FLAGGED_BYTE_BLOB, FLAGGED_WORD_BLOB, LPOLESTR, OLECHAR
13 };
14 use um::wingdi::LOGPALETTE;
15 // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0000_v0_0_c_ifspec;
16 // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0000_v0_0_s_ifspec;
17 STRUCT!{struct RemHGLOBAL {
18     fNullHGlobal: LONG,
19     cbData: ULONG,
20     data: [byte; 1],
21 }}
22 STRUCT!{struct RemHMETAFILEPICT {
23     mm: LONG,
24     xExt: LONG,
25     yExt: LONG,
26     cbData: ULONG,
27     data: [byte; 1],
28 }}
29 STRUCT!{struct RemHENHMETAFILE {
30     cbData: ULONG,
31     data: [byte; 1],
32 }}
33 STRUCT!{struct RemHBITMAP {
34     cbData: ULONG,
35     data: [byte; 1],
36 }}
37 STRUCT!{struct RemHPALETTE {
38     cbData: ULONG,
39     data: [byte; 1],
40 }}
41 STRUCT!{struct RemHBRUSH {
42     cbData: ULONG,
43     data: [byte; 1],
44 }}
45 pub const ROTFLAGS_REGISTRATIONKEEPSALIVE: DWORD = 0x1;
46 pub const ROTFLAGS_ALLOWANYCLIENT: DWORD = 0x2;
47 pub const ROT_COMPARE_MAX: DWORD = 2048;
48 ENUM!{enum DVASPECT {
49     DVASPECT_CONTENT = 1,
50     DVASPECT_THUMBNAIL = 2,
51     DVASPECT_ICON = 4,
52     DVASPECT_DOCPRINT = 8,
53 }}
54 ENUM!{enum STGC {
55     STGC_DEFAULT = 0,
56     STGC_OVERWRITE = 1,
57     STGC_ONLYIFCURRENT = 2,
58     STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
59     STGC_CONSOLIDATE = 8,
60 }}
61 ENUM!{enum STGMOVE {
62     STGMOVE_MOVE = 0,
63     STGMOVE_COPY = 1,
64     STGMOVE_SHALLOWCOPY = 2,
65 }}
66 ENUM!{enum STATFLAG {
67     STATFLAG_DEFAULT = 0,
68     STATFLAG_NONAME = 1,
69     STATFLAG_NOOPEN = 2,
70 }}
71 pub type HCONTEXT = *mut c_void;
72 pub const WDT_INPROC_CALL: ULONG = 0x48746457;
73 pub const WDT_REMOTE_CALL: ULONG = 0x52746457;
74 pub const WDT_INPROC64_CALL: ULONG = 0x50746457;
75 UNION!{union userCLIPFORMAT_u {
76     [usize; 1],
77     dwValue dwValue_mut: DWORD,
78     pwszName pwszName_mut: *mut wchar_t,
79 }}
80 STRUCT!{struct userCLIPFORMAT {
81     fContext: LONG,
82     u: userCLIPFORMAT_u,
83 }}
84 pub type wireCLIPFORMAT = *mut userCLIPFORMAT;
85 pub type CLIPFORMAT = WORD;
86 UNION!{union GDI_NONREMOTE_u {
87     [usize; 1],
88     hInproc hInproc_mut: LONG,
89     hRemote hRemote_mut: *mut DWORD_BLOB,
90 }}
91 STRUCT!{struct GDI_NONREMOTE {
92     fContext: LONG,
93     u: GDI_NONREMOTE_u,
94 }}
95 UNION!{union userHGLOBAL_u {
96     [u64; 1],
97     hInproc hInproc_mut: LONG,
98     hRemote hRemote_mut: *mut FLAGGED_BYTE_BLOB,
99     hInproc64 hInproc64_mut: __int64,
100 }}
101 STRUCT!{struct userHGLOBAL {
102     fContext: LONG,
103     u: userHGLOBAL_u,
104 }}
105 pub type wireHGLOBAL = *mut userHGLOBAL;
106 UNION!{union userHMETAFILE_u {
107     [u64; 1],
108     hInproc hInproc_mut: LONG,
109     hRemote hRemote_mut: *mut BYTE_BLOB,
110     hInproc64 hInproc64_mut: __int64,
111 }}
112 STRUCT!{struct userHMETAFILE {
113     fContext: LONG,
114     u: userHMETAFILE_u,
115 }}
116 STRUCT!{struct remoteMETAFILEPICT {
117     mm: LONG,
118     xExt: LONG,
119     yExt: LONG,
120     hMF: *mut userHMETAFILE,
121 }}
122 UNION!{union userHMETAFILEPICT_u {
123     [u64; 1],
124     hInproc hInproc_mut: LONG,
125     hRemote hRemote_mut: *mut remoteMETAFILEPICT,
126     hInproc64 hInproc64_mut: __int64,
127 }}
128 STRUCT!{struct userHMETAFILEPICT {
129     fContext: LONG,
130     u: userHMETAFILEPICT_u,
131 }}
132 UNION!{union userHENHMETAFILE_u {
133     [u64; 1],
134     hInproc hInproc_mut: LONG,
135     hRemote hRemote_mut: *mut BYTE_BLOB,
136     hInproc64 hInproc64_mut: __int64,
137 }}
138 STRUCT!{struct userHENHMETAFILE {
139     fContext: LONG,
140     u: userHENHMETAFILE_u,
141 }}
142 STRUCT!{struct userBITMAP {
143     bmType: LONG,
144     bmWidth: LONG,
145     bmHeight: LONG,
146     bmWidthBytes: LONG,
147     bmPlanes: WORD,
148     bmBitsPixel: WORD,
149     cbSize: ULONG,
150     pBuffer: [byte; 1],
151 }}
152 UNION!{union userHBITMAP_u {
153     [u64; 1],
154     hInproc hInproc_mut: LONG,
155     hRemote hRemote_mut: *mut userBITMAP,
156     hInproc64 hInproc64_mut: __int64,
157 }}
158 STRUCT!{struct userHBITMAP {
159     fContext: LONG,
160     u: userHBITMAP_u,
161 }}
162 UNION!{union userHPALETTE_u {
163     [u64; 1],
164     hInproc hInproc_mut: LONG,
165     hRemote hRemote_mut: *mut LOGPALETTE,
166     hInproc64 hInproc64_mut: __int64,
167 }}
168 STRUCT!{struct userHPALETTE {
169     fContext: LONG,
170     u: userHPALETTE_u,
171 }}
172 UNION!{union RemotableHandle_u {
173     [u32; 1],
174     hInproc hInproc_mut: LONG,
175     hRemote hRemote_mut: LONG,
176 }}
177 STRUCT!{struct RemotableHandle {
178     fContext: LONG,
179     u: RemotableHandle_u,
180 }}
181 pub type wireHWND = *mut RemotableHandle;
182 pub type wireHMENU = *mut RemotableHandle;
183 pub type wireHACCEL = *mut RemotableHandle;
184 pub type wireHBRUSH = *mut RemotableHandle;
185 pub type wireHFONT = *mut RemotableHandle;
186 pub type wireHDC = *mut RemotableHandle;
187 pub type wireHICON = *mut RemotableHandle;
188 pub type wireHRGN = *mut RemotableHandle;
189 pub type wireHMONITOR = *mut RemotableHandle;
190 pub type wireHBITMAP = *mut userHBITMAP;
191 pub type wireHPALETTE = *mut userHPALETTE;
192 pub type wireHENHMETAFILE = *mut userHENHMETAFILE;
193 pub type wireHMETAFILE = *mut userHMETAFILE;
194 pub type wireHMETAFILEPICT = *mut userHMETAFILEPICT;
195 pub type HMETAFILEPICT = *mut c_void;
196 // extern RPC_IF_HANDLE IWinTypes_v0_1_c_ifspec;
197 // extern RPC_IF_HANDLE IWinTypes_v0_1_s_ifspec;
198 pub type DATE = c_double;
199 STRUCT!{struct CY {
200     int64: LONGLONG,
201 }}
202 pub type LPCY = *mut CY;
203 STRUCT!{struct DECIMAL {
204     wReserved: USHORT,
205     scale: BYTE,
206     sign: BYTE,
207     Hi32: ULONG,
208     Lo64: ULONGLONG,
209 }}
210 pub const DECIMAL_NEG: BYTE = 0x80;
211 #[inline]
DECIMAL_SETZERO(dec: &mut DECIMAL)212 pub fn DECIMAL_SETZERO(dec: &mut DECIMAL) {
213     dec.Lo64 = 0;
214     dec.Hi32 = 0;
215     dec.scale = 0;
216     dec.sign = 0;
217 }
218 pub type LPDECIMAL = *mut DECIMAL;
219 pub type wireBSTR = *mut FLAGGED_WORD_BLOB;
220 pub type BSTR = *mut OLECHAR;
221 pub type LPBSTR = *mut BSTR;
222 pub type VARIANT_BOOL = c_short;
223 STRUCT!{struct BSTRBLOB {
224     cbSize: ULONG,
225     pData: *mut BYTE,
226 }}
227 pub type LPBSTRBLOB = *mut BSTRBLOB;
228 pub const VARIANT_TRUE: VARIANT_BOOL = -1;
229 pub const VARIANT_FALSE: VARIANT_BOOL = 0;
230 STRUCT!{struct CLIPDATA {
231     cbSize: ULONG,
232     ulClipFmt: LONG,
233     pClipData: *mut BYTE,
234 }}
235 #[inline]
CBPCLIPDATA(clipdata: CLIPDATA) -> ULONG236 pub fn CBPCLIPDATA(clipdata: CLIPDATA) -> ULONG {
237     clipdata.cbSize - 4
238 }
239 pub type VARTYPE = c_ushort;
240 ENUM!{enum VARENUM {
241     VT_EMPTY = 0,
242     VT_NULL = 1,
243     VT_I2 = 2,
244     VT_I4 = 3,
245     VT_R4 = 4,
246     VT_R8 = 5,
247     VT_CY = 6,
248     VT_DATE = 7,
249     VT_BSTR = 8,
250     VT_DISPATCH = 9,
251     VT_ERROR = 10,
252     VT_BOOL = 11,
253     VT_VARIANT = 12,
254     VT_UNKNOWN = 13,
255     VT_DECIMAL = 14,
256     VT_I1 = 16,
257     VT_UI1 = 17,
258     VT_UI2 = 18,
259     VT_UI4 = 19,
260     VT_I8 = 20,
261     VT_UI8 = 21,
262     VT_INT = 22,
263     VT_UINT = 23,
264     VT_VOID = 24,
265     VT_HRESULT = 25,
266     VT_PTR = 26,
267     VT_SAFEARRAY = 27,
268     VT_CARRAY = 28,
269     VT_USERDEFINED = 29,
270     VT_LPSTR = 30,
271     VT_LPWSTR = 31,
272     VT_RECORD = 36,
273     VT_INT_PTR = 37,
274     VT_UINT_PTR = 38,
275     VT_FILETIME = 64,
276     VT_BLOB = 65,
277     VT_STREAM = 66,
278     VT_STORAGE = 67,
279     VT_STREAMED_OBJECT = 68,
280     VT_STORED_OBJECT = 69,
281     VT_BLOB_OBJECT = 70,
282     VT_CF = 71,
283     VT_CLSID = 72,
284     VT_VERSIONED_STREAM = 73,
285     VT_BSTR_BLOB = 0xfff,
286     VT_VECTOR = 0x1000,
287     VT_ARRAY = 0x2000,
288     VT_BYREF = 0x4000,
289     VT_RESERVED = 0x8000,
290     VT_ILLEGAL = 0xffff,
291     VT_ILLEGALMASKED = 0xfff,
292     VT_TYPEMASK = 0xfff,
293 }}
294 pub type PROPID = ULONG;
295 STRUCT!{struct PROPERTYKEY {
296     fmtid: GUID,
297     pid: DWORD,
298 }}
299 STRUCT!{struct CSPLATFORM {
300     dwPlatformId: DWORD,
301     dwVersionHi: DWORD,
302     dwVersionLo: DWORD,
303     dwProcessorArch: DWORD,
304 }}
305 STRUCT!{struct QUERYCONTEXT {
306     dwContext: DWORD,
307     Platform: CSPLATFORM,
308     Locale: LCID,
309     dwVersionHi: DWORD,
310     dwVersionLo: DWORD,
311 }}
312 ENUM!{enum TYSPEC {
313     TYSPEC_CLSID,
314     TYSPEC_FILEEXT,
315     TYSPEC_MIMETYPE,
316     TYSPEC_FILENAME,
317     TYSPEC_PROGID,
318     TYSPEC_PACKAGENAME,
319     TYSPEC_OBJECTID,
320 }}
321 STRUCT!{struct uCLSSPEC_ByName {
322     pPackageName: LPOLESTR,
323     PolicyId: GUID,
324 }}
325 STRUCT!{struct uCLSSPEC_ByObjectId {
326     ObjectId: GUID,
327     PolicyId: GUID,
328 }}
329 UNION!{union uCLSSPEC_u {
330     [u32; 8] [u64; 4],
331     clsid clsid_mut: CLSID,
332     pFileExt pFileExt_mut: LPOLESTR,
333     pMimeType pMimeType_mut: LPOLESTR,
334     pProgId pProgId_mut: LPOLESTR,
335     pFileName pFileName_mut: LPOLESTR,
336     ByName ByName_mut: uCLSSPEC_ByName,
337     ByObjectId ByObjectId_mut: uCLSSPEC_ByObjectId,
338 }}
339 STRUCT!{struct uCLSSPEC {
340     tyspec: DWORD,
341     u: uCLSSPEC_u,
342 }}
343 // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0001_v0_0_c_ifspec;
344 // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0001_v0_0_s_ifspec;
345