// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. use ctypes::{__int64, c_double, c_short, c_ushort, c_void, wchar_t}; use shared::guiddef::{CLSID, GUID}; use shared::minwindef::{BYTE, DWORD, ULONG, USHORT, WORD}; use shared::ntdef::{LCID, LONG, LONGLONG, ULONGLONG}; use shared::rpcndr::byte; use shared::wtypesbase::{ BYTE_BLOB, DWORD_BLOB, FLAGGED_BYTE_BLOB, FLAGGED_WORD_BLOB, LPOLESTR, OLECHAR }; use um::wingdi::LOGPALETTE; // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0000_v0_0_c_ifspec; // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0000_v0_0_s_ifspec; STRUCT!{struct RemHGLOBAL { fNullHGlobal: LONG, cbData: ULONG, data: [byte; 1], }} STRUCT!{struct RemHMETAFILEPICT { mm: LONG, xExt: LONG, yExt: LONG, cbData: ULONG, data: [byte; 1], }} STRUCT!{struct RemHENHMETAFILE { cbData: ULONG, data: [byte; 1], }} STRUCT!{struct RemHBITMAP { cbData: ULONG, data: [byte; 1], }} STRUCT!{struct RemHPALETTE { cbData: ULONG, data: [byte; 1], }} STRUCT!{struct RemHBRUSH { cbData: ULONG, data: [byte; 1], }} pub const ROTFLAGS_REGISTRATIONKEEPSALIVE: DWORD = 0x1; pub const ROTFLAGS_ALLOWANYCLIENT: DWORD = 0x2; pub const ROT_COMPARE_MAX: DWORD = 2048; ENUM!{enum DVASPECT { DVASPECT_CONTENT = 1, DVASPECT_THUMBNAIL = 2, DVASPECT_ICON = 4, DVASPECT_DOCPRINT = 8, }} ENUM!{enum STGC { STGC_DEFAULT = 0, STGC_OVERWRITE = 1, STGC_ONLYIFCURRENT = 2, STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4, STGC_CONSOLIDATE = 8, }} ENUM!{enum STGMOVE { STGMOVE_MOVE = 0, STGMOVE_COPY = 1, STGMOVE_SHALLOWCOPY = 2, }} ENUM!{enum STATFLAG { STATFLAG_DEFAULT = 0, STATFLAG_NONAME = 1, STATFLAG_NOOPEN = 2, }} pub type HCONTEXT = *mut c_void; pub const WDT_INPROC_CALL: ULONG = 0x48746457; pub const WDT_REMOTE_CALL: ULONG = 0x52746457; pub const WDT_INPROC64_CALL: ULONG = 0x50746457; UNION!{union userCLIPFORMAT_u { [usize; 1], dwValue dwValue_mut: DWORD, pwszName pwszName_mut: *mut wchar_t, }} STRUCT!{struct userCLIPFORMAT { fContext: LONG, u: userCLIPFORMAT_u, }} pub type wireCLIPFORMAT = *mut userCLIPFORMAT; pub type CLIPFORMAT = WORD; UNION!{union GDI_NONREMOTE_u { [usize; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: *mut DWORD_BLOB, }} STRUCT!{struct GDI_NONREMOTE { fContext: LONG, u: GDI_NONREMOTE_u, }} UNION!{union userHGLOBAL_u { [u64; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: *mut FLAGGED_BYTE_BLOB, hInproc64 hInproc64_mut: __int64, }} STRUCT!{struct userHGLOBAL { fContext: LONG, u: userHGLOBAL_u, }} pub type wireHGLOBAL = *mut userHGLOBAL; UNION!{union userHMETAFILE_u { [u64; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: *mut BYTE_BLOB, hInproc64 hInproc64_mut: __int64, }} STRUCT!{struct userHMETAFILE { fContext: LONG, u: userHMETAFILE_u, }} STRUCT!{struct remoteMETAFILEPICT { mm: LONG, xExt: LONG, yExt: LONG, hMF: *mut userHMETAFILE, }} UNION!{union userHMETAFILEPICT_u { [u64; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: *mut remoteMETAFILEPICT, hInproc64 hInproc64_mut: __int64, }} STRUCT!{struct userHMETAFILEPICT { fContext: LONG, u: userHMETAFILEPICT_u, }} UNION!{union userHENHMETAFILE_u { [u64; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: *mut BYTE_BLOB, hInproc64 hInproc64_mut: __int64, }} STRUCT!{struct userHENHMETAFILE { fContext: LONG, u: userHENHMETAFILE_u, }} STRUCT!{struct userBITMAP { bmType: LONG, bmWidth: LONG, bmHeight: LONG, bmWidthBytes: LONG, bmPlanes: WORD, bmBitsPixel: WORD, cbSize: ULONG, pBuffer: [byte; 1], }} UNION!{union userHBITMAP_u { [u64; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: *mut userBITMAP, hInproc64 hInproc64_mut: __int64, }} STRUCT!{struct userHBITMAP { fContext: LONG, u: userHBITMAP_u, }} UNION!{union userHPALETTE_u { [u64; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: *mut LOGPALETTE, hInproc64 hInproc64_mut: __int64, }} STRUCT!{struct userHPALETTE { fContext: LONG, u: userHPALETTE_u, }} UNION!{union RemotableHandle_u { [u32; 1], hInproc hInproc_mut: LONG, hRemote hRemote_mut: LONG, }} STRUCT!{struct RemotableHandle { fContext: LONG, u: RemotableHandle_u, }} pub type wireHWND = *mut RemotableHandle; pub type wireHMENU = *mut RemotableHandle; pub type wireHACCEL = *mut RemotableHandle; pub type wireHBRUSH = *mut RemotableHandle; pub type wireHFONT = *mut RemotableHandle; pub type wireHDC = *mut RemotableHandle; pub type wireHICON = *mut RemotableHandle; pub type wireHRGN = *mut RemotableHandle; pub type wireHMONITOR = *mut RemotableHandle; pub type wireHBITMAP = *mut userHBITMAP; pub type wireHPALETTE = *mut userHPALETTE; pub type wireHENHMETAFILE = *mut userHENHMETAFILE; pub type wireHMETAFILE = *mut userHMETAFILE; pub type wireHMETAFILEPICT = *mut userHMETAFILEPICT; pub type HMETAFILEPICT = *mut c_void; // extern RPC_IF_HANDLE IWinTypes_v0_1_c_ifspec; // extern RPC_IF_HANDLE IWinTypes_v0_1_s_ifspec; pub type DATE = c_double; STRUCT!{struct CY { int64: LONGLONG, }} pub type LPCY = *mut CY; STRUCT!{struct DECIMAL { wReserved: USHORT, scale: BYTE, sign: BYTE, Hi32: ULONG, Lo64: ULONGLONG, }} pub const DECIMAL_NEG: BYTE = 0x80; #[inline] pub fn DECIMAL_SETZERO(dec: &mut DECIMAL) { dec.Lo64 = 0; dec.Hi32 = 0; dec.scale = 0; dec.sign = 0; } pub type LPDECIMAL = *mut DECIMAL; pub type wireBSTR = *mut FLAGGED_WORD_BLOB; pub type BSTR = *mut OLECHAR; pub type LPBSTR = *mut BSTR; pub type VARIANT_BOOL = c_short; STRUCT!{struct BSTRBLOB { cbSize: ULONG, pData: *mut BYTE, }} pub type LPBSTRBLOB = *mut BSTRBLOB; pub const VARIANT_TRUE: VARIANT_BOOL = -1; pub const VARIANT_FALSE: VARIANT_BOOL = 0; STRUCT!{struct CLIPDATA { cbSize: ULONG, ulClipFmt: LONG, pClipData: *mut BYTE, }} #[inline] pub fn CBPCLIPDATA(clipdata: CLIPDATA) -> ULONG { clipdata.cbSize - 4 } pub type VARTYPE = c_ushort; ENUM!{enum VARENUM { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, VT_R4 = 4, VT_R8 = 5, VT_CY = 6, VT_DATE = 7, VT_BSTR = 8, VT_DISPATCH = 9, VT_ERROR = 10, VT_BOOL = 11, VT_VARIANT = 12, VT_UNKNOWN = 13, VT_DECIMAL = 14, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_INT = 22, VT_UINT = 23, VT_VOID = 24, VT_HRESULT = 25, VT_PTR = 26, VT_SAFEARRAY = 27, VT_CARRAY = 28, VT_USERDEFINED = 29, VT_LPSTR = 30, VT_LPWSTR = 31, VT_RECORD = 36, VT_INT_PTR = 37, VT_UINT_PTR = 38, VT_FILETIME = 64, VT_BLOB = 65, VT_STREAM = 66, VT_STORAGE = 67, VT_STREAMED_OBJECT = 68, VT_STORED_OBJECT = 69, VT_BLOB_OBJECT = 70, VT_CF = 71, VT_CLSID = 72, VT_VERSIONED_STREAM = 73, VT_BSTR_BLOB = 0xfff, VT_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0xfff, VT_TYPEMASK = 0xfff, }} pub type PROPID = ULONG; STRUCT!{struct PROPERTYKEY { fmtid: GUID, pid: DWORD, }} STRUCT!{struct CSPLATFORM { dwPlatformId: DWORD, dwVersionHi: DWORD, dwVersionLo: DWORD, dwProcessorArch: DWORD, }} STRUCT!{struct QUERYCONTEXT { dwContext: DWORD, Platform: CSPLATFORM, Locale: LCID, dwVersionHi: DWORD, dwVersionLo: DWORD, }} ENUM!{enum TYSPEC { TYSPEC_CLSID, TYSPEC_FILEEXT, TYSPEC_MIMETYPE, TYSPEC_FILENAME, TYSPEC_PROGID, TYSPEC_PACKAGENAME, TYSPEC_OBJECTID, }} STRUCT!{struct uCLSSPEC_ByName { pPackageName: LPOLESTR, PolicyId: GUID, }} STRUCT!{struct uCLSSPEC_ByObjectId { ObjectId: GUID, PolicyId: GUID, }} UNION!{union uCLSSPEC_u { [u32; 8] [u64; 4], clsid clsid_mut: CLSID, pFileExt pFileExt_mut: LPOLESTR, pMimeType pMimeType_mut: LPOLESTR, pProgId pProgId_mut: LPOLESTR, pFileName pFileName_mut: LPOLESTR, ByName ByName_mut: uCLSSPEC_ByName, ByObjectId ByObjectId_mut: uCLSSPEC_ByObjectId, }} STRUCT!{struct uCLSSPEC { tyspec: DWORD, u: uCLSSPEC_u, }} // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0001_v0_0_c_ifspec; // extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_0001_v0_0_s_ifspec;