propvarutil.h (8051B) - Raw
1 /* 2 * Copyright 2008 James Hawkins for CodeWeavers 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 #ifndef __WINE_PROPVARUTIL_H 20 #define __WINE_PROPVARUTIL_H 21 22 #include <shtypes.h> 23 #include <shlwapi.h> 24 25 #ifndef WINE_NTSTATUS_DECLARED 26 #define WINE_NTSTATUS_DECLARED 27 typedef LONG NTSTATUS; 28 #endif 29 30 #ifndef PSSTDAPI 31 #ifdef _PROPSYS_ 32 #define PSSTDAPI STDAPI 33 #define PSSTDAPI_(type) STDAPI_(type) 34 #else 35 #define PSSTDAPI DECLSPEC_IMPORT STDAPI 36 #define PSSTDAPI_(type) DECLSPEC_IMPORT STDAPI_(type) 37 #endif 38 #endif 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 enum tagPROPVAR_CHANGE_FLAGS 45 { 46 PVCHF_DEFAULT = 0x00000000, 47 PVCHF_NOVALUEPROP = 0x00000001, 48 PVCHF_ALPHABOOL = 0x00000002, 49 PVCHF_NOUSEROVERRIDE = 0x00000004, 50 PVCHF_LOCALBOOL = 0x00000008, 51 PVCHF_NOHEXSTRING = 0x00000010, 52 }; 53 54 typedef int PROPVAR_CHANGE_FLAGS; 55 56 enum tagPROPVAR_COMPARE_UNIT 57 { 58 PVCU_DEFAULT = 0x00000000, 59 PVCU_SECOND = 0x00000001, 60 PVCU_MINUTE = 0x00000002, 61 PVCU_HOUR = 0x00000003, 62 PVCU_DAY = 0x00000004, 63 PVCU_MONTH = 0x00000005, 64 PVCU_YEAR = 0x00000006, 65 }; 66 67 typedef int PROPVAR_COMPARE_UNIT; 68 69 enum tagPROPVAR_COMPARE_FLAGS 70 { 71 PVCF_DEFAULT = 0x00000000, 72 PVCF_TREATEMPTYASGREATERTHAN = 0x00000001, 73 PVCF_USESTRCMP = 0x00000002, 74 PVCF_USESTRCMPC = 0x00000004, 75 PVCF_USESTRCMPI = 0x00000008, 76 PVCF_USESTRCMPIC = 0x00000010, 77 }; 78 79 typedef int PROPVAR_COMPARE_FLAGS; 80 81 PSSTDAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc, 82 PROPVAR_CHANGE_FLAGS flags, VARTYPE vt); 83 PSSTDAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar); 84 PSSTDAPI InitVariantFromFileTime(const FILETIME *ft, VARIANT *var); 85 PSSTDAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar); 86 PSSTDAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar); 87 PSSTDAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar); 88 PSSTDAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar); 89 PSSTDAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid); 90 PSSTDAPI VariantToGUID(const VARIANT *pvar, GUID *guid); 91 PSSTDAPI_(INT) PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2, 92 PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags); 93 PSSTDAPI InitPropVariantFromFileTime(const FILETIME *pftIn, PROPVARIANT *ppropvar); 94 PSSTDAPI InitPropVariantFromStringVector(PCWSTR *strs, ULONG count, PROPVARIANT *ppropvar); 95 96 PSSTDAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret); 97 PSSTDAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret); 98 PSSTDAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret); 99 PSSTDAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret); 100 PSSTDAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret); 101 PSSTDAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret); 102 PSSTDAPI_(ULONG) PropVariantToUInt32WithDefault(REFPROPVARIANT propvarIn, ULONG uLDefault); 103 PSSTDAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret); 104 PSSTDAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, WINBOOL *ret); 105 PSSTDAPI PropVariantToBSTR(REFPROPVARIANT propvar, BSTR *bstr); 106 PSSTDAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb); 107 PSSTDAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch); 108 PSSTDAPI_(PCWSTR) PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault); 109 PSSTDAPI_(PCWSTR) VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault); 110 PSSTDAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch); 111 112 PSSTDAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret); 113 114 PSSTDAPI PropVariantToVariant(const PROPVARIANT *propvar, VARIANT *var); 115 PSSTDAPI VariantToPropVariant(const VARIANT* var, PROPVARIANT* propvar); 116 117 PSSTDAPI PropVariantGetStringElem(const PROPVARIANT *propvar, ULONG idx, WCHAR **ret); 118 119 #ifdef __cplusplus 120 121 HRESULT InitPropVariantFromBoolean(WINBOOL fVal, PROPVARIANT *ppropvar); 122 HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar); 123 HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar); 124 HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar); 125 HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar); 126 HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar); 127 HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar); 128 HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar); 129 HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar); 130 HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar); 131 WINBOOL IsPropVariantVector(REFPROPVARIANT propvar); 132 WINBOOL IsPropVariantString(REFPROPVARIANT propvar); 133 134 #ifndef NO_PROPVAR_INLINES 135 136 inline HRESULT InitPropVariantFromBoolean(WINBOOL fVal, PROPVARIANT *ppropvar) 137 { 138 ppropvar->vt = VT_BOOL; 139 ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE; 140 return S_OK; 141 } 142 143 inline HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar) 144 { 145 ppropvar->vt = VT_I2; 146 ppropvar->iVal = nVal; 147 return S_OK; 148 } 149 150 inline HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar) 151 { 152 ppropvar->vt = VT_UI2; 153 ppropvar->uiVal = uiVal; 154 return S_OK; 155 } 156 157 inline HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar) 158 { 159 ppropvar->vt = VT_I4; 160 ppropvar->lVal = lVal; 161 return S_OK; 162 } 163 164 inline HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar) 165 { 166 ppropvar->vt = VT_UI4; 167 ppropvar->ulVal = ulVal; 168 return S_OK; 169 } 170 171 inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar) 172 { 173 ppropvar->vt = VT_I8; 174 ppropvar->hVal.QuadPart = llVal; 175 return S_OK; 176 } 177 178 inline HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar) 179 { 180 ppropvar->vt = VT_UI8; 181 ppropvar->uhVal.QuadPart = ullVal; 182 return S_OK; 183 } 184 185 inline HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar) 186 { 187 ppropvar->vt = VT_R8; 188 ppropvar->dblVal = dblVal; 189 return S_OK; 190 } 191 192 inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar) 193 { 194 HRESULT hres; 195 196 hres = SHStrDupW(psz, &ppropvar->pwszVal); 197 if(SUCCEEDED(hres)) 198 ppropvar->vt = VT_LPWSTR; 199 else 200 PropVariantInit(ppropvar); 201 202 return hres; 203 } 204 205 inline HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar) 206 { 207 #ifdef __cplusplus 208 return InitPropVariantFromBuffer(&guid, sizeof(GUID), ppropvar); 209 #else 210 return InitPropVariantFromBuffer(guid, sizeof(GUID), ppropvar); 211 #endif 212 } 213 214 inline WINBOOL IsPropVariantVector(REFPROPVARIANT propvar) 215 { 216 return (propvar.vt & (VT_ARRAY | VT_VECTOR)); 217 } 218 219 inline WINBOOL IsPropVariantString(REFPROPVARIANT propvar) 220 { 221 return (PropVariantToStringWithDefault(propvar, NULL) != NULL); 222 } 223 224 #endif /* NO_PROPVAR_INLINES */ 225 #endif /* __cplusplus */ 226 227 PSSTDAPI StgSerializePropVariant(const PROPVARIANT *ppropvar, SERIALIZEDPROPERTYVALUE **ppprop, ULONG *pcb); 228 PSSTDAPI StgDeserializePropVariant(const SERIALIZEDPROPERTYVALUE *pprop, ULONG cbmax, PROPVARIANT *ppropvar); 229 230 #ifdef __cplusplus 231 } 232 #endif 233 234 #endif /* __WINE_PROPVARUTIL_H */