68#define PROPSETHDR_BYTEORDER_MAGIC 0xfffe
69#define PROPSETHDR_OSVER_KIND_WIN16 0
70#define PROPSETHDR_OSVER_KIND_MAC 1
71#define PROPSETHDR_OSVER_KIND_WIN32 2
73#define CP_UNICODE 1200
75#define MAX_VERSION_0_PROP_NAME_LENGTH 256
77#define CFTAG_WINDOWS (-1L)
78#define CFTAG_MACINTOSH (-2L)
79#define CFTAG_FMTID (-3L)
80#define CFTAG_NODATA 0L
82#define ALIGNED_LENGTH(_Len, _Align) (((_Len)+(_Align))&~(_Align))
133 const PROPVARIANT *propvar,
UINT targetCP,
UINT srcCP);
199 IEnumSTATPROPSTG_AddRef(iface);
240 TRACE(
"%p, %lu, %p, %p.\n", iface, celt,
ret, fetched);
245 while (count < celt && penum->current < penum->
count)
268 FIXME(
"%p, %lu.\n", iface, celt);
277 TRACE(
"%p.\n", iface);
286 FIXME(
"%p, %p.\n", iface, ppenum);
306 const PROPVARIANT *prop =
v;
312 dest->propid = propid;
333 enum_obj = heap_alloc_zero(
sizeof(*enum_obj));
340 IPropertyStorage_AddRef(&
storage->IPropertyStorage_iface);
381 IPropertyStorage_AddRef(iface);
413 IPropertyStorage_Commit(iface, STGC_DEFAULT);
414 IStream_Release(
This->stm);
415 This->cs.DebugInfo->Spare[0] = 0;
451 &ansiName,
This->codePage);
480 const PROPSPEC rgpspec[],
481 PROPVARIANT rgpropvar[])
487 TRACE(
"%p, %lu, %p, %p\n", iface, cpspec, rgpspec, rgpropvar);
491 if (!rgpspec || !rgpropvar)
494 for (
i = 0;
i < cpspec;
i++)
496 PropVariantInit(&rgpropvar[
i]);
497 if (rgpspec[
i].ulKind == PRSPEC_LPWSTR)
508 switch (rgpspec[
i].propid)
512 rgpropvar[
i].iVal =
This->codePage;
516 rgpropvar[
i].lVal =
This->locale;
541 TRACE(
"%s, %p, %d, %d\n",
586 wideStr = wideStr_tmp;
603 NULL, &defCharUsed) == 0 || defCharUsed)
614 TRACE(
"returning %#lx (%s)\n",
hr,
672 TRACE(
"Setting %#lx to type %d\n", propid, propvar->vt);
681 sizeof(PROPVARIANT));
688 if (propid >
This->highestProp)
689 This->highestProp = propid;
728 TRACE(
"Adding prop name %s, propid %ld\n",
743 const PROPSPEC rgpspec[],
744 const PROPVARIANT rgpropvar[],
751 TRACE(
"%p, %lu, %p, %p.\n", iface, cpspec, rgpspec, rgpropvar);
753 if (cpspec && (!rgpspec || !rgpropvar))
761 for (
i = 0;
i < cpspec;
i++)
763 if (rgpspec[
i].ulKind == PRSPEC_LPWSTR)
776 propidNameFirst >= PID_MIN_READONLY)
792 switch (rgpspec[
i].propid)
805 This->grfFlags &= ~PROPSETFLAG_ANSI;
807 This->grfFlags |= PROPSETFLAG_ANSI;
816 This->locale = rgpropvar[
i].lVal;
824 if (rgpspec[
i].propid >= PID_MIN_READONLY)
828 rgpspec[
i].propid, &rgpropvar[
i],
GetACP());
832 if (
This->grfFlags & PROPSETFLAG_UNBUFFERED)
833 IPropertyStorage_Commit(iface, STGC_DEFAULT);
844 const PROPSPEC rgpspec[])
850 TRACE(
"%p, %ld, %p.\n", iface, cpspec, rgpspec);
852 if (cpspec && !rgpspec)
859 for (
i = 0;
i < cpspec;
i++)
861 if (rgpspec[
i].ulKind == PRSPEC_LPWSTR)
871 rgpspec[
i].propid < PID_MIN_READONLY)
877 if (
This->grfFlags & PROPSETFLAG_UNBUFFERED)
878 IPropertyStorage_Commit(iface, STGC_DEFAULT);
896 TRACE(
"%p, %ld, %p, %p.\n", iface, cpropid, rgpropid, rglpwstrName);
898 if (cpropid && (!rgpropid || !rglpwstrName))
917 rglpwstrName[
i] =
NULL;
936 TRACE(
"%p, %lu, %p, %p.\n", iface, cpropid, rgpropid, rglpwstrName);
938 if (cpropid && (!rgpropid || !rglpwstrName))
947 if (rgpropid[
i] != PID_ILLEGAL)
951 if (
This->grfFlags & PROPSETFLAG_UNBUFFERED)
952 IPropertyStorage_Commit(iface, STGC_DEFAULT);
969 TRACE(
"%p, %ld, %p.\n", iface, cpropid, rgpropid);
971 if (cpropid && !rgpropid)
978 for (
i = 0;
i < cpropid;
i++)
988 if (
This->grfFlags & PROPSETFLAG_UNBUFFERED)
989 IPropertyStorage_Commit(iface, STGC_DEFAULT);
999 DWORD grfCommitFlags)
1004 TRACE(
"%p, %#lx.\n", iface, grfCommitFlags);
1026 TRACE(
"%p\n", iface);
1049 TRACE(
"%p, %p.\n", iface, ppenum);
1084 if (
This->grfFlags & PROPSETFLAG_UNBUFFERED)
1085 IPropertyStorage_Commit(iface, STGC_DEFAULT);
1094 STATPROPSETSTG* statpsstg)
1100 TRACE(
"%p, %p\n", iface, statpsstg);
1105 hr = IStream_Stat(
This->stm, &
stat, STATFLAG_NONAME);
1108 statpsstg->fmtid =
This->fmtid;
1109 statpsstg->clsid =
This->clsid;
1110 statpsstg->grfFlags =
This->grfFlags;
1111 statpsstg->mtime =
stat.mtime;
1112 statpsstg->ctime =
stat.ctime;
1113 statpsstg->atime =
stat.atime;
1114 statpsstg->dwOSVersion =
This->originatorOS;
1127 if (
This->grfFlags & PROPSETFLAG_CASE_SENSITIVE)
1135 if (
This->grfFlags & PROPSETFLAG_CASE_SENSITIVE)
1160#ifdef WORDS_BIGENDIAN
1171 for (
i = 0;
i <
len;
i++)
1175#define PropertyStorage_ByteSwapString(s, l)
1180#define __thiscall_wrapper __stdcall
1182#define __thiscall_wrapper __cdecl
1266 TRACE(
"Read char 0x%x ('%c')\n", prop->cVal, prop->cVal);
1270 TRACE(
"Read byte 0x%x\n", prop->bVal);
1274 TRACE(
"Read bool %d\n", prop->boolVal);
1278 TRACE(
"Read short %d\n", prop->iVal);
1282 TRACE(
"Read ushort %d\n", prop->uiVal);
1287 TRACE(
"Read long %ld\n", prop->lVal);
1292 TRACE(
"Read ulong %ld\n", prop->ulVal);
1304 TRACE(
"Read double %f\n", prop->dblVal);
1317 WARN(
"Unicode string has odd number of bytes\n");
1322 prop->pszVal = allocate(allocate_data,
count);
1334 prop->pszVal[
count /
sizeof(
WCHAR) - 1] =
'\0';
1335 TRACE(
"Read string value %s\n",
1341 prop->pszVal[
count - 1] =
'\0';
1361 WARN(
"Unicode string has odd number of bytes\n");
1384 prop->bstrVal[wcount - 1] =
'\0';
1401 prop->blob.cbSize =
count;
1402 prop->blob.pBlobData = allocate(allocate_data,
count);
1403 if (prop->blob.pBlobData)
1406 TRACE(
"Read blob value of size %ld\n",
count);
1421 prop->pwszVal = allocate(allocate_data,
count *
sizeof(
WCHAR));
1427 prop->pwszVal[
count - 1] =
'\0';
1453 prop->pclipdata = allocate(allocate_data,
sizeof (CLIPDATA));
1454 prop->pclipdata->cbSize =
len;
1455 prop->pclipdata->ulClipFmt =
tag;
1456 prop->pclipdata->pClipData = allocate(allocate_data,
len -
sizeof(prop->pclipdata->ulClipFmt));
1464 if (!(prop->puuid = allocate(allocate_data,
sizeof (*prop->puuid))))
1472 FIXME(
"unsupported type %d\n", prop->vt);
1486 case VT_I1:
return sizeof(*prop->cac.pElems);
1487 case VT_UI1:
return sizeof(*prop->caub.pElems);
1488 case VT_I2:
return sizeof(*prop->cai.pElems);
1489 case VT_UI2:
return sizeof(*prop->caui.pElems);
1490 case VT_BOOL:
return sizeof(*prop->cabool.pElems);
1491 case VT_I4:
return sizeof(*prop->cal.pElems);
1492 case VT_UI4:
return sizeof(*prop->caul.pElems);
1493 case VT_R4:
return sizeof(*prop->caflt.pElems);
1494 case VT_ERROR:
return sizeof(*prop->cascode.pElems);
1495 case VT_I8:
return sizeof(*prop->cah.pElems);
1496 case VT_UI8:
return sizeof(*prop->cauh.pElems);
1497 case VT_R8:
return sizeof(*prop->cadbl.pElems);
1498 case VT_CY:
return sizeof(*prop->cacy.pElems);
1499 case VT_DATE:
return sizeof(*prop->cadate.pElems);
1500 case VT_FILETIME:
return sizeof(*prop->cafiletime.pElems);
1501 case VT_CLSID:
return sizeof(*prop->cauuid.pElems);
1502 case VT_VARIANT:
return sizeof(*prop->capropvar.pElems);
1504 FIXME(
"Unhandled type %#x.\n", prop->vt);
1535 FIXME(
"Vector with variable length elements are not supported.\n");
1548 if ((prop->capropvar.pElems = allocate(allocate_data,
elemsize *
count)))
1550 prop->capropvar.cElems =
count;
1551 elem.vt = prop->vt & ~VT_VECTOR;
1556 allocate, allocate_data)))
1568 FIXME(
"VT_ARRAY properties are not supported.\n");
1608 TRACE(
"returning %#lx\n",
hr);
1637 TRACE(
"returning %#lx\n",
hr);
1661 cbSection), &
hdr->cbSection);
1663 cProperties), &
hdr->cProperties);
1666 TRACE(
"returning %#lx\n",
hr);
1685 TRACE(
"Reading %ld entries:\n", numEntries);
1705 WARN(
"Broken name length for entry %ld.\n",
i);
1717 WARN(
"Dictionary entry name %ld is not null-terminated.\n",
i);
1721 TRACE(
"Reading entry with ID %#lx, %ld chars, name %s.\n", propid, cbEntry,
This->codePage ==
CP_UNICODE ?
1747 DWORD dictOffset = 0;
1750 This->highestProp = 0;
1751 hr = IStream_Stat(
This->stm, &
stat, STATFLAG_NONAME);
1754 if (
stat.cbSize.HighPart)
1756 WARN(
"stream too big\n");
1761 if (
stat.cbSize.LowPart == 0)
1770 WARN(
"stream too small\n");
1784 WARN(
"bad magic in prop set header\n");
1788 if (
hdr.wFormat != 0 &&
hdr.wFormat != 1)
1790 WARN(
"bad format version %d\n",
hdr.wFormat);
1796 This->originatorOS =
hdr.dwOSVer;
1798 WARN(
"File comes from a Mac, strings will probably be screwed up\n");
1802 if (fmtOffset.dwOffset >
stat.cbSize.LowPart)
1804 WARN(
"invalid offset %ld (stream length is %ld)\n", fmtOffset.dwOffset,
stat.cbSize.LowPart);
1808 seek.QuadPart = fmtOffset.dwOffset;
1825 WARN(
"section header too small, got %ld\n", sectionHdr.cbSection);
1842 TRACE(
"Reading %ld properties:\n", sectionHdr.cProperties);
1849 idOffset->dwOffset > sectionHdr.cbSection -
sizeof(
DWORD))
1854 idOffset->
propid < PID_MIN_READONLY && idOffset->
propid >
1863 dictOffset = idOffset->dwOffset;
1864 TRACE(
"Dictionary offset is %ld\n", dictOffset);
1870 PropVariantInit(&prop);
1875 TRACE(
"Read property with ID %#lx, type %d\n", idOffset->
propid, prop.vt);
1879 if (prop.vt ==
VT_I2)
1887 if (prop.vt ==
VT_I4 && prop.lVal)
1888 This->grfFlags |= PROPSETFLAG_CASE_SENSITIVE;
1901 if (!
This->codePage)
1904 if (
This->grfFlags & PROPSETFLAG_ANSI)
1911 TRACE(
"Code page is %d, locale is %ld\n",
This->codePage,
This->locale);
1968#ifdef WORDS_BIGENDIAN
1976 hr = IStream_Write(stm, leStr,
len, written);
1980 return IStream_Write(stm,
str,
len *
sizeof(
WCHAR), written);
1991 const void *
value,
void *
extra,
void *closure)
1995 DWORD propid, keyLen;
2001 c->hr = IStream_Write(
This->stm, &propid,
sizeof(propid), &
count);
2004 c->bytesWritten +=
sizeof(
DWORD);
2007 DWORD pad = 0, pad_len;
2010 c->hr = IStream_Write(
This->stm, &keyLen,
sizeof(keyLen), &
count);
2013 c->bytesWritten +=
sizeof(
DWORD);
2018 keyLen *=
sizeof(
WCHAR);
2019 c->bytesWritten += keyLen;
2022 pad_len =
sizeof(
DWORD) - keyLen %
sizeof(
DWORD);
2025 c->hr = IStream_Write(
This->stm, &pad, pad_len, &
count);
2028 c->bytesWritten += pad_len;
2034 c->hr = IStream_Write(
This->stm, &keyLen,
sizeof(keyLen), &
count);
2037 c->bytesWritten +=
sizeof(
DWORD);
2041 c->bytesWritten += keyLen;
2047#define SECTIONHEADER_OFFSET sizeof(PROPERTYSETHEADER) + sizeof(FORMATIDOFFSET)
2073 hr = IStream_Write(
This->stm, &propIdOffset,
sizeof(propIdOffset), &
count);
2082 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2085 *sectionOffset +=
sizeof(dwTemp);
2119 TRACE(
"%p, %ld, %#lx, %d, %ld.\n",
This, propNum, propid,
var->vt,
2128 hr = IStream_Write(
This->stm, &propIdOffset,
sizeof(propIdOffset), &
count);
2137 hr = IStream_Write(
This->stm, &dwType,
sizeof(dwType), &
count);
2140 *sectionOffset +=
sizeof(dwType);
2150 hr = IStream_Write(
This->stm, &
var->cVal,
sizeof(
var->cVal),
2160 hr = IStream_Write(
This->stm, &wTemp,
sizeof(wTemp), &
count);
2168 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2186 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2199 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2220 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2234 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2255 len =
var->pclipdata->cbSize;
2258 hr = IStream_Write(
This->stm, cf_hdr,
sizeof(cf_hdr), &
count);
2261 hr = IStream_Write(
This->stm,
var->pclipdata->pClipData,
2280 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2288 FIXME(
"unsupported type: %d\n",
var->vt);
2315 void *
extra,
void *closure)
2336 closure.
propNum = startingPropNum;
2365 hr = IStream_Write(
This->stm, &fmtOffset,
sizeof(fmtOffset), &
count);
2368 if (
count !=
sizeof(fmtOffset))
2396 if (
This->grfFlags & PROPSETFLAG_CASE_SENSITIVE)
2408 hr = IStream_Write(
This->stm, §ionHdr,
sizeof(sectionHdr), &
count);
2424 PropVariantInit(&
var);
2443 if (
This->grfFlags & PROPSETFLAG_CASE_SENSITIVE)
2463 hr = IStream_Write(
This->stm, &dwTemp,
sizeof(dwTemp), &
count);
2489 if (!
This->name_to_propid)
2496 if (!
This->propid_to_name)
2503 if (!
This->propid_to_prop)
2528 (*pps)->cs.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": PropertyStorage_impl.cs");
2530 (*pps)->fmtid = *rfmtid;
2531 (*pps)->grfMode = grfMode;
2536 (*pps)->cs.DebugInfo->Spare[0] = 0;
2541 else IStream_AddRef( stm );
2560 TRACE(
"PropertyStorage %p constructed\n", ps);
2580 if (ps->
grfFlags & PROPSETFLAG_CASE_SENSITIVE)
2583 if (ps->
grfFlags & PROPSETFLAG_ANSI)
2590 TRACE(
"PropertyStorage %p constructed\n", ps);
2623 IEnumSTATPROPSETSTG_AddRef(iface);
2658 STATPROPSETSTG *
ret,
ULONG *fetched)
2663 TRACE(
"%p, %lu, %p, %p.\n", iface, celt,
ret, fetched);
2668 while (count < celt && psenum->current < psenum->
count)
2679 FIXME(
"%p, %lu.\n", iface, celt);
2688 TRACE(
"%p.\n", iface);
2697 FIXME(
"%p, %p.\n", iface, ppenum);
2723 enum_obj = heap_alloc_zero(
sizeof(*enum_obj));
2731 hr = IStorage_EnumElements(stg, 0,
NULL, 0, &penum);
2746 if (!enum_obj->
stats)
2751 enum_obj->
count = 0;
2753 if (
FAILED(
hr = IEnumSTATSTG_Reset(penum)))
2761 if (
stat.pwcsName[0] == 5 &&
stat.type == STGTY_STREAM)
2781 IEnumSTATSTG_Release(penum);
2807 return IStorage_QueryInterface( &
This->base.IStorage_iface,
riid, ppvObject );
2819 return IStorage_AddRef( &
This->base.IStorage_iface );
2831 return IStorage_Release( &
This->base.IStorage_iface );
2840 const CLSID* pclsid,
2869 if (grfFlags & PROPSETFLAG_NONSIMPLE)
2871 FIXME(
"PROPSETFLAG_NONSIMPLE not supported\n");
2880 r = IStorage_CreateStream( &
This->base.IStorage_iface,
name, grfMode, 0, 0, &stm );
2886 IStream_Release( stm );
2889 TRACE(
"returning %#lx\n",
r);
2927 r = IStorage_OpenStream( &
This->base.IStorage_iface,
name, 0, grfMode, 0, &stm );
2933 IStream_Release( stm );
2936 TRACE(
"returning %#lx\n",
r);
2960 return IStorage_DestroyElement(&
This->base.IStorage_iface,
name);
2967 TRACE(
"%p, %p.\n", iface, enum_obj);
3010#define DEFINE_STDCALL_WRAPPER(num,func,args) \
3011 __ASM_STDCALL_FUNC(func, args, \
3015 "movl (%ecx), %eax\n\t" \
3016 "jmp *(4*(" #num "))(%eax)" )
3026 return fn(
this, cbSize);
3032 USHORT CodePage, PROPVARIANT* pvar,
void* pma)
3043 FIXME(
"should raise C++ exception on failure\n");
3044 PropVariantInit(pvar);
3054 FIXME(
"%p, %d, %p, %p, %ld, %d, %p.\n", pvar, CodePage, pprop, pcb,
pid, fReserved, pcIndirect);
3066 TRACE(
"%p, %s, %s, %#lx, %ld, %p.\n", unk,
debugstr_guid(
fmt),
debugstr_guid(
clsid),
flags,
reserved, prop_stg);
3074 if (
flags & PROPSETFLAG_NONSIMPLE)
3076 r = IUnknown_QueryInterface(unk, &IID_IStorage, (
void **)&stg);
3083 FIXME(
"PROPSETFLAG_NONSIMPLE not supported\n");
3084 IStorage_Release(stg);
3089 r = IUnknown_QueryInterface(unk, &IID_IStream, (
void **)&stm);
3096 IStream_Release( stm );
3100 TRACE(
"returning %#lx\n",
r);
3119 if (
flags & PROPSETFLAG_NONSIMPLE)
3121 r = IUnknown_QueryInterface(unk, &IID_IStorage, (
void **)&stg);
3128 FIXME(
"PROPSETFLAG_NONSIMPLE not supported\n");
3129 IStorage_Release(stg);
3134 r = IUnknown_QueryInterface(unk, &IID_IStream, (
void **)&stm);
3141 IStream_Release( stm );
3145 TRACE(
"returning %#lx\n",
r);
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc)
HRESULT WINAPI FmtIdToPropStgName(const FMTID *rfmtid, LPOLESTR str)
HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR str, FMTID *rfmtid)
static __inline const char * debugstr_an(const char *s, int n)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define HeapFree(x, y, z)
#define WideCharToMultiByte
#define MultiByteToWideChar
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
DWORD WINAPI GetVersion(void)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl strlen(const char *)
BOOL dictionary_find(struct dictionary *d, const void *k, void **value)
void dictionary_enumerate(struct dictionary *d, enumeratefunc e, void *closure)
void dictionary_remove(struct dictionary *d, const void *k)
void dictionary_destroy(struct dictionary *d)
void dictionary_insert(struct dictionary *d, const void *k, const void *v)
struct dictionary * dictionary_create(comparefunc c, destroyfunc d, void *extra)
UINT dictionary_num_entries(struct dictionary *d)
#define __thiscall_wrapper
static HRESULT WINAPI IPropertySetStorage_fnOpen(IPropertySetStorage *ppstg, REFFMTID rfmtid, DWORD grfMode, IPropertyStorage **ppprstg)
static void *__thiscall_wrapper Allocate_CoTaskMemAlloc(void *this, ULONG size)
#define SECTIONHEADER_OFFSET
static ULONG WINAPI IPropertyStorage_fnRelease(IPropertyStorage *iface)
static HRESULT WINAPI enum_stat_propset_stg_Clone(IEnumSTATPROPSETSTG *iface, IEnumSTATPROPSETSTG **ppenum)
static void PropertyStorage_MakeSectionHdr(DWORD cbSection, DWORD numProps, PROPERTYSECTIONHEADER *hdr)
static HRESULT PropertyStorage_WriteToStream(PropertyStorage_impl *)
static HRESULT PropertyStorage_ReadFromStream(PropertyStorage_impl *)
static BOOL PropertyStorage_PropertiesWriter(const void *key, const void *value, void *extra, void *closure)
static BOOL PropertyStorage_DictionaryWriter(const void *key, const void *value, void *extra, void *closure)
static HRESULT WINAPI IPropertyStorage_fnStat(IPropertyStorage *iface, STATPROPSETSTG *statpsstg)
static HRESULT WINAPI IPropertyStorage_fnWriteMultiple(IPropertyStorage *iface, ULONG cpspec, const PROPSPEC rgpspec[], const PROPVARIANT rgpropvar[], PROPID propidNameFirst)
static HRESULT WINAPI enum_stat_propset_stg_Skip(IEnumSTATPROPSETSTG *iface, ULONG celt)
static PropertyStorage_impl * impl_from_IPropertyStorage(IPropertyStorage *iface)
const IPropertySetStorageVtbl IPropertySetStorage_Vtbl
static PROPVARIANT * PropertyStorage_FindProperty(PropertyStorage_impl *This, DWORD propid)
static int PropertyStorage_PropCompare(const void *a, const void *b, void *extra)
#define PROPSETHDR_OSVER_KIND_MAC
static HRESULT PropertyStorage_WriteHeadersToStream(PropertyStorage_impl *This)
static ULONG WINAPI enum_stat_propset_stg_AddRef(IEnumSTATPROPSETSTG *iface)
struct tagPROPERTYIDOFFSET PROPERTYIDOFFSET
#define PropertyStorage_ByteSwapString(s, l)
static HRESULT WINAPI IPropertyStorage_fnDeletePropertyNames(IPropertyStorage *iface, ULONG cpropid, const PROPID rgpropid[])
static HRESULT PropertyStorage_ConstructFromStream(IStream *stm, REFFMTID rfmtid, DWORD grfMode, IPropertyStorage **pps)
static HRESULT WINAPI enum_stat_prop_stg_Reset(IEnumSTATPROPSTG *iface)
static HRESULT WINAPI IPropertyStorage_fnDeleteMultiple(IPropertyStorage *iface, ULONG cpspec, const PROPSPEC rgpspec[])
static HRESULT PropertyStorage_WriteDictionaryToStream(PropertyStorage_impl *This, DWORD *sectionOffset)
static const IEnumSTATPROPSETSTGVtbl enum_stat_propset_stg_vtbl
static PROPVARIANT * PropertyStorage_FindPropertyByName(PropertyStorage_impl *This, LPCWSTR name)
static HRESULT WINAPI IPropertySetStorage_fnEnum(IPropertySetStorage *iface, IEnumSTATPROPSETSTG **enum_obj)
static HRESULT WINAPI IPropertySetStorage_fnDelete(IPropertySetStorage *ppstg, REFFMTID rfmtid)
static HRESULT propertystorage_read_scalar(PROPVARIANT *prop, const struct read_buffer *buffer, size_t offset, UINT codepage, void *(WINAPI *allocate)(void *this, ULONG size), void *allocate_data)
static HRESULT WINAPI IPropertyStorage_fnRevert(IPropertyStorage *iface)
static HRESULT PropertyStorage_WritePropertyToStream(PropertyStorage_impl *This, DWORD propNum, DWORD propid, const PROPVARIANT *var, DWORD *sectionOffset)
static HRESULT PropertyStorage_WriteWStringToStream(IStream *stm, LPCWSTR str, DWORD len, DWORD *written)
static HRESULT PropertyStorage_ReadHeaderFromStream(IStream *stm, PROPERTYSETHEADER *hdr)
static HRESULT WINAPI enum_stat_propset_stg_Next(IEnumSTATPROPSETSTG *iface, ULONG celt, STATPROPSETSTG *ret, ULONG *fetched)
static HRESULT WINAPI IPropertySetStorage_fnQueryInterface(IPropertySetStorage *ppstg, REFIID riid, void **ppvObject)
static HRESULT WINAPI IPropertyStorage_fnReadMultiple(IPropertyStorage *iface, ULONG cpspec, const PROPSPEC rgpspec[], PROPVARIANT rgpropvar[])
static HRESULT PropertyStorage_PropVariantCopy(PROPVARIANT *prop, const PROPVARIANT *propvar, UINT targetCP, UINT srcCP)
static HRESULT WINAPI enum_stat_propset_stg_QueryInterface(IEnumSTATPROPSETSTG *iface, REFIID riid, void **obj)
static const IPropertyStorageVtbl IPropertyStorage_Vtbl
static size_t propertystorage_get_elemsize(const PROPVARIANT *prop)
static HRESULT WINAPI enum_stat_prop_stg_Clone(IEnumSTATPROPSTG *iface, IEnumSTATPROPSTG **ppenum)
static HRESULT PropertyStorage_ReadFmtIdOffsetFromStream(IStream *stm, FORMATIDOFFSET *fmt)
static ULONG WINAPI enum_stat_prop_stg_AddRef(IEnumSTATPROPSTG *iface)
static void PropertyStorage_PropertyDestroy(void *k, void *d, void *extra)
static HRESULT PropertyStorage_StringCopy(LPCSTR src, UINT srcCP, LPSTR *dst, UINT targetCP)
static ULONG WINAPI IPropertyStorage_fnAddRef(IPropertyStorage *iface)
static HRESULT WINAPI enum_stat_prop_stg_QueryInterface(IEnumSTATPROPSTG *iface, REFIID riid, void **obj)
struct tagPROPERTYSETHEADER PROPERTYSETHEADER
static LPWSTR PropertyStorage_FindPropertyNameById(PropertyStorage_impl *This, DWORD propid)
static HRESULT PropertyStorage_StoreNameWithId(PropertyStorage_impl *This, LPCSTR srcName, UINT cp, PROPID id)
static struct enum_stat_prop_stg * impl_from_IEnumSTATPROPSTG(IEnumSTATPROPSTG *iface)
static HRESULT WINAPI IPropertyStorage_fnSetClass(IPropertyStorage *iface, REFCLSID clsid)
static HRESULT PropertyStorage_WritePropertiesToStream(PropertyStorage_impl *This, DWORD startingPropNum, DWORD *sectionOffset)
static HRESULT PropertyStorage_ReadSectionHeaderFromStream(IStream *stm, PROPERTYSECTIONHEADER *hdr)
static HRESULT WINAPI IPropertySetStorage_fnCreate(IPropertySetStorage *ppstg, REFFMTID rfmtid, const CLSID *pclsid, DWORD grfFlags, DWORD grfMode, IPropertyStorage **ppprstg)
static HRESULT PropertyStorage_BaseConstruct(IStream *stm, REFFMTID rfmtid, DWORD grfMode, PropertyStorage_impl **pps)
static BOOL prop_enum_stat(const void *k, const void *v, void *extra, void *arg)
static void PropertyStorage_MakeHeader(PropertyStorage_impl *This, PROPERTYSETHEADER *hdr)
static HRESULT create_enum_stat_prop_stg(PropertyStorage_impl *storage, IEnumSTATPROPSTG **ret)
static void PropertyStorage_MakePropertyIdOffset(DWORD propid, DWORD dwOffset, PROPERTYIDOFFSET *propIdOffset)
static HRESULT PropertyStorage_StorePropWithId(PropertyStorage_impl *This, PROPID propid, const PROPVARIANT *propvar, UINT cp)
static StorageImpl * impl_from_IPropertySetStorage(IPropertySetStorage *iface)
#define ALIGNED_LENGTH(_Len, _Align)
static HRESULT WINAPI IPropertyStorage_fnQueryInterface(IPropertyStorage *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI enum_stat_prop_stg_Next(IEnumSTATPROPSTG *iface, ULONG celt, STATPROPSTG *ret, ULONG *fetched)
static void PropertyStorage_PropNameDestroy(void *k, void *d, void *extra)
static HRESULT buffer_read_byte(const struct read_buffer *buffer, size_t offset, BYTE *data)
static HRESULT WINAPI IPropertyStorage_fnWritePropertyNames(IPropertyStorage *iface, ULONG cpropid, const PROPID rgpropid[], const LPOLESTR rglpwstrName[])
static const IEnumSTATPROPSTGVtbl enum_stat_prop_stg_vtbl
static HRESULT WINAPI IPropertyStorage_fnCommit(IPropertyStorage *iface, DWORD grfCommitFlags)
struct tagFORMATIDOFFSET FORMATIDOFFSET
static ULONG WINAPI IPropertySetStorage_fnAddRef(IPropertySetStorage *ppstg)
static int PropertyStorage_PropNameCompare(const void *a, const void *b, void *extra)
BOOLEAN WINAPI StgConvertPropertyToVariant(const SERIALIZEDPROPERTYVALUE *prop, USHORT CodePage, PROPVARIANT *pvar, void *pma)
static HRESULT PropertyStorage_CreateDictionaries(PropertyStorage_impl *)
static void PropertyStorage_DestroyDictionaries(PropertyStorage_impl *)
static HRESULT PropertyStorage_ReadProperty(PROPVARIANT *prop, const struct read_buffer *buffer, size_t offset, UINT codepage, void *(__thiscall_wrapper WINAPI *allocate)(void *this, ULONG size), void *allocate_data)
static HRESULT WINAPI IPropertyStorage_fnEnum(IPropertyStorage *iface, IEnumSTATPROPSTG **ppenum)
static HRESULT buffer_read_len(const struct read_buffer *buffer, size_t offset, void *dest, size_t len)
struct tagPROPERTYSECTIONHEADER PROPERTYSECTIONHEADER
#define PROPSETHDR_OSVER_KIND_WIN32
static HRESULT PropertyStorage_ReadDictionary(PropertyStorage_impl *This, const struct read_buffer *buffer, size_t offset)
static HRESULT buffer_read_word(const struct read_buffer *buffer, size_t offset, WORD *data)
static void PropertyStorage_MakeFmtIdOffset(PropertyStorage_impl *This, FORMATIDOFFSET *fmtOffset)
static HRESULT WINAPI enum_stat_prop_stg_Skip(IEnumSTATPROPSTG *iface, ULONG celt)
static ULONG WINAPI enum_stat_propset_stg_Release(IEnumSTATPROPSETSTG *iface)
static ULONG WINAPI IPropertySetStorage_fnRelease(IPropertySetStorage *ppstg)
#define PROPSETHDR_BYTEORDER_MAGIC
static struct enum_stat_propset_stg * impl_from_IEnumSTATPROPSETSTG(IEnumSTATPROPSETSTG *iface)
static HRESULT buffer_test_offset(const struct read_buffer *buffer, size_t offset, size_t len)
static HRESULT create_enum_stat_propset_stg(StorageImpl *storage, IEnumSTATPROPSETSTG **ret)
SERIALIZEDPROPERTYVALUE *WINAPI StgConvertVariantToProperty(const PROPVARIANT *pvar, USHORT CodePage, SERIALIZEDPROPERTYVALUE *pprop, ULONG *pcb, PROPID pid, BOOLEAN fReserved, ULONG *pcIndirect)
static HRESULT WINAPI IPropertyStorage_fnReadPropertyNames(IPropertyStorage *iface, ULONG cpropid, const PROPID rgpropid[], LPOLESTR rglpwstrName[])
#define MAX_VERSION_0_PROP_NAME_LENGTH
static HRESULT buffer_read_uint64(const struct read_buffer *buffer, size_t offset, ULARGE_INTEGER *data)
static HRESULT PropertyStorage_ConstructEmpty(IStream *stm, REFFMTID rfmtid, DWORD grfFlags, DWORD grfMode, IPropertyStorage **pps)
static HRESULT WINAPI enum_stat_propset_stg_Reset(IEnumSTATPROPSETSTG *iface)
static HRESULT WINAPI IPropertyStorage_fnSetTimes(IPropertyStorage *iface, const FILETIME *pctime, const FILETIME *patime, const FILETIME *pmtime)
HRESULT WINAPI StgOpenPropStg(IUnknown *unk, REFFMTID fmt, DWORD flags, DWORD reserved, IPropertyStorage **prop_stg)
static HRESULT buffer_read_dword(const struct read_buffer *buffer, size_t offset, DWORD *data)
static BOOL prop_enum_stat_count(const void *k, const void *v, void *extra, void *arg)
static void *__cdecl Allocate_PMemoryAllocator(void *this, ULONG cbSize)
static ULONG WINAPI enum_stat_prop_stg_Release(IEnumSTATPROPSTG *iface)
HRESULT WINAPI StgCreatePropStg(IUnknown *unk, REFFMTID fmt, const CLSID *clsid, DWORD flags, DWORD reserved, IPropertyStorage **prop_stg)
void StorageUtl_ReadGUID(const BYTE *buffer, ULONG offset, GUID *value)
void StorageUtl_WriteDWord(void *buffer, ULONG offset, DWORD value)
void StorageUtl_ReadWord(const BYTE *buffer, ULONG offset, WORD *value)
void StorageUtl_ReadULargeInteger(const BYTE *buffer, ULONG offset, ULARGE_INTEGER *value)
void StorageUtl_WriteGUID(void *buffer, ULONG offset, const GUID *value)
void StorageUtl_WriteWord(void *buffer, ULONG offset, WORD value)
void StorageUtl_WriteULargeInteger(void *buffer, ULONG offset, const ULARGE_INTEGER *value)
void StorageUtl_ReadDWord(const BYTE *buffer, ULONG offset, DWORD *value)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLenum GLsizei GLuint GLint * bytesWritten
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
int WINAPI lstrlenA(LPCSTR lpString)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
#define memcpy(s1, s2, n)
static const DWORD padding[]
static const CLSID IPropertyStorage UINT *static const PROPSPEC PROPVARIANT *static UINT const PROPSPEC PROPVARIANT PROPID
#define LOCALE_SYSTEM_DEFAULT
_In_ DWORD _In_ DWORD dwOffset
#define STGM_SHARE_EXCLUSIVE
UINT WINAPI SysStringByteLen(BSTR str)
UINT WINAPI SysStringLen(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define offsetof(TYPE, MEMBER)
int seek(void *fd, ulong off, int mode)
PropertyStorage_impl * storage
IEnumSTATPROPSTG IEnumSTATPROPSTG_iface
IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG_iface
struct dictionary * propid_to_name
IPropertyStorage IPropertyStorage_iface
struct dictionary * name_to_propid
struct dictionary * propid_to_prop
#define CONTAINING_RECORD(address, type, field)
static GLenum _GLUfuncptr fn
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
#define STG_E_INVALIDPOINTER
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define STG_E_INVALIDHEADER
#define STG_E_ACCESSDENIED
#define STG_E_INVALIDPARAMETER
#define STG_E_INVALIDFLAG
#define ERROR_NO_UNICODE_TRANSLATION
#define STG_E_INSUFFICIENTMEMORY
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO