ReactOS 0.4.16-dev-974-g5022a45
metadataquery.c File Reference
#include <stdarg.h>
#include <wchar.h>
#include "windef.h"
#include "winbase.h"
#include "objbase.h"
#include "propvarutil.h"
#include "wincodecs_private.h"
#include "wine/debug.h"
Include dependency graph for metadataquery.c:

Go to the source code of this file.

Classes

struct  QueryReader
 
struct  string_t
 
struct  string_enumerator
 
struct  QueryWriter
 

Macros

#define COBJMACROS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (wincodecs)
 
static const WCHARmap_shortname_to_schema (const GUID *format, const WCHAR *name)
 
static QueryReaderimpl_from_IWICMetadataQueryReader (IWICMetadataQueryReader *iface)
 
static HRESULT WINAPI mqr_QueryInterface (IWICMetadataQueryReader *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI mqr_AddRef (IWICMetadataQueryReader *iface)
 
static ULONG WINAPI mqr_Release (IWICMetadataQueryReader *iface)
 
static HRESULT WINAPI mqr_GetContainerFormat (IWICMetadataQueryReader *iface, GUID *format)
 
static HRESULT WINAPI mqr_GetLocation (IWICMetadataQueryReader *iface, UINT len, WCHAR *location, UINT *ret_len)
 
static VARTYPE map_type (struct string_t *str)
 
static HRESULT get_token (struct string_t *elem, PROPVARIANT *id, PROPVARIANT *schema, int *idx)
 
static HRESULT find_reader_from_block (IWICMetadataBlockReader *block_reader, UINT index, GUID *guid, IWICMetadataReader **reader)
 
static HRESULT get_next_reader (IWICMetadataReader *reader, UINT index, GUID *guid, IWICMetadataReader **new_reader)
 
static HRESULT WINAPI mqr_GetMetadataByName (IWICMetadataQueryReader *iface, LPCWSTR query, PROPVARIANT *value)
 
static struct string_enumeratorimpl_from_IEnumString (IEnumString *iface)
 
static HRESULT WINAPI string_enumerator_QueryInterface (IEnumString *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI string_enumerator_AddRef (IEnumString *iface)
 
static ULONG WINAPI string_enumerator_Release (IEnumString *iface)
 
static HRESULT WINAPI string_enumerator_Next (IEnumString *iface, ULONG count, LPOLESTR *strings, ULONG *ret)
 
static HRESULT WINAPI string_enumerator_Reset (IEnumString *iface)
 
static HRESULT WINAPI string_enumerator_Skip (IEnumString *iface, ULONG count)
 
static HRESULT WINAPI string_enumerator_Clone (IEnumString *iface, IEnumString **out)
 
static HRESULT string_enumerator_create (IEnumString **enum_string)
 
static HRESULT WINAPI mqr_GetEnumerator (IWICMetadataQueryReader *iface, IEnumString **enum_string)
 
HRESULT MetadataQueryReader_CreateInstance (IWICMetadataBlockReader *mbr, const WCHAR *root, IWICMetadataQueryReader **out)
 
static QueryWriterimpl_from_IWICMetadataQueryWriter (IWICMetadataQueryWriter *iface)
 
static HRESULT WINAPI mqw_QueryInterface (IWICMetadataQueryWriter *iface, REFIID riid, void **object)
 
static ULONG WINAPI mqw_AddRef (IWICMetadataQueryWriter *iface)
 
static ULONG WINAPI mqw_Release (IWICMetadataQueryWriter *iface)
 
static HRESULT WINAPI mqw_GetContainerFormat (IWICMetadataQueryWriter *iface, GUID *container_format)
 
static HRESULT WINAPI mqw_GetEnumerator (IWICMetadataQueryWriter *iface, IEnumString **enum_string)
 
static HRESULT WINAPI mqw_GetLocation (IWICMetadataQueryWriter *iface, UINT max_length, WCHAR *namespace, UINT *actual_length)
 
static HRESULT WINAPI mqw_GetMetadataByName (IWICMetadataQueryWriter *iface, LPCWSTR name, PROPVARIANT *value)
 
static HRESULT WINAPI mqw_SetMetadataByName (IWICMetadataQueryWriter *iface, LPCWSTR name, const PROPVARIANT *value)
 
static HRESULT WINAPI mqw_RemoveMetadataByName (IWICMetadataQueryWriter *iface, LPCWSTR name)
 
HRESULT MetadataQueryWriter_CreateInstance (IWICMetadataBlockWriter *mbw, const WCHAR *root, IWICMetadataQueryWriter **out)
 
HRESULT WINAPI WICMapGuidToShortName (REFGUID guid, UINT len, WCHAR *name, UINT *ret_len)
 
HRESULT WINAPI WICMapShortNameToGuid (PCWSTR name, GUID *guid)
 
HRESULT WINAPI WICMapSchemaToName (REFGUID format, LPWSTR schema, UINT len, WCHAR *name, UINT *ret_len)
 

Variables

struct {
   int   len
 
   WCHAR   str [10]
 
   VARTYPE   vt
 
str2vt []
 
static const IEnumStringVtbl string_enumerator_vtbl
 
static IWICMetadataQueryReaderVtbl mqr_vtbl
 
static const IWICMetadataQueryWriterVtbl mqw_vtbl
 
struct {
   const GUID *   guid
 
   const WCHAR *   name
 
guid2name []
 
struct {
   const WCHAR *   name
 
   const WCHAR *   schema
 
name2schema []
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 23 of file metadataquery.c.

Function Documentation

◆ find_reader_from_block()

static HRESULT find_reader_from_block ( IWICMetadataBlockReader block_reader,
UINT  index,
GUID guid,
IWICMetadataReader **  reader 
)
static

Definition at line 372 of file metadataquery.c.

374{
375 HRESULT hr;
376 GUID format;
377 IWICMetadataReader *new_reader;
378 UINT count, i, matched_index;
379
380 *reader = NULL;
381
382 hr = IWICMetadataBlockReader_GetCount(block_reader, &count);
383 if (hr != S_OK) return hr;
384
385 matched_index = 0;
386
387 for (i = 0; i < count; i++)
388 {
389 hr = IWICMetadataBlockReader_GetReaderByIndex(block_reader, i, &new_reader);
390 if (hr != S_OK) return hr;
391
392 hr = IWICMetadataReader_GetMetadataFormat(new_reader, &format);
393 if (hr == S_OK)
394 {
395 if (IsEqualGUID(&format, guid))
396 {
397 if (matched_index == index)
398 {
399 *reader = new_reader;
400 return S_OK;
401 }
402
403 matched_index++;
404 }
405 }
406
407 IWICMetadataReader_Release(new_reader);
408 if (hr != S_OK) return hr;
409 }
410
412}
#define NULL
Definition: types.h:112
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
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
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
const GUID * guid
unsigned int UINT
Definition: ndis.h:50
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
HRESULT hr
Definition: shlfolder.c:183
Definition: format.c:58
Definition: reader.h:84
#define WINCODEC_ERR_PROPERTYNOTFOUND
Definition: winerror.h:3287

Referenced by mqr_GetMetadataByName().

◆ get_next_reader()

static HRESULT get_next_reader ( IWICMetadataReader reader,
UINT  index,
GUID guid,
IWICMetadataReader **  new_reader 
)
static

Definition at line 414 of file metadataquery.c.

416{
417 HRESULT hr;
418 PROPVARIANT schema, id, value;
419
420 *new_reader = NULL;
421
422 PropVariantInit(&schema);
423 PropVariantInit(&id);
424 PropVariantInit(&value);
425
426 if (index)
427 {
428 schema.vt = VT_UI2;
429 schema.uiVal = index;
430 }
431
432 id.vt = VT_CLSID;
433 id.puuid = guid;
434 hr = IWICMetadataReader_GetValue(reader, &schema, &id, &value);
435 if (hr != S_OK) return hr;
436
437 if (value.vt == VT_UNKNOWN)
438 hr = IUnknown_QueryInterface(value.punkVal, &IID_IWICMetadataReader, (void **)new_reader);
439 else
441
443 return hr;
444}
#define index(s, c)
Definition: various.h:29
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_UI2
Definition: compat.h:2312
@ VT_CLSID
Definition: compat.h:2337
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
Definition: ole2.c:2968
GLuint id
Definition: glext.h:5910
const WCHAR * schema
Definition: pdh_main.c:96
#define WINCODEC_ERR_UNEXPECTEDMETADATATYPE
Definition: winerror.h:3316

Referenced by mqr_GetMetadataByName().

◆ get_token()

static HRESULT get_token ( struct string_t elem,
PROPVARIANT *  id,
PROPVARIANT *  schema,
int idx 
)
static

Definition at line 178 of file metadataquery.c.

179{
180 const WCHAR *start, *end, *p;
181 WCHAR *bstr;
182 struct string_t next_elem;
183 HRESULT hr;
184
185 TRACE("%s, len %d\n", wine_dbgstr_wn(elem->str, elem->len), elem->len);
186
187 PropVariantInit(id);
188 PropVariantInit(schema);
189
190 if (!elem->len) return S_OK;
191
192 start = elem->str;
193
194 if (*start == '[')
195 {
196 WCHAR *idx_end;
197
198 if (start[1] < '0' || start[1] > '9') return DISP_E_TYPEMISMATCH;
199
200 *idx = wcstol(start + 1, &idx_end, 10);
201 if (idx_end > elem->str + elem->len) return WINCODEC_ERR_INVALIDQUERYREQUEST;
202 if (*idx_end != ']') return WINCODEC_ERR_INVALIDQUERYREQUEST;
203 if (*idx < 0) return WINCODEC_ERR_INVALIDQUERYREQUEST;
204 end = idx_end + 1;
205
206 next_elem.str = end;
207 next_elem.len = elem->len - (end - start);
208 hr = get_token(&next_elem, id, schema, idx);
209 if (hr != S_OK)
210 {
211 TRACE("get_token error %#lx\n", hr);
212 return hr;
213 }
214 elem->len = (end - start) + next_elem.len;
215
216 TRACE("indexed %s [%d]\n", wine_dbgstr_wn(elem->str, elem->len), *idx);
217 return S_OK;
218 }
219 else if (*start == '{')
220 {
221 VARTYPE vt;
222 PROPVARIANT next_token;
223
224 end = wmemchr(start + 1, '=', elem->len - 1);
226 if (end > elem->str + elem->len) return WINCODEC_ERR_INVALIDQUERYREQUEST;
227
228 next_elem.str = start + 1;
229 next_elem.len = end - start - 1;
230 vt = map_type(&next_elem);
231 TRACE("type %s => %d\n", wine_dbgstr_wn(next_elem.str, next_elem.len), vt);
233
234 next_token.vt = VT_BSTR;
235 next_token.bstrVal = SysAllocStringLen(NULL, elem->len - (end - start) + 1);
236 if (!next_token.bstrVal) return E_OUTOFMEMORY;
237
238 bstr = next_token.bstrVal;
239
240 end++;
241 while (*end && *end != '}' && end - start < elem->len)
242 {
243 if (*end == '\\') end++;
244 *bstr++ = *end++;
245 }
246 if (*end != '}')
247 {
250 }
251 *bstr = 0;
252 TRACE("schema/id %s\n", wine_dbgstr_w(next_token.bstrVal));
253
254 if (vt == VT_CLSID)
255 {
256 id->vt = VT_CLSID;
257 id->puuid = CoTaskMemAlloc(sizeof(GUID));
258 if (!id->puuid)
259 {
261 return E_OUTOFMEMORY;
262 }
263
264 hr = UuidFromStringW(next_token.bstrVal, id->puuid);
265 }
266 else
269 if (hr != S_OK)
270 {
273 return hr;
274 }
275
276 end++;
277 if (*end == ':')
278 {
279 PROPVARIANT next_id, next_schema;
280 int next_idx = 0;
281
282 next_elem.str = end + 1;
283 next_elem.len = elem->len - (end - start + 1);
284 hr = get_token(&next_elem, &next_id, &next_schema, &next_idx);
285 if (hr != S_OK)
286 {
287 TRACE("get_token error %#lx\n", hr);
288 return hr;
289 }
290 elem->len = (end - start + 1) + next_elem.len;
291
292 TRACE("id %s [%d]\n", wine_dbgstr_wn(elem->str, elem->len), *idx);
293
294 if (next_schema.vt != VT_EMPTY)
295 {
296 PropVariantClear(&next_id);
297 PropVariantClear(&next_schema);
299 }
300
301 *schema = *id;
302 *id = next_id;
303
304 return S_OK;
305 }
306
307 elem->len = end - start;
308 return S_OK;
309 }
310
311 end = wmemchr(start, '/', elem->len);
312 if (!end) end = start + elem->len;
313
314 p = wmemchr(start, ':', end - start);
315 if (p)
316 {
317 next_elem.str = p + 1;
318 next_elem.len = end - p - 1;
319
320 elem->len = p - start;
321 }
322 else
323 elem->len = end - start;
324
325 id->vt = VT_BSTR;
326 id->bstrVal = SysAllocStringLen(NULL, elem->len + 1);
327 if (!id->bstrVal) return E_OUTOFMEMORY;
328
329 bstr = id->bstrVal;
330 p = elem->str;
331 while (p - elem->str < elem->len)
332 {
333 if (*p == '\\') p++;
334 *bstr++ = *p++;
335 }
336 *bstr = 0;
337 TRACE("%s [%d]\n", wine_dbgstr_variant((VARIANT *)id), *idx);
338
339 if (*p == ':')
340 {
341 PROPVARIANT next_id, next_schema;
342 int next_idx = 0;
343
344 hr = get_token(&next_elem, &next_id, &next_schema, &next_idx);
345 if (hr != S_OK)
346 {
347 TRACE("get_token error %#lx\n", hr);
350 return hr;
351 }
352 elem->len += next_elem.len + 1;
353
354 TRACE("id %s [%d]\n", wine_dbgstr_wn(elem->str, elem->len), *idx);
355
356 if (next_schema.vt != VT_EMPTY)
357 {
358 PropVariantClear(&next_id);
359 PropVariantClear(&next_schema);
363 }
364
365 *schema = *id;
366 *id = next_id;
367 }
368
369 return S_OK;
370}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
int next_token(char **, FILE *)
unsigned int idx
Definition: utils.c:41
unsigned short VARTYPE
Definition: compat.h:2254
@ VT_BSTR
Definition: compat.h:2303
@ VT_ILLEGAL
Definition: compat.h:2344
@ VT_EMPTY
Definition: compat.h:2295
HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc, PROPVAR_CHANGE_FLAGS flags, VARTYPE vt)
Definition: propvar.c:537
GLuint start
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_CONST_RETURN wchar_t *__cdecl wmemchr(_In_reads_(_N) const wchar_t *_S, _In_ wchar_t _C, _In_ size_t _N)
Definition: wchar.h:2606
#define wine_dbgstr_w
Definition: kernel32.h:34
static VARTYPE map_type(struct string_t *str)
static HRESULT get_token(struct string_t *elem, PROPVARIANT *id, PROPVARIANT *schema, int *idx)
VARTYPE vt
static size_t elem
Definition: string.c:69
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
#define wine_dbgstr_wn
Definition: testlist.c:2
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
Definition: rpcrt4_main.c:614
#define TRACE(s)
Definition: solgame.cpp:4
#define WINCODEC_ERR_WRONGSTATE
Definition: winerror.h:3281
#define WINCODEC_ERR_INVALIDQUERYREQUEST
Definition: winerror.h:3315
#define DISP_E_TYPEMISMATCH
Definition: winerror.h:2514
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by get_token(), and mqr_GetMetadataByName().

◆ impl_from_IEnumString()

static struct string_enumerator * impl_from_IEnumString ( IEnumString iface)
static

Definition at line 603 of file metadataquery.c.

604{
605 return CONTAINING_RECORD(iface, struct string_enumerator, IEnumString_iface);
606}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by string_enumerator_AddRef(), string_enumerator_QueryInterface(), and string_enumerator_Release().

◆ impl_from_IWICMetadataQueryReader()

static QueryReader * impl_from_IWICMetadataQueryReader ( IWICMetadataQueryReader iface)
inlinestatic

Definition at line 44 of file metadataquery.c.

45{
46 return CONTAINING_RECORD(iface, QueryReader, IWICMetadataQueryReader_iface);
47}

Referenced by mqr_AddRef(), mqr_GetContainerFormat(), mqr_GetLocation(), mqr_GetMetadataByName(), mqr_QueryInterface(), and mqr_Release().

◆ impl_from_IWICMetadataQueryWriter()

static QueryWriter * impl_from_IWICMetadataQueryWriter ( IWICMetadataQueryWriter iface)
inlinestatic

Definition at line 757 of file metadataquery.c.

758{
759 return CONTAINING_RECORD(iface, QueryWriter, IWICMetadataQueryWriter_iface);
760}

Referenced by mqw_AddRef(), mqw_QueryInterface(), and mqw_Release().

◆ map_shortname_to_schema()

static const WCHAR * map_shortname_to_schema ( const GUID format,
const WCHAR name 
)
static

Definition at line 1025 of file metadataquery.c.

1026{
1027 UINT i;
1028
1029 /* It appears that the only metadata formats
1030 * that support schemas are xmp and xmpstruct.
1031 */
1032 if (!IsEqualGUID(format, &GUID_MetadataFormatXMP) &&
1033 !IsEqualGUID(format, &GUID_MetadataFormatXMPStruct))
1034 return NULL;
1035
1036 for (i = 0; i < ARRAY_SIZE(name2schema); i++)
1037 {
1038 if (!wcscmp(name2schema[i].name, name))
1039 return name2schema[i].schema;
1040 }
1041
1042 return NULL;
1043}
#define ARRAY_SIZE(A)
Definition: main.h:20
static const struct @627 name2schema[]
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
Definition: name.c:39

Referenced by mqr_GetMetadataByName().

◆ map_type()

static VARTYPE map_type ( struct string_t str)
static

Definition at line 159 of file metadataquery.c.

160{
161 UINT i;
162
163 for (i = 0; i < ARRAY_SIZE(str2vt); i++)
164 {
165 if (str2vt[i].len == str->len)
166 {
168 str->str, str->len, str2vt[i].str, str2vt[i].len) == CSTR_EQUAL)
169 return str2vt[i].vt;
170 }
171 }
172
173 WARN("type %s is not recognized\n", wine_dbgstr_wn(str->str, str->len));
174
175 return VT_ILLEGAL;
176}
#define WARN(fmt,...)
Definition: precomp.h:61
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
Definition: locale.c:4014
static const struct @625 str2vt[]
WCHAR str[10]
#define LOCALE_SYSTEM_DEFAULT
#define NORM_IGNORECASE
Definition: winnls.h:178
#define CSTR_EQUAL
Definition: winnls.h:458

Referenced by _STLP_STATIC_ASSERT(), and get_token().

◆ MetadataQueryReader_CreateInstance()

HRESULT MetadataQueryReader_CreateInstance ( IWICMetadataBlockReader mbr,
const WCHAR root,
IWICMetadataQueryReader **  out 
)

Definition at line 727 of file metadataquery.c.

728{
730
731 obj = calloc(1, sizeof(*obj));
732 if (!obj)
733 return E_OUTOFMEMORY;
734
735 obj->IWICMetadataQueryReader_iface.lpVtbl = &mqr_vtbl;
736 obj->ref = 1;
737
738 IWICMetadataBlockReader_AddRef(mbr);
739 obj->block = mbr;
740
741 obj->root = wcsdup(root);
742
743 *out = &obj->IWICMetadataQueryReader_iface;
744
745 return S_OK;
746}
static IWICMetadataQueryReaderVtbl mqr_vtbl
#define calloc
Definition: rosglue.h:14
_Check_return_ _CRTIMP wchar_t *__cdecl wcsdup(_In_z_ const wchar_t *_Str)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by ComponentFactory_CreateQueryReaderFromBlockReader(), GifDecoder_GetMetadataQueryReader(), GifFrameDecode_GetMetadataQueryReader(), and mqr_GetMetadataByName().

◆ MetadataQueryWriter_CreateInstance()

HRESULT MetadataQueryWriter_CreateInstance ( IWICMetadataBlockWriter mbw,
const WCHAR root,
IWICMetadataQueryWriter **  out 
)

Definition at line 867 of file metadataquery.c.

868{
870
871 obj = calloc(1, sizeof(*obj));
872 if (!obj)
873 return E_OUTOFMEMORY;
874
875 obj->IWICMetadataQueryWriter_iface.lpVtbl = &mqw_vtbl;
876 obj->ref = 1;
877
878 IWICMetadataBlockWriter_AddRef(mbw);
879 obj->block = mbw;
880
881 obj->root = wcsdup(root);
882
883 *out = &obj->IWICMetadataQueryWriter_iface;
884
885 return S_OK;
886}
static const IWICMetadataQueryWriterVtbl mqw_vtbl

Referenced by CommonEncoderFrame_GetMetadataQueryWriter(), ComponentFactory_CreateQueryWriterFromBlockWriter(), and GifFrameEncode_GetMetadataQueryWriter().

◆ mqr_AddRef()

static ULONG WINAPI mqr_AddRef ( IWICMetadataQueryReader iface)
static

Definition at line 71 of file metadataquery.c.

72{
75 TRACE("(%p) refcount=%lu\n", This, ref);
76 return ref;
77}
#define InterlockedIncrement
Definition: armddk.h:53
static QueryReader * impl_from_IWICMetadataQueryReader(IWICMetadataQueryReader *iface)
Definition: metadataquery.c:44
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ mqr_GetContainerFormat()

static HRESULT WINAPI mqr_GetContainerFormat ( IWICMetadataQueryReader iface,
GUID format 
)
static

Definition at line 93 of file metadataquery.c.

94{
96
97 TRACE("(%p,%p)\n", This, format);
98
99 return IWICMetadataBlockReader_GetContainerFormat(This->block, format);
100}

◆ mqr_GetEnumerator()

static HRESULT WINAPI mqr_GetEnumerator ( IWICMetadataQueryReader iface,
IEnumString **  enum_string 
)
static

Definition at line 709 of file metadataquery.c.

711{
712 TRACE("iface %p, enum_string %p.\n", iface, enum_string);
713
714 return string_enumerator_create(enum_string);
715}
static HRESULT string_enumerator_create(IEnumString **enum_string)

◆ mqr_GetLocation()

static HRESULT WINAPI mqr_GetLocation ( IWICMetadataQueryReader iface,
UINT  len,
WCHAR location,
UINT ret_len 
)
static

Definition at line 102 of file metadataquery.c.

103{
105 const WCHAR *root;
106 UINT actual_len;
107
108 TRACE("(%p,%u,%p,%p)\n", This, len, location, ret_len);
109
110 if (!ret_len) return E_INVALIDARG;
111
112 root = This->root ? This->root : L"/";
113 actual_len = lstrlenW(root) + 1;
114
115 if (location)
116 {
117 if (len < actual_len)
119
120 memcpy(location, root, actual_len * sizeof(WCHAR));
121 }
122
123 *ret_len = actual_len;
124
125 return S_OK;
126}
struct _root root
#define E_INVALIDARG
Definition: ddrawi.h:101
#define lstrlenW
Definition: compat.h:750
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
Definition: process.c:79
#define L(x)
Definition: ntvdm.h:50
#define WINCODEC_ERR_INSUFFICIENTBUFFER
Definition: winerror.h:3311

◆ mqr_GetMetadataByName()

static HRESULT WINAPI mqr_GetMetadataByName ( IWICMetadataQueryReader iface,
LPCWSTR  query,
PROPVARIANT *  value 
)
static

Definition at line 446 of file metadataquery.c.

447{
449 struct string_t elem;
450 WCHAR *full_query;
451 const WCHAR *p;
452 int index, len;
453 PROPVARIANT tk_id, tk_schema, new_value;
454 GUID guid;
456 HRESULT hr = S_OK;
457
458 TRACE("(%p,%s,%p)\n", This, wine_dbgstr_w(query), value);
459
460 len = lstrlenW(query) + 1;
461 if (This->root) len += lstrlenW(This->root);
462 full_query = malloc(len * sizeof(WCHAR));
463 full_query[0] = 0;
464 if (This->root)
465 lstrcpyW(full_query, This->root);
466 lstrcatW(full_query, query);
467
468 PropVariantInit(&tk_id);
469 PropVariantInit(&tk_schema);
470 PropVariantInit(&new_value);
471
472 reader = NULL;
473 p = full_query;
474
475 while (*p)
476 {
477 if (*p != '/')
478 {
479 WARN("query should start with '/'\n");
481 break;
482 }
483
484 p++;
485
486 index = 0;
487 elem.str = p;
488 elem.len = lstrlenW(p);
489 hr = get_token(&elem, &tk_id, &tk_schema, &index);
490 if (hr != S_OK)
491 {
492 WARN("get_token error %#lx\n", hr);
493 break;
494 }
495 TRACE("parsed %d characters: %s, index %d\n", elem.len, wine_dbgstr_wn(elem.str, elem.len), index);
496 TRACE("id %s, schema %s\n", wine_dbgstr_variant((VARIANT *)&tk_id), wine_dbgstr_variant((VARIANT *)&tk_schema));
497
498 if (!elem.len) break;
499
500 if (tk_id.vt == VT_CLSID || (tk_id.vt == VT_BSTR && WICMapShortNameToGuid(tk_id.bstrVal, &guid) == S_OK))
501 {
502 WCHAR *root;
503
504 if (tk_schema.vt != VT_EMPTY)
505 {
506 FIXME("unsupported schema vt %u\n", tk_schema.vt);
507 PropVariantClear(&tk_schema);
508 }
509
510 if (tk_id.vt == VT_CLSID) guid = *tk_id.puuid;
511
512 if (reader)
513 {
514 IWICMetadataReader *new_reader;
515
516 hr = get_next_reader(reader, index, &guid, &new_reader);
517 IWICMetadataReader_Release(reader);
518 reader = new_reader;
519 }
520 else
522
523 if (hr != S_OK) break;
524
525 root = SysAllocStringLen(NULL, elem.str + elem.len - full_query + 2);
526 if (!root)
527 {
529 break;
530 }
531 lstrcpynW(root, full_query, p - full_query + elem.len + 1);
532
533 PropVariantClear(&new_value);
534 new_value.vt = VT_UNKNOWN;
535 hr = MetadataQueryReader_CreateInstance(This->block, root, (IWICMetadataQueryReader **)&new_value.punkVal);
537 if (hr != S_OK) break;
538 }
539 else
540 {
541 PROPVARIANT schema, id;
542
543 if (!reader)
544 {
546 break;
547 }
548
549 if (tk_schema.vt == VT_BSTR)
550 {
551 hr = IWICMetadataReader_GetMetadataFormat(reader, &guid);
552 if (hr != S_OK) break;
553
554 schema.vt = VT_LPWSTR;
555 schema.pwszVal = (LPWSTR)map_shortname_to_schema(&guid, tk_schema.bstrVal);
556 if (!schema.pwszVal)
557 schema.pwszVal = tk_schema.bstrVal;
558 }
559 else
560 schema = tk_schema;
561
562 if (tk_id.vt == VT_BSTR)
563 {
564 id.vt = VT_LPWSTR;
565 id.pwszVal = tk_id.bstrVal;
566 }
567 else
568 id = tk_id;
569
570 PropVariantClear(&new_value);
571 hr = IWICMetadataReader_GetValue(reader, &schema, &id, &new_value);
572 if (hr != S_OK) break;
573 }
574
575 p += elem.len;
576
577 PropVariantClear(&tk_id);
578 PropVariantClear(&tk_schema);
579 }
580
581 if (reader)
582 IWICMetadataReader_Release(reader);
583
584 PropVariantClear(&tk_id);
585 PropVariantClear(&tk_schema);
586
587 if (hr == S_OK && value)
588 *value = new_value;
589 else
590 PropVariantClear(&new_value);
591
592 free(full_query);
593
594 return hr;
595}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define lstrcpyW
Definition: compat.h:749
@ VT_LPWSTR
Definition: compat.h:2325
#define lstrcpynW
Definition: compat.h:738
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
static const WCHAR * map_shortname_to_schema(const GUID *format, const WCHAR *name)
HRESULT MetadataQueryReader_CreateInstance(IWICMetadataBlockReader *mbr, const WCHAR *root, IWICMetadataQueryReader **out)
HRESULT WINAPI WICMapShortNameToGuid(PCWSTR name, GUID *guid)
static HRESULT get_next_reader(IWICMetadataReader *reader, UINT index, GUID *guid, IWICMetadataReader **new_reader)
static HRESULT find_reader_from_block(IWICMetadataBlockReader *block_reader, UINT index, GUID *guid, IWICMetadataReader **reader)
int len
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
BSTR bstrVal
Definition: compat.h:2399
VARTYPE vt
Definition: compat.h:2381
#define WINCODEC_ERR_PROPERTYNOTSUPPORTED
Definition: winerror.h:3288
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ mqr_QueryInterface()

static HRESULT WINAPI mqr_QueryInterface ( IWICMetadataQueryReader iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 49 of file metadataquery.c.

51{
53
54 TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppvObject);
55
57 IsEqualGUID(riid, &IID_IWICMetadataQueryReader))
58 *ppvObject = &This->IWICMetadataQueryReader_iface;
59 else
60 *ppvObject = NULL;
61
62 if (*ppvObject)
63 {
64 IUnknown_AddRef((IUnknown*)*ppvObject);
65 return S_OK;
66 }
67
68 return E_NOINTERFACE;
69}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ mqr_Release()

static ULONG WINAPI mqr_Release ( IWICMetadataQueryReader iface)
static

Definition at line 79 of file metadataquery.c.

80{
83 TRACE("(%p) refcount=%lu\n", This, ref);
84 if (!ref)
85 {
86 IWICMetadataBlockReader_Release(This->block);
87 free(This->root);
88 free(This);
89 }
90 return ref;
91}
#define InterlockedDecrement
Definition: armddk.h:52

◆ mqw_AddRef()

static ULONG WINAPI mqw_AddRef ( IWICMetadataQueryWriter iface)
static

Definition at line 785 of file metadataquery.c.

786{
788 ULONG ref = InterlockedIncrement(&writer->ref);
789
790 TRACE("writer %p, refcount=%lu\n", writer, ref);
791
792 return ref;
793}
static QueryWriter * impl_from_IWICMetadataQueryWriter(IWICMetadataQueryWriter *iface)

◆ mqw_GetContainerFormat()

static HRESULT WINAPI mqw_GetContainerFormat ( IWICMetadataQueryWriter iface,
GUID container_format 
)
static

Definition at line 811 of file metadataquery.c.

812{
813 FIXME("iface %p, container_format %p stub.\n", iface, container_format);
814
815 return E_NOTIMPL;
816}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ mqw_GetEnumerator()

static HRESULT WINAPI mqw_GetEnumerator ( IWICMetadataQueryWriter iface,
IEnumString **  enum_string 
)
static

Definition at line 818 of file metadataquery.c.

819{
820 TRACE("iface %p, enum_string %p.\n", iface, enum_string);
821
822 return string_enumerator_create(enum_string);
823}

◆ mqw_GetLocation()

static HRESULT WINAPI mqw_GetLocation ( IWICMetadataQueryWriter iface,
UINT  max_length,
WCHAR namespace,
UINT actual_length 
)
static

Definition at line 825 of file metadataquery.c.

826{
827 FIXME("iface %p, max_length %u, namespace %s, actual_length %p stub.\n",
828 iface, max_length, debugstr_w(namespace), actual_length);
829
830 return E_NOTIMPL;
831}
#define debugstr_w
Definition: kernel32.h:32

◆ mqw_GetMetadataByName()

static HRESULT WINAPI mqw_GetMetadataByName ( IWICMetadataQueryWriter iface,
LPCWSTR  name,
PROPVARIANT *  value 
)
static

Definition at line 833 of file metadataquery.c.

834{
835 FIXME("name %s, value %p stub.\n", debugstr_w(name), value);
836
837 return E_NOTIMPL;
838}

◆ mqw_QueryInterface()

static HRESULT WINAPI mqw_QueryInterface ( IWICMetadataQueryWriter iface,
REFIID  riid,
void **  object 
)
static

Definition at line 762 of file metadataquery.c.

764{
766
767 TRACE("writer %p, riid %s, object %p.\n", writer, debugstr_guid(riid), object);
768
770 || IsEqualGUID(riid, &IID_IWICMetadataQueryWriter)
771 || IsEqualGUID(riid, &IID_IWICMetadataQueryReader))
772 *object = &writer->IWICMetadataQueryWriter_iface;
773 else
774 *object = NULL;
775
776 if (*object)
777 {
778 IUnknown_AddRef((IUnknown *)*object);
779 return S_OK;
780 }
781
782 return E_NOINTERFACE;
783}
IWICMetadataQueryWriter IWICMetadataQueryWriter_iface

◆ mqw_Release()

static ULONG WINAPI mqw_Release ( IWICMetadataQueryWriter iface)
static

Definition at line 795 of file metadataquery.c.

796{
798 ULONG ref = InterlockedDecrement(&writer->ref);
799
800 TRACE("writer %p, refcount=%lu.\n", writer, ref);
801
802 if (!ref)
803 {
804 IWICMetadataBlockWriter_Release(writer->block);
805 free(writer->root);
806 free(writer);
807 }
808 return ref;
809}
WCHAR * root
IWICMetadataBlockWriter * block

◆ mqw_RemoveMetadataByName()

static HRESULT WINAPI mqw_RemoveMetadataByName ( IWICMetadataQueryWriter iface,
LPCWSTR  name 
)
static

Definition at line 847 of file metadataquery.c.

848{
849 FIXME("iface %p, name %s stub.\n", iface, debugstr_w(name));
850
851 return E_NOTIMPL;
852}

◆ mqw_SetMetadataByName()

static HRESULT WINAPI mqw_SetMetadataByName ( IWICMetadataQueryWriter iface,
LPCWSTR  name,
const PROPVARIANT *  value 
)
static

Definition at line 840 of file metadataquery.c.

841{
842 FIXME("iface %p, name %s, value %p stub.\n", iface, debugstr_w(name), value);
843
844 return S_OK;
845}

◆ string_enumerator_AddRef()

static ULONG WINAPI string_enumerator_AddRef ( IEnumString iface)
static

Definition at line 627 of file metadataquery.c.

628{
629 struct string_enumerator *this = impl_from_IEnumString(iface);
630 ULONG ref = InterlockedIncrement(&this->ref);
631
632 TRACE("iface %p, ref %lu.\n", iface, ref);
633
634 return ref;
635}
static struct string_enumerator * impl_from_IEnumString(IEnumString *iface)

◆ string_enumerator_Clone()

static HRESULT WINAPI string_enumerator_Clone ( IEnumString iface,
IEnumString **  out 
)
static

Definition at line 675 of file metadataquery.c.

676{
677 FIXME("iface %p, out %p stub.\n", iface, out);
678
679 *out = NULL;
680 return E_NOTIMPL;
681}

◆ string_enumerator_create()

static HRESULT string_enumerator_create ( IEnumString **  enum_string)
static

Definition at line 694 of file metadataquery.c.

695{
697
698 if (!(object = calloc(1, sizeof(*object))))
699 return E_OUTOFMEMORY;
700
701 object->IEnumString_iface.lpVtbl = &string_enumerator_vtbl;
702 object->ref = 1;
703
704 *enum_string = &object->IEnumString_iface;
705
706 return S_OK;
707}
static const IEnumStringVtbl string_enumerator_vtbl

Referenced by mqr_GetEnumerator(), and mqw_GetEnumerator().

◆ string_enumerator_Next()

static HRESULT WINAPI string_enumerator_Next ( IEnumString iface,
ULONG  count,
LPOLESTR strings,
ULONG ret 
)
static

Definition at line 650 of file metadataquery.c.

651{
652 FIXME("iface %p, count %lu, strings %p, ret %p stub.\n", iface, count, strings, ret);
653
654 if (!strings || !ret)
655 return E_INVALIDARG;
656
657 *ret = 0;
658 return count ? S_FALSE : S_OK;
659}
GLsizei const GLchar *const * strings
Definition: glext.h:7622
int ret
#define S_FALSE
Definition: winerror.h:2357

◆ string_enumerator_QueryInterface()

static HRESULT WINAPI string_enumerator_QueryInterface ( IEnumString iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 608 of file metadataquery.c.

609{
610 struct string_enumerator *this = impl_from_IEnumString(iface);
611
612 TRACE("iface %p, riid %s, ppv %p.\n", iface, debugstr_guid(riid), ppv);
613
615 *ppv = &this->IEnumString_iface;
616 else
617 {
618 WARN("Unknown riid %s.\n", debugstr_guid(riid));
619 *ppv = NULL;
620 return E_NOINTERFACE;
621 }
622
623 IUnknown_AddRef(&this->IEnumString_iface);
624 return S_OK;
625}
REFIID LPVOID * ppv
Definition: atlbase.h:39
const GUID IID_IEnumString
IEnumString IEnumString_iface

◆ string_enumerator_Release()

static ULONG WINAPI string_enumerator_Release ( IEnumString iface)
static

Definition at line 637 of file metadataquery.c.

638{
639 struct string_enumerator *this = impl_from_IEnumString(iface);
640 ULONG ref = InterlockedDecrement(&this->ref);
641
642 TRACE("iface %p, ref %lu.\n", iface, ref);
643
644 if (!ref)
645 free(this);
646
647 return ref;
648}

◆ string_enumerator_Reset()

static HRESULT WINAPI string_enumerator_Reset ( IEnumString iface)
static

Definition at line 661 of file metadataquery.c.

662{
663 TRACE("iface %p.\n", iface);
664
665 return S_OK;
666}

◆ string_enumerator_Skip()

static HRESULT WINAPI string_enumerator_Skip ( IEnumString iface,
ULONG  count 
)
static

Definition at line 668 of file metadataquery.c.

669{
670 FIXME("iface %p, count %lu stub.\n", iface, count);
671
672 return count ? S_FALSE : S_OK;
673}

◆ WICMapGuidToShortName()

HRESULT WINAPI WICMapGuidToShortName ( REFGUID  guid,
UINT  len,
WCHAR name,
UINT ret_len 
)

Definition at line 940 of file metadataquery.c.

941{
942 UINT i;
943
944 TRACE("%s,%u,%p,%p\n", wine_dbgstr_guid(guid), len, name, ret_len);
945
946 if (!guid) return E_INVALIDARG;
947
948 for (i = 0; i < ARRAY_SIZE(guid2name); i++)
949 {
951 {
952 if (name)
953 {
954 if (!len) return E_INVALIDARG;
955
956 len = min(len - 1, lstrlenW(guid2name[i].name));
957 memcpy(name, guid2name[i].name, len * sizeof(WCHAR));
958 name[len] = 0;
959
960 if (len < lstrlenW(guid2name[i].name))
962 }
963 if (ret_len) *ret_len = lstrlenW(guid2name[i].name) + 1;
964 return S_OK;
965 }
966 }
967
969}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
static const struct @626 guid2name[]
#define min(a, b)
Definition: monoChain.cc:55
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

Referenced by test_metadata_gif(), and test_WICMapGuidToShortName().

◆ WICMapSchemaToName()

HRESULT WINAPI WICMapSchemaToName ( REFGUID  format,
LPWSTR  schema,
UINT  len,
WCHAR name,
UINT ret_len 
)

Definition at line 1045 of file metadataquery.c.

1046{
1047 UINT i;
1048
1049 TRACE("%s,%s,%u,%p,%p\n", wine_dbgstr_guid(format), debugstr_w(schema), len, name, ret_len);
1050
1051 if (!format || !schema || !ret_len)
1052 return E_INVALIDARG;
1053
1054 /* It appears that the only metadata formats
1055 * that support schemas are xmp and xmpstruct.
1056 */
1057 if (!IsEqualGUID(format, &GUID_MetadataFormatXMP) &&
1058 !IsEqualGUID(format, &GUID_MetadataFormatXMPStruct))
1060
1061 for (i = 0; i < ARRAY_SIZE(name2schema); i++)
1062 {
1064 {
1065 if (name)
1066 {
1067 if (!len) return E_INVALIDARG;
1068
1069 len = min(len - 1, lstrlenW(name2schema[i].name));
1070 memcpy(name, name2schema[i].name, len * sizeof(WCHAR));
1071 name[len] = 0;
1072
1073 if (len < lstrlenW(name2schema[i].name))
1075 }
1076
1078 return S_OK;
1079 }
1080 }
1081
1083}

Referenced by test_WICMapSchemaToName().

◆ WICMapShortNameToGuid()

HRESULT WINAPI WICMapShortNameToGuid ( PCWSTR  name,
GUID guid 
)

Definition at line 971 of file metadataquery.c.

972{
973 UINT i;
974
975 TRACE("%s,%p\n", debugstr_w(name), guid);
976
977 if (!name || !guid) return E_INVALIDARG;
978
979 for (i = 0; i < ARRAY_SIZE(guid2name); i++)
980 {
981 if (!lstrcmpiW(name, guid2name[i].name))
982 {
983 *guid = *guid2name[i].guid;
984 return S_OK;
985 }
986 }
987
989}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262

Referenced by mqr_GetMetadataByName(), test_metadata_gif(), and test_WICMapShortNameToGuid().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( wincodecs  )

Variable Documentation

◆ guid

const GUID* guid

Definition at line 890 of file metadataquery.c.

Referenced by __wine_msi_call_dll_function(), _dump_dinput_GUID(), _GetDocumentsPidl(), _ILCreateGuid(), _test_provideclassinfo(), a_to_w_callback(), ACTION_CallScript(), ACTION_MsiPublishAssemblies(), ACTION_PublishProduct(), add_tbs_to_menu(), add_typeinfo_block(), alloc_importinfo(), Anime_SetFrameIndex(), BmpFrameEncode_SetPixelFormat(), callback_providersA(), callback_providersW(), CategoryMgr_FindClosestCategory(), ATL::CComBSTR::CComBSTR(), check_db_properties(), check_safearray(), client(), CoGetActivationState(), component_GetGUID(), compose_base85_guid(), CModeBias::ConvertModeBias(), CoRegisterSurrogateEx(), create_activex_object(), create_event_sink(), create_metadata_reader_from_container_iterator(), create_metadata_reader_iterator(), create_msft_typeinfo(), create_object(), create_script_host(), create_test_guid(), CRYPT_guid2wstr(), CRYPT_OpenSIPFunctionKey(), CRYPT_SIPDeleteFunction(), CRYPT_SIPWriteFunction(), CryptCATEnumerateMember(), ctl2_alloc_guid(), ctl2_find_guid(), ctl2_hash_guid(), custom_action_server(), custom_action_thread(), d3d8_indexbuffer_FreePrivateData(), d3d8_indexbuffer_GetPrivateData(), d3d8_indexbuffer_SetPrivateData(), d3d8_resource_free_private_data(), d3d8_resource_get_private_data(), d3d8_resource_set_private_data(), d3d8_surface_FreePrivateData(), d3d8_surface_GetPrivateData(), d3d8_surface_SetPrivateData(), d3d8_texture_2d_FreePrivateData(), d3d8_texture_2d_GetPrivateData(), d3d8_texture_2d_SetPrivateData(), d3d8_texture_3d_FreePrivateData(), d3d8_texture_3d_GetPrivateData(), d3d8_texture_3d_SetPrivateData(), d3d8_texture_cube_FreePrivateData(), d3d8_texture_cube_GetPrivateData(), d3d8_texture_cube_SetPrivateData(), d3d8_vertexbuffer_FreePrivateData(), d3d8_vertexbuffer_GetPrivateData(), d3d8_vertexbuffer_SetPrivateData(), d3d8_volume_FreePrivateData(), d3d8_volume_GetPrivateData(), d3d8_volume_SetPrivateData(), d3d9_indexbuffer_FreePrivateData(), d3d9_indexbuffer_GetPrivateData(), d3d9_indexbuffer_SetPrivateData(), d3d9_resource_free_private_data(), d3d9_resource_get_private_data(), d3d9_resource_set_private_data(), d3d9_surface_FreePrivateData(), d3d9_surface_GetPrivateData(), d3d9_surface_SetPrivateData(), d3d9_texture_2d_FreePrivateData(), d3d9_texture_2d_GetPrivateData(), d3d9_texture_2d_SetPrivateData(), d3d9_texture_3d_FreePrivateData(), d3d9_texture_3d_GetPrivateData(), d3d9_texture_3d_SetPrivateData(), d3d9_texture_cube_FreePrivateData(), d3d9_texture_cube_GetPrivateData(), d3d9_texture_cube_SetPrivateData(), d3d9_vertexbuffer_FreePrivateData(), d3d9_vertexbuffer_GetPrivateData(), d3d9_vertexbuffer_SetPrivateData(), d3d9_volume_FreePrivateData(), d3d9_volume_GetPrivateData(), d3d9_volume_SetPrivateData(), d3d_device1_Initialize(), d3d_device_create(), d3drm1_CreateDeviceFromClipper(), d3drm1_CreateDeviceFromSurface(), d3drm2_CreateDeviceFromClipper(), d3drm2_CreateDeviceFromSurface(), d3drm3_CreateDeviceFromClipper(), d3drm3_CreateDeviceFromSurface(), d3drm3_RegisterClient(), d3drm3_UnregisterClient(), d3drm_device1_InitFromClipper(), d3drm_device2_InitFromClipper(), d3drm_device2_InitFromSurface(), d3drm_device3_InitFromClipper(), d3drm_device3_InitFromSurface(), d3drm_mesh_builder3_Load(), d3dx9_file_data_GetId(), d3dx9_file_data_GetType(), d3dx9_file_enum_object_GetDataObjectById(), D3DXLoadMeshFromXInMemory(), D3DXLoadMeshHierarchyFromXInMemory(), ddraw1_Initialize(), ddraw2_Initialize(), ddraw4_Initialize(), ddraw7_Initialize(), DDRAW_Create(), debugstr_dmguid(), debugstr_guid(), DECLARE_INTERFACE_(), DECLARE_INTERFACE_IID_(), decode_base85_guid(), del_mapping_key(), delete_component_path(), DirectSoundCaptureEnumerateW(), DirectSoundDevice_Initialize(), DirectSoundEnumerateW(), DllRegisterServer(), DllUnregisterServer(), dsound_enum(), Dump(), dump_DIEFFECT(), effect_from_guid(), encode_base85_guid(), enum_callback(), enum_components(), EnumJoysticks(), EtwEnableTrace(), exec_script(), fetch_machine_component(), fetch_user_component(), find_action_by_guid(), find_clr_surrogate(), find_cominterface_redirection(), find_comserver_redirection(), find_devices(), find_guid(), find_guid_index(), find_reader_from_block(), find_tlib_redirection(), find_typelib_key(), CUserAssist::FireEvent(), GdipCreateEffect(), generate_uuid(), get_bool_property(), get_device_pnp_name(), get_device_pnp_name_guid(), get_elem_script_host(), get_formatinfo(), get_guid_from_language(), get_guid_from_type(), get_iface_guid(), get_IID_string(), get_interface_key(), get_mapping_key(), get_mesh_data(), get_metadata_container(), get_next_reader(), get_property(), get_script_guid(), get_script_host(), get_settingid(), get_typeinfo_of_guid(), get_typelib_key(), getCurrentChannelConfig(), CFunctionProvider::GetFunction(), GetGlobalCompartment(), GetRecordInfoFromTypeInfo(), GetSdbGuid(), CQueryAssociations::GetString(), CFunctionProviderBase::GetType(), GifDecoder_Block_GetContainerFormat(), GifFrameDecode_Block_GetContainerFormat(), Guid2str(), GUIDFromStringA(), GUIDFromStringW(), hash_guid(), Host_CreateObject(), ICreateTypeInfo2_fnSetCustData(), ICreateTypeInfo2_fnSetFuncCustData(), ICreateTypeInfo2_fnSetGuid(), ICreateTypeInfo2_fnSetImplTypeCustData(), ICreateTypeInfo2_fnSetParamCustData(), ICreateTypeInfo2_fnSetVarCustData(), ICreateTypeLib2_fnSetCustData(), ICreateTypeLib2_fnSetGuid(), IDirectPlay2AImpl_Initialize(), IDirectPlay2Impl_Initialize(), IDirectPlay3AImpl_Initialize(), IDirectPlay3Impl_Initialize(), IDirectPlay4AImpl_Initialize(), IDirectPlay4Impl_Initialize(), IDirectPlayImpl_Initialize(), IDirectXFileDataImpl_GetType(), IEnumDMO_fnNext(), IFileDialog2_fnSetClientGuid(), IFileOpenDialog_fnSetClientGuid(), IFileSaveDialog_fnSetClientGuid(), CIMEUIWindowHandler::ImeUIMsImeModeBiasHandler(), init_classinfo(), InitDisplayAttrbuteLib(), CCleanupHandler::Initialize(), InitPropVariantFromGUIDAsString(), InitVariantFromGUIDAsString(), intDdGetDriverInfo(), is_prefixed_volume(), IsCatalogFile(), IsEqual(), ITERATE_RegisterTypeLibraries(), ITERATE_UnregisterTypeLibraries(), ITypeInfo2_fnGetCustData(), ITypeInfo2_fnGetFuncCustData(), ITypeInfo2_fnGetImplTypeCustData(), ITypeInfo2_fnGetParamCustData(), ITypeInfo2_fnGetVarCustData(), ITypeInfo_fnInvoke(), ITypeLib2_fnGetCustData(), ITypeLib2_fnGetTypeInfoOfGuid(), JoyConfig8Impl_AddNewHardware(), jpeg_encoder_create_frame(), jpeg_encoder_get_supported_format(), load_data(), load_devices_from_reg(), load_mesh_data(), load_stream(), CCleanupHandlerList::LoadHandlers(), LocalServer_QueryService(), LPSAFEARRAY_UserMarshal(), LPSAFEARRAY_UserUnmarshal(), MakeGuidString(), match_guid_attr_imp(), matchGUID(), metadatahandler_stream_provider_GetPreferredVendorGUID(), MMDevPropStore_OpenPropKey(), mqr_GetMetadataByName(), msft_read_guid(), MSFT_ReadAllGuids(), MSI_ProvideQualifiedComponentEx(), MsiEnumComponentsExA(), MsiEnumComponentsExW(), path_find_symbol_file(), per_user_install_callback(), png_encoder_create_frame(), png_encoder_get_supported_format(), probe_volume(), profile3_GetProfileID(), PROPVAR_WCHARToGUID(), PropVariantToGUID(), query_feature_state(), query_typelib_path(), CUserAssist::QueryEvent(), QueryPathOfRegTypeLib(), ReadGuidNode(), register_dsound_devices(), register_key_guid(), RegisterPowerSettingNotification(), RtlFindActivationContextSectionGuid(), RtlFindActivationContextSectionString(), RtlGUIDFromString(), s_remote_GetActionInfo(), SAFEARRAY_CopyData(), SafeArraySetIID(), script_parse_event(), ScriptThread(), search_components(), server(), set_component_path(), set_custdata(), set_guid(), CShellLink::SetAdvertiseInfo(), setCurrentChannelConfig(), CUserAssist::SetEvent(), SetGlobalCompartmentDWORD(), setperusersecvalues_test(), SetPerUserSecValuesW(), SETUPDI_GuidToString(), SHELL32_GUIDToStringA(), SHELL32_GUIDToStringW(), shellex_load_object_and_run(), ShellExecute_FromContextMenuHandlers(), SHGlobalCounterCreate(), should_enumerate_device(), SHPropertyBag_OnRegKey(), SHPropertyBag_ReadTest(), SHPropertyBag_WriteTest(), SHRegGetCLSIDKeyA(), SHRegGetCLSIDKeyW(), SHStringFromGUIDA(), SHStringFromGUIDW(), squash_guid(), START_TEST(), string_to_guid(), StringToGuid(), test_Activate(), test_ClassIDs(), test_createeffect(), test_device_iface(), test_device_iface_detail(), test_device_info(), test_device_interface_key(), test_device_key(), test_devnode(), test_dsound(), test_dump_typelib(), test_find_progid_redirection(), test_fromguid(), test_GdipGetAllPropertyItems(), test_get_device_instance_id(), test_get_inf_class(), test_GetDefaultSearchGUID(), test_gif_properties(), TEST_GUIDFromStringA(), TEST_GUIDFromStringW(), test_GuidFunctions(), test_InitPropVariantFromGUIDAsString(), test_interface_identifier_conversion(), test_is_testdb(), test_MsiEnumComponents(), test_MsiEnumComponentsEx(), test_MsiEnumProducts(), test_MsiEnumProductsEx(), test_multi_encoder_impl(), test_open_class_key(), test_ordinal_imports(), test_Persist(), test_pixelformat_info(), Test_PrivateData(), test_PropVariantToGUID(), test_register_device_iface(), test_register_device_info(), test_registry_property_a(), test_registry_property_w(), test_RtlGUIDFromString(), test_safearray_layout(), test_SafeArrayCreateEx(), test_server_listening(), test_sip(), test_tiff_properties(), test_UuidCreate(), test_WICMapShortNameToGuid(), ThreadMgr_ActivateEx(), tiff_encoder_create_frame(), tiff_encoder_get_supported_format(), Timeline_IAMTimeline_GetDefaultEffect(), Timeline_IAMTimeline_GetDefaultTransition(), Timeline_IAMTimeline_SetDefaultEffect(), Timeline_IAMTimeline_SetDefaultTransition(), TimelineObj_GetSubObjectGUID(), TimelineObj_SetSubObjectGUID(), TLB_append_guid(), TLB_get_custdata_by_guid(), TLB_get_guid_null(), TLB_get_guidref(), TLB_GUIDFromString(), TLB_unregister_interface(), typeFromGUID(), uniquecontainer(), UserInstStubWrapperW(), VariantToGUID(), wic_guid_to_d3dformat(), WICMapGuidToShortName(), WICMapShortNameToGuid(), wined3d_private_store_set_private_data(), WMProfileManager_LoadProfileByID(), WMSFT_compile_guids(), write_pointer_tfs(), and Database::WriteBinary().

◆ 

const struct { ... } guid2name[]

◆ len

◆ mqr_vtbl

IWICMetadataQueryReaderVtbl mqr_vtbl
static
Initial value:
= {
}
static ULONG WINAPI mqr_AddRef(IWICMetadataQueryReader *iface)
Definition: metadataquery.c:71
static ULONG WINAPI mqr_Release(IWICMetadataQueryReader *iface)
Definition: metadataquery.c:79
static HRESULT WINAPI mqr_GetLocation(IWICMetadataQueryReader *iface, UINT len, WCHAR *location, UINT *ret_len)
static HRESULT WINAPI mqr_GetEnumerator(IWICMetadataQueryReader *iface, IEnumString **enum_string)
static HRESULT WINAPI mqr_GetMetadataByName(IWICMetadataQueryReader *iface, LPCWSTR query, PROPVARIANT *value)
static HRESULT WINAPI mqr_QueryInterface(IWICMetadataQueryReader *iface, REFIID riid, void **ppvObject)
Definition: metadataquery.c:49
static HRESULT WINAPI mqr_GetContainerFormat(IWICMetadataQueryReader *iface, GUID *format)
Definition: metadataquery.c:93

Definition at line 717 of file metadataquery.c.

Referenced by MetadataQueryReader_CreateInstance().

◆ mqw_vtbl

const IWICMetadataQueryWriterVtbl mqw_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI mqw_GetContainerFormat(IWICMetadataQueryWriter *iface, GUID *container_format)
static ULONG WINAPI mqw_AddRef(IWICMetadataQueryWriter *iface)
static ULONG WINAPI mqw_Release(IWICMetadataQueryWriter *iface)
static HRESULT WINAPI mqw_GetEnumerator(IWICMetadataQueryWriter *iface, IEnumString **enum_string)
static HRESULT WINAPI mqw_RemoveMetadataByName(IWICMetadataQueryWriter *iface, LPCWSTR name)
static HRESULT WINAPI mqw_SetMetadataByName(IWICMetadataQueryWriter *iface, LPCWSTR name, const PROPVARIANT *value)
static HRESULT WINAPI mqw_GetMetadataByName(IWICMetadataQueryWriter *iface, LPCWSTR name, PROPVARIANT *value)
static HRESULT WINAPI mqw_GetLocation(IWICMetadataQueryWriter *iface, UINT max_length, WCHAR *namespace, UINT *actual_length)
static HRESULT WINAPI mqw_QueryInterface(IWICMetadataQueryWriter *iface, REFIID riid, void **object)

Definition at line 854 of file metadataquery.c.

Referenced by MetadataQueryWriter_CreateInstance().

◆ name

Definition at line 891 of file metadataquery.c.

◆ 

const struct { ... } name2schema[]
Initial value:
=
{
{ L"rdf", L"http://www.w3.org/1999/02/22-rdf-syntax-ns#" },
{ L"dc", L"http://purl.org/dc/elements/1.1/" },
{ L"xmp", L"http://ns.adobe.com/xap/1.0/" },
{ L"xmpidq", L"http://ns.adobe.com/xmp/Identifier/qual/1.0/" },
{ L"xmpRights", L"http://ns.adobe.com/xap/1.0/rights/" },
{ L"xmpMM", L"http://ns.adobe.com/xap/1.0/mm/" },
{ L"xmpBJ", L"http://ns.adobe.com/xap/1.0/bj/" },
{ L"xmpTPg", L"http://ns.adobe.com/xap/1.0/t/pg/" },
{ L"pdf", L"http://ns.adobe.com/pdf/1.3/" },
{ L"photoshop", L"http://ns.adobe.com/photoshop/1.0/" },
{ L"tiff", L"http://ns.adobe.com/tiff/1.0/" },
{ L"exif", L"http://ns.adobe.com/exif/1.0/" },
{ L"stDim", L"http://ns.adobe.com/xap/1.0/sType/Dimensions#" },
{ L"xapGImg", L"http://ns.adobe.com/xap/1.0/g/img/" },
{ L"stEvt", L"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" },
{ L"stRef", L"http://ns.adobe.com/xap/1.0/sType/ResourceRef#" },
{ L"stVer", L"http://ns.adobe.com/xap/1.0/sType/Version#" },
{ L"stJob", L"http://ns.adobe.com/xap/1.0/sType/Job#" },
{ L"aux", L"http://ns.adobe.com/exif/1.0/aux/" },
{ L"crs", L"http://ns.adobe.com/camera-raw-settings/1.0/" },
{ L"xmpDM", L"http://ns.adobe.com/xmp/1.0/DynamicMedia/" },
{ L"Iptc4xmpCore", L"http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" },
{ L"MicrosoftPhoto", L"http://ns.microsoft.com/photo/1.0/" },
{ L"MP", L"http://ns.microsoft.com/photo/1.2/" },
{ L"MPRI", L"http://ns.microsoft.com/photo/1.2/t/RegionInfo#" },
{ L"MPReg", L"http://ns.microsoft.com/photo/1.2/t/Region#" }
}

Referenced by map_shortname_to_schema(), and WICMapSchemaToName().

◆ schema

◆ str

WCHAR str[10]

Definition at line 137 of file metadataquery.c.

Referenced by map_type().

◆ 

const struct { ... } str2vt[]
Initial value:
=
{
{ 4, {'c','h','a','r'}, VT_I1 },
{ 5, {'u','c','h','a','r'}, VT_UI1 },
{ 5, {'s','h','o','r','t'}, VT_I2 },
{ 6, {'u','s','h','o','r','t'}, VT_UI2 },
{ 4, {'l','o','n','g'}, VT_I4 },
{ 5, {'u','l','o','n','g'}, VT_UI4 },
{ 3, {'i','n','t'}, VT_I4 },
{ 4, {'u','i','n','t'}, VT_UI4 },
{ 8, {'l','o','n','g','l','o','n','g'}, VT_I8 },
{ 9, {'u','l','o','n','g','l','o','n','g'}, VT_UI8 },
{ 5, {'f','l','o','a','t'}, VT_R4 },
{ 6, {'d','o','u','b','l','e'}, VT_R8 },
{ 3, {'s','t','r'}, VT_LPSTR },
{ 4, {'w','s','t','r'}, VT_LPWSTR },
{ 4, {'g','u','i','d'}, VT_CLSID },
{ 4, {'b','o','o','l'}, VT_BOOL }
}
@ VT_UI8
Definition: compat.h:2315
@ VT_LPSTR
Definition: compat.h:2324
@ VT_R4
Definition: compat.h:2299
@ VT_R8
Definition: compat.h:2300
@ VT_I8
Definition: compat.h:2314
@ VT_I1
Definition: compat.h:2310
@ VT_I4
Definition: compat.h:2298
@ VT_BOOL
Definition: compat.h:2306
@ VT_I2
Definition: compat.h:2297
@ VT_UI4
Definition: compat.h:2313
@ VT_UI1
Definition: compat.h:2311

Referenced by map_type().

◆ string_enumerator_vtbl

const IEnumStringVtbl string_enumerator_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI string_enumerator_Clone(IEnumString *iface, IEnumString **out)
static ULONG WINAPI string_enumerator_AddRef(IEnumString *iface)
static HRESULT WINAPI string_enumerator_QueryInterface(IEnumString *iface, REFIID riid, void **ppv)
static HRESULT WINAPI string_enumerator_Skip(IEnumString *iface, ULONG count)
static ULONG WINAPI string_enumerator_Release(IEnumString *iface)
static HRESULT WINAPI string_enumerator_Next(IEnumString *iface, ULONG count, LPOLESTR *strings, ULONG *ret)
static HRESULT WINAPI string_enumerator_Reset(IEnumString *iface)

Definition at line 683 of file metadataquery.c.

Referenced by string_enumerator_create().

◆ vt

VARTYPE vt

Definition at line 138 of file metadataquery.c.

Referenced by get_token(), and map_type().