propvarutil.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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. #ifndef __WINE_PROPVARUTIL_H
  19. #define __WINE_PROPVARUTIL_H
  20. #include <shtypes.h>
  21. #include <shlwapi.h>
  22. #ifndef WINE_NTSTATUS_DECLARED
  23. #define WINE_NTSTATUS_DECLARED
  24. typedef LONG NTSTATUS;
  25. #endif
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. enum tagPROPVAR_CHANGE_FLAGS
  30. {
  31. PVCHF_DEFAULT = 0x00000000,
  32. PVCHF_NOVALUEPROP = 0x00000001,
  33. PVCHF_ALPHABOOL = 0x00000002,
  34. PVCHF_NOUSEROVERRIDE = 0x00000004,
  35. PVCHF_LOCALBOOL = 0x00000008,
  36. PVCHF_NOHEXSTRING = 0x00000010,
  37. };
  38. typedef int PROPVAR_CHANGE_FLAGS;
  39. enum tagPROPVAR_COMPARE_UNIT
  40. {
  41. PVCU_DEFAULT = 0x00000000,
  42. PVCU_SECOND = 0x00000001,
  43. PVCU_MINUTE = 0x00000002,
  44. PVCU_HOUR = 0x00000003,
  45. PVCU_DAY = 0x00000004,
  46. PVCU_MONTH = 0x00000005,
  47. PVCU_YEAR = 0x00000006,
  48. };
  49. typedef int PROPVAR_COMPARE_UNIT;
  50. enum tagPROPVAR_COMPARE_FLAGS
  51. {
  52. PVCF_DEFAULT = 0x00000000,
  53. PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,
  54. PVCF_USESTRCMP = 0x00000002,
  55. PVCF_USESTRCMPC = 0x00000004,
  56. PVCF_USESTRCMPI = 0x00000008,
  57. PVCF_USESTRCMPIC = 0x00000010,
  58. };
  59. typedef int PROPVAR_COMPARE_FLAGS;
  60. HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
  61. PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
  62. HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
  63. HRESULT WINAPI InitVariantFromFileTime(const FILETIME *ft, VARIANT *var);
  64. HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
  65. HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
  66. HRESULT WINAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar);
  67. HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
  68. HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
  69. HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
  70. INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
  71. PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
  72. HRESULT WINAPI InitPropVariantFromFileTime(const FILETIME *pftIn, PROPVARIANT *ppropvar);
  73. HRESULT WINAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret);
  74. HRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
  75. HRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
  76. HRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
  77. HRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
  78. HRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
  79. HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
  80. HRESULT WINAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, WINBOOL *ret);
  81. HRESULT WINAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb);
  82. HRESULT WINAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch);
  83. PCWSTR WINAPI PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);
  84. PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault);
  85. HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);
  86. #ifdef __cplusplus
  87. HRESULT InitPropVariantFromBoolean(WINBOOL fVal, PROPVARIANT *ppropvar);
  88. HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar);
  89. HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar);
  90. HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar);
  91. HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar);
  92. HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);
  93. HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar);
  94. HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar);
  95. HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);
  96. HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar);
  97. WINBOOL IsPropVariantVector(REFPROPVARIANT propvar);
  98. WINBOOL IsPropVariantString(REFPROPVARIANT propvar);
  99. #ifndef NO_PROPVAR_INLINES
  100. inline HRESULT InitPropVariantFromBoolean(WINBOOL fVal, PROPVARIANT *ppropvar)
  101. {
  102. ppropvar->vt = VT_BOOL;
  103. ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;
  104. return S_OK;
  105. }
  106. inline HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar)
  107. {
  108. ppropvar->vt = VT_I2;
  109. ppropvar->iVal = nVal;
  110. return S_OK;
  111. }
  112. inline HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar)
  113. {
  114. ppropvar->vt = VT_UI2;
  115. ppropvar->uiVal = uiVal;
  116. return S_OK;
  117. }
  118. inline HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar)
  119. {
  120. ppropvar->vt = VT_I4;
  121. ppropvar->lVal = lVal;
  122. return S_OK;
  123. }
  124. inline HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar)
  125. {
  126. ppropvar->vt = VT_UI4;
  127. ppropvar->ulVal = ulVal;
  128. return S_OK;
  129. }
  130. inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)
  131. {
  132. ppropvar->vt = VT_I8;
  133. ppropvar->hVal.QuadPart = llVal;
  134. return S_OK;
  135. }
  136. inline HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar)
  137. {
  138. ppropvar->vt = VT_UI8;
  139. ppropvar->uhVal.QuadPart = ullVal;
  140. return S_OK;
  141. }
  142. inline HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar)
  143. {
  144. ppropvar->vt = VT_R8;
  145. ppropvar->dblVal = dblVal;
  146. return S_OK;
  147. }
  148. inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)
  149. {
  150. HRESULT hres;
  151. hres = SHStrDupW(psz, &ppropvar->pwszVal);
  152. if(SUCCEEDED(hres))
  153. ppropvar->vt = VT_LPWSTR;
  154. else
  155. PropVariantInit(ppropvar);
  156. return hres;
  157. }
  158. inline HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar)
  159. {
  160. #ifdef __cplusplus
  161. return InitPropVariantFromBuffer(&guid, sizeof(GUID), ppropvar);
  162. #else
  163. return InitPropVariantFromBuffer(guid, sizeof(GUID), ppropvar);
  164. #endif
  165. }
  166. inline WINBOOL IsPropVariantVector(REFPROPVARIANT propvar)
  167. {
  168. return (propvar.vt & (VT_ARRAY | VT_VECTOR));
  169. }
  170. inline WINBOOL IsPropVariantString(REFPROPVARIANT propvar)
  171. {
  172. return (PropVariantToStringWithDefault(propvar, NULL) != NULL);
  173. }
  174. #endif /* NO_PROPVAR_INLINES */
  175. #endif /* __cplusplus */
  176. #ifdef __cplusplus
  177. }
  178. #endif
  179. #endif /* __WINE_PROPVARUTIL_H */