xref: /reactos/sdk/include/psdk/propvarutil.h (revision f3c75078)
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 PSSTDAPI
26 #ifdef _PROPSYS_
27 #define PSSTDAPI          STDAPI
28 #define PSSTDAPI_(type)   STDAPI_(type)
29 #else
30 #define PSSTDAPI          DECLSPEC_IMPORT STDAPI
31 #define PSSTDAPI_(type)   DECLSPEC_IMPORT STDAPI_(type)
32 #endif
33 #endif
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 enum tagPROPVAR_CHANGE_FLAGS
40 {
41     PVCHF_DEFAULT           = 0x00000000,
42     PVCHF_NOVALUEPROP       = 0x00000001,
43     PVCHF_ALPHABOOL         = 0x00000002,
44     PVCHF_NOUSEROVERRIDE    = 0x00000004,
45     PVCHF_LOCALBOOL         = 0x00000008,
46     PVCHF_NOHEXSTRING       = 0x00000010,
47 };
48 
49 typedef int PROPVAR_CHANGE_FLAGS;
50 
51 enum tagPROPVAR_COMPARE_UNIT
52 {
53     PVCU_DEFAULT           = 0x00000000,
54     PVCU_SECOND            = 0x00000001,
55     PVCU_MINUTE            = 0x00000002,
56     PVCU_HOUR              = 0x00000003,
57     PVCU_DAY               = 0x00000004,
58     PVCU_MONTH             = 0x00000005,
59     PVCU_YEAR              = 0x00000006,
60 };
61 
62 typedef int PROPVAR_COMPARE_UNIT;
63 
64 enum tagPROPVAR_COMPARE_FLAGS
65 {
66     PVCF_DEFAULT           = 0x00000000,
67     PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,
68     PVCF_USESTRCMP         = 0x00000002,
69     PVCF_USESTRCMPC        = 0x00000004,
70     PVCF_USESTRCMPI        = 0x00000008,
71     PVCF_USESTRCMPIC       = 0x00000010,
72 };
73 
74 typedef int PROPVAR_COMPARE_FLAGS;
75 
76 PSSTDAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
77                                      PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
78 PSSTDAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
79 PSSTDAPI InitVariantFromFileTime(const FILETIME *ft, VARIANT *var);
80 PSSTDAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
81 PSSTDAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
82 PSSTDAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar);
83 PSSTDAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
84 PSSTDAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
85 PSSTDAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
86 PSSTDAPI_(INT) PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
87                                 PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
88 PSSTDAPI InitPropVariantFromFileTime(const FILETIME *pftIn, PROPVARIANT *ppropvar);
89 PSSTDAPI InitPropVariantFromStringVector(PCWSTR *strs, ULONG count, PROPVARIANT *ppropvar);
90 
91 PSSTDAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret);
92 PSSTDAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
93 PSSTDAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
94 PSSTDAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
95 PSSTDAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
96 PSSTDAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
97 PSSTDAPI_(ULONG) PropVariantToUInt32WithDefault(REFPROPVARIANT propvarIn, ULONG uLDefault);
98 PSSTDAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
99 PSSTDAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, BOOL *ret);
100 PSSTDAPI PropVariantToBSTR(REFPROPVARIANT propvar, BSTR *bstr);
101 PSSTDAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb);
102 PSSTDAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch);
103 PSSTDAPI_(PCWSTR) PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);
104 PSSTDAPI_(PCWSTR) VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault);
105 PSSTDAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch);
106 
107 PSSTDAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);
108 
109 PSSTDAPI PropVariantToVariant(const PROPVARIANT *propvar, VARIANT *var);
110 PSSTDAPI VariantToPropVariant(const VARIANT* var, PROPVARIANT* propvar);
111 
112 #ifdef __cplusplus
113 
114 HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar);
115 HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar);
116 HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar);
117 HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar);
118 HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar);
119 HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);
120 HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar);
121 HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar);
122 HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);
123 HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar);
124 BOOL IsPropVariantVector(REFPROPVARIANT propvar);
125 BOOL IsPropVariantString(REFPROPVARIANT propvar);
126 
127 #ifndef NO_PROPVAR_INLINES
128 
129 inline HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar)
130 {
131     ppropvar->vt = VT_BOOL;
132     ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;
133     return S_OK;
134 }
135 
136 inline HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar)
137 {
138     ppropvar->vt = VT_I2;
139     ppropvar->iVal = nVal;
140     return S_OK;
141 }
142 
143 inline HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar)
144 {
145     ppropvar->vt = VT_UI2;
146     ppropvar->uiVal = uiVal;
147     return S_OK;
148 }
149 
150 inline HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar)
151 {
152     ppropvar->vt = VT_I4;
153     ppropvar->lVal = lVal;
154     return S_OK;
155 }
156 
157 inline HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar)
158 {
159     ppropvar->vt = VT_UI4;
160     ppropvar->ulVal = ulVal;
161     return S_OK;
162 }
163 
164 inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)
165 {
166     ppropvar->vt = VT_I8;
167     ppropvar->hVal.QuadPart = llVal;
168     return S_OK;
169 }
170 
171 inline HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar)
172 {
173     ppropvar->vt = VT_UI8;
174     ppropvar->uhVal.QuadPart = ullVal;
175     return S_OK;
176 }
177 
178 inline HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar)
179 {
180     ppropvar->vt = VT_R8;
181     ppropvar->dblVal = dblVal;
182     return S_OK;
183 }
184 
185 inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)
186 {
187     HRESULT hres;
188 
189     hres = SHStrDupW(psz, &ppropvar->pwszVal);
190     if(SUCCEEDED(hres))
191         ppropvar->vt = VT_LPWSTR;
192     else
193         PropVariantInit(ppropvar);
194 
195     return hres;
196 }
197 
198 inline HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar)
199 {
200     return InitPropVariantFromBuffer(&guid, sizeof(GUID), ppropvar);
201 }
202 
203 inline BOOL IsPropVariantVector(REFPROPVARIANT propvar)
204 {
205     return (propvar.vt & (VT_ARRAY | VT_VECTOR));
206 }
207 
208 inline BOOL IsPropVariantString(REFPROPVARIANT propvar)
209 {
210     return (PropVariantToStringWithDefault(propvar, NULL) != NULL);
211 }
212 
213 #endif /* NO_PROPVAR_INLINES */
214 #endif /* __cplusplus */
215 
216 PSSTDAPI StgSerializePropVariant(const PROPVARIANT *ppropvar, SERIALIZEDPROPERTYVALUE **ppprop, ULONG *pcb);
217 PSSTDAPI StgDeserializePropVariant(const SERIALIZEDPROPERTYVALUE *pprop, ULONG cbmax, PROPVARIANT *ppropvar);
218 
219 #ifdef __cplusplus
220 }
221 #endif
222 
223 #endif /* __WINE_PROPVARUTIL_H */
224