winapi_ui_automation/shared/
wtypes.rs

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.
6use ctypes::{__int64, c_double, c_short, c_ushort, c_void, wchar_t};
7use shared::guiddef::{CLSID, GUID};
8use shared::minwindef::{BYTE, DWORD, ULONG, USHORT, WORD};
9use shared::ntdef::{LCID, LONG, LONGLONG, ULONGLONG};
10use shared::rpcndr::byte;
11use shared::wtypesbase::{
12    BYTE_BLOB, DWORD_BLOB, FLAGGED_BYTE_BLOB, FLAGGED_WORD_BLOB, LPOLESTR, OLECHAR
13};
14use 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;
17STRUCT!{struct RemHGLOBAL {
18    fNullHGlobal: LONG,
19    cbData: ULONG,
20    data: [byte; 1],
21}}
22STRUCT!{struct RemHMETAFILEPICT {
23    mm: LONG,
24    xExt: LONG,
25    yExt: LONG,
26    cbData: ULONG,
27    data: [byte; 1],
28}}
29STRUCT!{struct RemHENHMETAFILE {
30    cbData: ULONG,
31    data: [byte; 1],
32}}
33STRUCT!{struct RemHBITMAP {
34    cbData: ULONG,
35    data: [byte; 1],
36}}
37STRUCT!{struct RemHPALETTE {
38    cbData: ULONG,
39    data: [byte; 1],
40}}
41STRUCT!{struct RemHBRUSH {
42    cbData: ULONG,
43    data: [byte; 1],
44}}
45pub const ROTFLAGS_REGISTRATIONKEEPSALIVE: DWORD = 0x1;
46pub const ROTFLAGS_ALLOWANYCLIENT: DWORD = 0x2;
47pub const ROT_COMPARE_MAX: DWORD = 2048;
48ENUM!{enum DVASPECT {
49    DVASPECT_CONTENT = 1,
50    DVASPECT_THUMBNAIL = 2,
51    DVASPECT_ICON = 4,
52    DVASPECT_DOCPRINT = 8,
53}}
54ENUM!{enum STGC {
55    STGC_DEFAULT = 0,
56    STGC_OVERWRITE = 1,
57    STGC_ONLYIFCURRENT = 2,
58    STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
59    STGC_CONSOLIDATE = 8,
60}}
61ENUM!{enum STGMOVE {
62    STGMOVE_MOVE = 0,
63    STGMOVE_COPY = 1,
64    STGMOVE_SHALLOWCOPY = 2,
65}}
66ENUM!{enum STATFLAG {
67    STATFLAG_DEFAULT = 0,
68    STATFLAG_NONAME = 1,
69    STATFLAG_NOOPEN = 2,
70}}
71pub type HCONTEXT = *mut c_void;
72pub const WDT_INPROC_CALL: ULONG = 0x48746457;
73pub const WDT_REMOTE_CALL: ULONG = 0x52746457;
74pub const WDT_INPROC64_CALL: ULONG = 0x50746457;
75UNION!{union userCLIPFORMAT_u {
76    [usize; 1],
77    dwValue dwValue_mut: DWORD,
78    pwszName pwszName_mut: *mut wchar_t,
79}}
80STRUCT!{struct userCLIPFORMAT {
81    fContext: LONG,
82    u: userCLIPFORMAT_u,
83}}
84pub type wireCLIPFORMAT = *mut userCLIPFORMAT;
85pub type CLIPFORMAT = WORD;
86UNION!{union GDI_NONREMOTE_u {
87    [usize; 1],
88    hInproc hInproc_mut: LONG,
89    hRemote hRemote_mut: *mut DWORD_BLOB,
90}}
91STRUCT!{struct GDI_NONREMOTE {
92    fContext: LONG,
93    u: GDI_NONREMOTE_u,
94}}
95UNION!{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}}
101STRUCT!{struct userHGLOBAL {
102    fContext: LONG,
103    u: userHGLOBAL_u,
104}}
105pub type wireHGLOBAL = *mut userHGLOBAL;
106UNION!{union userHMETAFILE_u {
107    [u64; 1],
108    hInproc hInproc_mut: LONG,
109    hRemote hRemote_mut: *mut BYTE_BLOB,
110    hInproc64 hInproc64_mut: __int64,
111}}
112STRUCT!{struct userHMETAFILE {
113    fContext: LONG,
114    u: userHMETAFILE_u,
115}}
116STRUCT!{struct remoteMETAFILEPICT {
117    mm: LONG,
118    xExt: LONG,
119    yExt: LONG,
120    hMF: *mut userHMETAFILE,
121}}
122UNION!{union userHMETAFILEPICT_u {
123    [u64; 1],
124    hInproc hInproc_mut: LONG,
125    hRemote hRemote_mut: *mut remoteMETAFILEPICT,
126    hInproc64 hInproc64_mut: __int64,
127}}
128STRUCT!{struct userHMETAFILEPICT {
129    fContext: LONG,
130    u: userHMETAFILEPICT_u,
131}}
132UNION!{union userHENHMETAFILE_u {
133    [u64; 1],
134    hInproc hInproc_mut: LONG,
135    hRemote hRemote_mut: *mut BYTE_BLOB,
136    hInproc64 hInproc64_mut: __int64,
137}}
138STRUCT!{struct userHENHMETAFILE {
139    fContext: LONG,
140    u: userHENHMETAFILE_u,
141}}
142STRUCT!{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}}
152UNION!{union userHBITMAP_u {
153    [u64; 1],
154    hInproc hInproc_mut: LONG,
155    hRemote hRemote_mut: *mut userBITMAP,
156    hInproc64 hInproc64_mut: __int64,
157}}
158STRUCT!{struct userHBITMAP {
159    fContext: LONG,
160    u: userHBITMAP_u,
161}}
162UNION!{union userHPALETTE_u {
163    [u64; 1],
164    hInproc hInproc_mut: LONG,
165    hRemote hRemote_mut: *mut LOGPALETTE,
166    hInproc64 hInproc64_mut: __int64,
167}}
168STRUCT!{struct userHPALETTE {
169    fContext: LONG,
170    u: userHPALETTE_u,
171}}
172UNION!{union RemotableHandle_u {
173    [u32; 1],
174    hInproc hInproc_mut: LONG,
175    hRemote hRemote_mut: LONG,
176}}
177STRUCT!{struct RemotableHandle {
178    fContext: LONG,
179    u: RemotableHandle_u,
180}}
181pub type wireHWND = *mut RemotableHandle;
182pub type wireHMENU = *mut RemotableHandle;
183pub type wireHACCEL = *mut RemotableHandle;
184pub type wireHBRUSH = *mut RemotableHandle;
185pub type wireHFONT = *mut RemotableHandle;
186pub type wireHDC = *mut RemotableHandle;
187pub type wireHICON = *mut RemotableHandle;
188pub type wireHRGN = *mut RemotableHandle;
189pub type wireHMONITOR = *mut RemotableHandle;
190pub type wireHBITMAP = *mut userHBITMAP;
191pub type wireHPALETTE = *mut userHPALETTE;
192pub type wireHENHMETAFILE = *mut userHENHMETAFILE;
193pub type wireHMETAFILE = *mut userHMETAFILE;
194pub type wireHMETAFILEPICT = *mut userHMETAFILEPICT;
195pub 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;
198pub type DATE = c_double;
199STRUCT!{struct CY {
200    int64: LONGLONG,
201}}
202pub type LPCY = *mut CY;
203STRUCT!{struct DECIMAL {
204    wReserved: USHORT,
205    scale: BYTE,
206    sign: BYTE,
207    Hi32: ULONG,
208    Lo64: ULONGLONG,
209}}
210pub const DECIMAL_NEG: BYTE = 0x80;
211#[inline]
212pub fn DECIMAL_SETZERO(dec: &mut DECIMAL) {
213    dec.Lo64 = 0;
214    dec.Hi32 = 0;
215    dec.scale = 0;
216    dec.sign = 0;
217}
218pub type LPDECIMAL = *mut DECIMAL;
219pub type wireBSTR = *mut FLAGGED_WORD_BLOB;
220pub type BSTR = *mut OLECHAR;
221pub type LPBSTR = *mut BSTR;
222pub type VARIANT_BOOL = c_short;
223STRUCT!{struct BSTRBLOB {
224    cbSize: ULONG,
225    pData: *mut BYTE,
226}}
227pub type LPBSTRBLOB = *mut BSTRBLOB;
228pub const VARIANT_TRUE: VARIANT_BOOL = -1;
229pub const VARIANT_FALSE: VARIANT_BOOL = 0;
230STRUCT!{struct CLIPDATA {
231    cbSize: ULONG,
232    ulClipFmt: LONG,
233    pClipData: *mut BYTE,
234}}
235#[inline]
236pub fn CBPCLIPDATA(clipdata: CLIPDATA) -> ULONG {
237    clipdata.cbSize - 4
238}
239pub type VARTYPE = c_ushort;
240ENUM!{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}}
294pub type PROPID = ULONG;
295STRUCT!{struct PROPERTYKEY {
296    fmtid: GUID,
297    pid: DWORD,
298}}
299STRUCT!{struct CSPLATFORM {
300    dwPlatformId: DWORD,
301    dwVersionHi: DWORD,
302    dwVersionLo: DWORD,
303    dwProcessorArch: DWORD,
304}}
305STRUCT!{struct QUERYCONTEXT {
306    dwContext: DWORD,
307    Platform: CSPLATFORM,
308    Locale: LCID,
309    dwVersionHi: DWORD,
310    dwVersionLo: DWORD,
311}}
312ENUM!{enum TYSPEC {
313    TYSPEC_CLSID,
314    TYSPEC_FILEEXT,
315    TYSPEC_MIMETYPE,
316    TYSPEC_FILENAME,
317    TYSPEC_PROGID,
318    TYSPEC_PACKAGENAME,
319    TYSPEC_OBJECTID,
320}}
321STRUCT!{struct uCLSSPEC_ByName {
322    pPackageName: LPOLESTR,
323    PolicyId: GUID,
324}}
325STRUCT!{struct uCLSSPEC_ByObjectId {
326    ObjectId: GUID,
327    PolicyId: GUID,
328}}
329UNION!{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}}
339STRUCT!{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;