zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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 */