ReactOS 0.4.15-dev-7942-gd23573b
dmoreg.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winerror.h"
#include "winreg.h"
#include "objbase.h"
#include "wine/debug.h"
#include "dmo.h"
Include dependency graph for dmoreg.c:

Go to the source code of this file.

Classes

struct  IEnumDMOImpl
 

Macros

#define COBJMACROS
 
#define MSDMO_MAJOR_VERSION   6
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msdmo)
 
static IEnumDMOImplimpl_from_IEnumDMO (IEnumDMO *iface)
 
static HRESULT read_types (HKEY root, LPCWSTR key, ULONG *supplied, ULONG requested, DMO_PARTIAL_MEDIATYPE *types)
 
static LPWSTR GUIDToString (LPWSTR lpwstr, REFGUID lpcguid)
 
static HRESULT string_to_guid (const WCHAR *string, GUID *guid)
 
static BOOL IsMediaTypeEqual (const DMO_PARTIAL_MEDIATYPE *mt1, const DMO_PARTIAL_MEDIATYPE *mt2)
 
static HRESULT write_types (HKEY hkey, LPCWSTR name, const DMO_PARTIAL_MEDIATYPE *types, DWORD count)
 
HRESULT WINAPI DMORegister (LPCWSTR szName, REFCLSID clsidDMO, REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes)
 
static HRESULT unregister_dmo_from_category (const WCHAR *dmoW, const WCHAR *catW, HKEY categories)
 
HRESULT WINAPI DMOUnregister (REFCLSID dmo, REFGUID category)
 
HRESULT WINAPI DMOGetName (REFCLSID clsidDMO, WCHAR name[])
 
static HRESULT dup_partial_mediatype (const DMO_PARTIAL_MEDIATYPE *types, DWORD count, DMO_PARTIAL_MEDIATYPE **ret)
 
static HRESULT IEnumDMO_Constructor (REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes, IEnumDMO **obj)
 
static ULONG WINAPI IEnumDMO_fnAddRef (IEnumDMO *iface)
 
static HRESULT WINAPI IEnumDMO_fnQueryInterface (IEnumDMO *iface, REFIID riid, void **ppvObj)
 
static ULONG WINAPI IEnumDMO_fnRelease (IEnumDMO *iface)
 
static HRESULT WINAPI IEnumDMO_fnNext (IEnumDMO *iface, DWORD cItemsToFetch, CLSID *pCLSID, WCHAR **Names, DWORD *pcItemsFetched)
 
static HRESULT WINAPI IEnumDMO_fnSkip (IEnumDMO *iface, DWORD cItemsToSkip)
 
static HRESULT WINAPI IEnumDMO_fnReset (IEnumDMO *iface)
 
static HRESULT WINAPI IEnumDMO_fnClone (IEnumDMO *iface, IEnumDMO **ppEnum)
 
HRESULT WINAPI DMOEnum (REFGUID category, DWORD flags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes, IEnumDMO **ppEnum)
 
HRESULT WINAPI DMOGetTypes (REFCLSID clsidDMO, ULONG ulInputTypesRequested, ULONG *pulInputTypesSupplied, DMO_PARTIAL_MEDIATYPE *pInputTypes, ULONG ulOutputTypesRequested, ULONG *pulOutputTypesSupplied, DMO_PARTIAL_MEDIATYPE *pOutputTypes)
 

Variables

static const WCHAR szDMORootKey []
 
static const WCHAR szDMOInputType []
 
static const WCHAR szDMOOutputType []
 
static const WCHAR szDMOKeyed []
 
static const WCHAR szDMOCategories []
 
static const WCHAR szGUIDFmt []
 
static const WCHAR szCat3Fmt []
 
static const WCHAR szCat2Fmt []
 
static const WCHAR szToGuidFmt []
 
static const IEnumDMOVtbl edmovt
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file dmoreg.c.

◆ MSDMO_MAJOR_VERSION

#define MSDMO_MAJOR_VERSION   6

Definition at line 35 of file dmoreg.c.

Function Documentation

◆ DMOEnum()

HRESULT WINAPI DMOEnum ( REFGUID  category,
DWORD  flags,
DWORD  cInTypes,
const DMO_PARTIAL_MEDIATYPE pInTypes,
DWORD  cOutTypes,
const DMO_PARTIAL_MEDIATYPE pOutTypes,
IEnumDMO **  ppEnum 
)

Definition at line 732 of file dmoreg.c.

740{
741 TRACE("%s 0x%08x %d %p %d %p %p\n", debugstr_guid(category), flags, cInTypes, pInTypes,
742 cOutTypes, pOutTypes, ppEnum);
743
744 if (TRACE_ON(msdmo))
745 {
746 DWORD i;
747 if (cInTypes)
748 {
749 for (i = 0; i < cInTypes; i++)
750 TRACE("intype %d - type %s, subtype %s\n", i, debugstr_guid(&pInTypes[i].type),
751 debugstr_guid(&pInTypes[i].subtype));
752 }
753
754 if (cOutTypes) {
755 for (i = 0; i < cOutTypes; i++)
756 TRACE("outtype %d - type %s, subtype %s\n", i, debugstr_guid(&pOutTypes[i].type),
757 debugstr_guid(&pOutTypes[i].subtype));
758 }
759 }
760
761 return IEnumDMO_Constructor(category, flags, cInTypes,
762 pInTypes, cOutTypes, pOutTypes, ppEnum);
763}
#define TRACE_ON(x)
Definition: compat.h:75
static HRESULT IEnumDMO_Constructor(REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes, IEnumDMO **obj)
Definition: dmoreg.c:391
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLbitfield flags
Definition: glext.h:7161
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 debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by create_EnumMoniker().

◆ DMOGetName()

HRESULT WINAPI DMOGetName ( REFCLSID  clsidDMO,
WCHAR  name[] 
)

Definition at line 342 of file dmoreg.c.

343{
344 static const INT max_name_len = 80*sizeof(WCHAR);
345 DWORD count = max_name_len;
346 WCHAR szguid[64];
347 HKEY hrkey, hkey;
348 LONG ret;
349
350 TRACE("%s %p\n", debugstr_guid(clsidDMO), name);
351
353 return E_FAIL;
354
355 ret = RegOpenKeyExW(hrkey, GUIDToString(szguid, clsidDMO), 0, KEY_READ, &hkey);
356 RegCloseKey(hrkey);
357 if (ret)
358 return E_FAIL;
359
361 RegCloseKey(hkey);
362
363 if (!ret && count > 1)
364 {
365 TRACE("name=%s\n", debugstr_w(name));
366 return S_OK;
367 }
368
369 name[0] = 0;
370 return S_FALSE;
371}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
static const WCHAR szDMORootKey[]
Definition: dmoreg.c:37
static LPWSTR GUIDToString(LPWSTR lpwstr, REFGUID lpcguid)
Definition: dmoreg.c:109
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define S_OK
Definition: intsafe.h:52
#define debugstr_w
Definition: kernel32.h:32
#define KEY_READ
Definition: nt_native.h:1023
long LONG
Definition: pedump.c:60
Definition: name.c:39
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
int ret
#define S_FALSE
Definition: winerror.h:2357
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by DEVENUM_IPropertyBag_Read().

◆ DMOGetTypes()

HRESULT WINAPI DMOGetTypes ( REFCLSID  clsidDMO,
ULONG  ulInputTypesRequested,
ULONG pulInputTypesSupplied,
DMO_PARTIAL_MEDIATYPE pInputTypes,
ULONG  ulOutputTypesRequested,
ULONG pulOutputTypesSupplied,
DMO_PARTIAL_MEDIATYPE pOutputTypes 
)

Definition at line 857 of file dmoreg.c.

864{
865 HKEY root,hkey;
866 HRESULT ret = S_OK;
867 WCHAR szguid[64];
868
869 TRACE ("(%s,%u,%p,%p,%u,%p,%p)\n", debugstr_guid(clsidDMO), ulInputTypesRequested,
870 pulInputTypesSupplied, pInputTypes, ulOutputTypesRequested, pulOutputTypesSupplied,
871 pOutputTypes);
872
874 KEY_READ, &root))
875 return E_FAIL;
876
877 if (ERROR_SUCCESS != RegOpenKeyExW(root,GUIDToString(szguid,clsidDMO) , 0,
878 KEY_READ, &hkey))
879 {
881 return E_FAIL;
882 }
883
884 if (ulInputTypesRequested > 0)
885 {
886 ret = read_types(hkey, szDMOInputType, pulInputTypesSupplied, ulInputTypesRequested, pInputTypes );
887 }
888 else
889 *pulInputTypesSupplied = 0;
890
891 if (ulOutputTypesRequested > 0)
892 {
893 HRESULT ret2;
894 ret2 = read_types(hkey, szDMOOutputType, pulOutputTypesSupplied, ulOutputTypesRequested, pOutputTypes );
895
896 if (ret == S_OK)
897 ret = ret2;
898 }
899 else
900 *pulOutputTypesSupplied = 0;
901
902 return ret;
903}
struct _root root
#define ERROR_SUCCESS
Definition: deptool.c:10
static const WCHAR szDMOInputType[]
Definition: dmoreg.c:43
static const WCHAR szDMOOutputType[]
Definition: dmoreg.c:48
static HRESULT read_types(HKEY root, LPCWSTR key, ULONG *supplied, ULONG requested, DMO_PARTIAL_MEDIATYPE *types)
Definition: dmoreg.c:778

◆ DMORegister()

HRESULT WINAPI DMORegister ( LPCWSTR  szName,
REFCLSID  clsidDMO,
REFGUID  guidCategory,
DWORD  dwFlags,
DWORD  cInTypes,
const DMO_PARTIAL_MEDIATYPE pInTypes,
DWORD  cOutTypes,
const DMO_PARTIAL_MEDIATYPE pOutTypes 
)

Definition at line 183 of file dmoreg.c.

193{
194 WCHAR szguid[64];
196 HKEY hrkey = 0;
197 HKEY hkey = 0;
198 HKEY hckey = 0;
199 HKEY hclskey = 0;
200 LONG ret;
201
202 TRACE("%s %s %s\n", debugstr_w(szName), debugstr_guid(clsidDMO), debugstr_guid(guidCategory));
203
204 if (IsEqualGUID(guidCategory, &GUID_NULL))
205 return E_INVALIDARG;
206
209 if (ret)
210 return E_FAIL;
211
212 /* Create clsidDMO key under MediaObjects */
213 ret = RegCreateKeyExW(hrkey, GUIDToString(szguid, clsidDMO), 0, NULL,
215 if (ret)
216 goto lend;
217
218 /* Set default Name value */
219 ret = RegSetValueExW(hkey, NULL, 0, REG_SZ, (const BYTE*) szName,
220 (lstrlenW(szName) + 1) * sizeof(WCHAR));
221
222 /* Set InputTypes */
223 hres = write_types(hkey, szDMOInputType, pInTypes, cInTypes);
224
225 /* Set OutputTypes */
226 hres = write_types(hkey, szDMOOutputType, pOutTypes, cOutTypes);
227
229 {
230 /* Create Keyed key */
233 if (ret)
234 goto lend;
235 RegCloseKey(hckey);
236 }
237
238 /* Register the category */
241 if (ret)
242 goto lend;
243
244 RegCloseKey(hkey);
245
246 ret = RegCreateKeyExW(hckey, GUIDToString(szguid, guidCategory), 0, NULL,
248 if (ret)
249 goto lend;
250 ret = RegCreateKeyExW(hkey, GUIDToString(szguid, clsidDMO), 0, NULL,
252 if (ret)
253 goto lend;
254
255lend:
256 if (hkey)
257 RegCloseKey(hkey);
258 if (hckey)
259 RegCloseKey(hckey);
260 if (hclskey)
261 RegCloseKey(hclskey);
262 if (hrkey)
263 RegCloseKey(hrkey);
264
266 TRACE(" hresult=0x%08x\n", hres);
267 return hres;
268}
#define E_INVALIDARG
Definition: ddrawi.h:101
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
#define lstrlenW
Definition: compat.h:750
static HRESULT write_types(HKEY hkey, LPCWSTR name, const DMO_PARTIAL_MEDIATYPE *types, DWORD count)
Definition: dmoreg.c:140
static const WCHAR szDMOKeyed[]
Definition: dmoreg.c:53
static const WCHAR szDMOCategories[]
Definition: dmoreg.c:58
@ DMO_REGISTERF_IS_KEYED
Definition: dmoreg.h:32
#define GUID_NULL
Definition: ks.h:106
#define REG_SZ
Definition: layer.c:22
HRESULT hres
Definition: protocol.c:465
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
static const WCHAR szName[]
Definition: powrprof.c:45
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
unsigned char BYTE
Definition: xxhash.c:193

Referenced by test_dmo().

◆ DMOUnregister()

HRESULT WINAPI DMOUnregister ( REFCLSID  dmo,
REFGUID  category 
)

Definition at line 290 of file dmoreg.c.

291{
292 HKEY rootkey = 0, categorieskey = 0;
293 WCHAR dmoW[64], catW[64];
295 LONG ret;
296
297 TRACE("%s %s\n", debugstr_guid(dmo), debugstr_guid(category));
298
300 if (ret)
301 return S_FALSE;
302
303 GUIDToString(dmoW, dmo);
304 RegDeleteKeyW(rootkey, dmoW);
305
306 /* open 'Categories' */
307 ret = RegOpenKeyExW(rootkey, szDMOCategories, 0, KEY_WRITE|KEY_ENUMERATE_SUB_KEYS, &categorieskey);
308 RegCloseKey(rootkey);
309 if (ret)
310 {
312 goto lend;
313 }
314
315 /* remove from all categories */
317 {
318 DWORD index = 0, len = ARRAY_SIZE(catW);
319
320 while (!RegEnumKeyExW(categorieskey, index++, catW, &len, NULL, NULL, NULL, NULL))
321 hr = unregister_dmo_from_category(dmoW, catW, categorieskey);
322 }
323 else
324 {
325 GUIDToString(catW, category);
326 hr = unregister_dmo_from_category(dmoW, catW, categorieskey);
327 }
328
329lend:
330 if (categorieskey)
331 RegCloseKey(categorieskey);
332
333 return hr;
334}
#define ARRAY_SIZE(A)
Definition: main.h:33
static const WCHAR dmoW[]
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
Definition: reg.c:1239
static HRESULT unregister_dmo_from_category(const WCHAR *dmoW, const WCHAR *catW, HKEY categories)
Definition: dmoreg.c:270
GLuint index
Definition: glext.h:6031
GLenum GLsizei len
Definition: glext.h:6722
#define KEY_ENUMERATE_SUB_KEYS
Definition: nt_native.h:1019
HRESULT hr
Definition: shlfolder.c:183

Referenced by test_dmo().

◆ dup_partial_mediatype()

static HRESULT dup_partial_mediatype ( const DMO_PARTIAL_MEDIATYPE types,
DWORD  count,
DMO_PARTIAL_MEDIATYPE **  ret 
)
static

Definition at line 373 of file dmoreg.c.

374{
375 *ret = NULL;
376
377 if (count == 0)
378 return S_OK;
379
380 *ret = HeapAlloc(GetProcessHeap(), 0, count*sizeof(*types));
381 if (!*ret)
382 return E_OUTOFMEMORY;
383
384 memcpy(*ret, types, count*sizeof(*types));
385 return S_OK;
386}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: cmds.c:130

Referenced by IEnumDMO_Constructor().

◆ GUIDToString()

static LPWSTR GUIDToString ( LPWSTR  lpwstr,
REFGUID  lpcguid 
)
static

Definition at line 109 of file dmoreg.c.

110{
111 wsprintfW(lpwstr, szGUIDFmt, lpcguid->Data1, lpcguid->Data2,
112 lpcguid->Data3, lpcguid->Data4[0], lpcguid->Data4[1],
113 lpcguid->Data4[2], lpcguid->Data4[3], lpcguid->Data4[4],
114 lpcguid->Data4[5], lpcguid->Data4[6], lpcguid->Data4[7]);
115
116 return lpwstr;
117}
static const WCHAR szGUIDFmt[]
Definition: dmoreg.c:63
unsigned char Data4[8]
Definition: scsiwmi.h:55
unsigned long Data1
Definition: scsiwmi.h:52
unsigned short Data2
Definition: scsiwmi.h:53
unsigned short Data3
Definition: scsiwmi.h:54
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)

Referenced by DMOGetName(), DMOGetTypes(), DMORegister(), DMOUnregister(), IEnumDMO_Constructor(), and write_types().

◆ IEnumDMO_Constructor()

static HRESULT IEnumDMO_Constructor ( REFGUID  guidCategory,
DWORD  dwFlags,
DWORD  cInTypes,
const DMO_PARTIAL_MEDIATYPE pInTypes,
DWORD  cOutTypes,
const DMO_PARTIAL_MEDIATYPE pOutTypes,
IEnumDMO **  obj 
)
static

Definition at line 391 of file dmoreg.c.

399{
400 IEnumDMOImpl* lpedmo;
401 HRESULT hr;
402
403 *obj = NULL;
404
406 if (!lpedmo)
407 return E_OUTOFMEMORY;
408
409 lpedmo->IEnumDMO_iface.lpVtbl = &edmovt;
410 lpedmo->ref = 1;
411 lpedmo->index = -1;
412 lpedmo->category = *guidCategory;
413 lpedmo->dwFlags = dwFlags;
414 lpedmo->cInTypes = cInTypes;
415 lpedmo->cOutTypes = cOutTypes;
416 lpedmo->hkey = NULL;
417
418 hr = dup_partial_mediatype(pInTypes, cInTypes, &lpedmo->pInTypes);
419 if (FAILED(hr))
420 goto lerr;
421
422 hr = dup_partial_mediatype(pOutTypes, cOutTypes, &lpedmo->pOutTypes);
423 if (FAILED(hr))
424 goto lerr;
425
426 /* If not filtering by category enum from media objects root */
427 if (IsEqualGUID(guidCategory, &GUID_NULL))
428 {
430 }
431 else
432 {
433 WCHAR szguid[64];
434 WCHAR szKey[MAX_PATH];
435
436 wsprintfW(szKey, szCat3Fmt, szDMORootKey, szDMOCategories, GUIDToString(szguid, guidCategory));
437 RegOpenKeyExW(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &lpedmo->hkey);
438 }
439
440lerr:
441
442 if (FAILED(hr))
443 IEnumDMO_Release(&lpedmo->IEnumDMO_iface);
444 else
445 {
446 TRACE("returning %p\n", lpedmo);
447 *obj = &lpedmo->IEnumDMO_iface;
448 }
449
450 return hr;
451}
#define MAX_PATH
Definition: compat.h:34
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
static const IEnumDMOVtbl edmovt
Definition: dmoreg.c:107
static const WCHAR szCat3Fmt[]
Definition: dmoreg.c:70
static HRESULT dup_partial_mediatype(const DMO_PARTIAL_MEDIATYPE *types, DWORD count, DMO_PARTIAL_MEDIATYPE **ret)
Definition: dmoreg.c:373
#define FAILED(hr)
Definition: intsafe.h:51
HKEY hkey
Definition: dmoreg.c:97
DWORD index
Definition: dmoreg.c:90
DWORD dwFlags
Definition: dmoreg.c:92
DMO_PARTIAL_MEDIATYPE * pOutTypes
Definition: dmoreg.c:96
GUID category
Definition: dmoreg.c:91
DWORD cOutTypes
Definition: dmoreg.c:95
IEnumDMO IEnumDMO_iface
Definition: dmoreg.c:88
LONG ref
Definition: dmoreg.c:89
DMO_PARTIAL_MEDIATYPE * pInTypes
Definition: dmoreg.c:94
DWORD cInTypes
Definition: dmoreg.c:93

Referenced by DMOEnum(), and IEnumDMO_fnClone().

◆ IEnumDMO_fnAddRef()

static ULONG WINAPI IEnumDMO_fnAddRef ( IEnumDMO iface)
static

Definition at line 456 of file dmoreg.c.

457{
459 ULONG refCount = InterlockedIncrement(&This->ref);
460 TRACE("(%p)->(%d)\n", This, refCount);
461 return refCount;
462}
#define InterlockedIncrement
Definition: armddk.h:53
static IEnumDMOImpl * impl_from_IEnumDMO(IEnumDMO *iface)
Definition: dmoreg.c:100
uint32_t ULONG
Definition: typedefs.h:59

◆ IEnumDMO_fnClone()

static HRESULT WINAPI IEnumDMO_fnClone ( IEnumDMO iface,
IEnumDMO **  ppEnum 
)
static

Definition at line 718 of file dmoreg.c.

719{
721 TRACE("(%p)->(%p)\n", This, ppEnum);
722 return IEnumDMO_Constructor(&This->category, This->dwFlags, This->cInTypes, This->pInTypes,
723 This->cOutTypes, This->pOutTypes, ppEnum);
724}

◆ IEnumDMO_fnNext()

static HRESULT WINAPI IEnumDMO_fnNext ( IEnumDMO iface,
DWORD  cItemsToFetch,
CLSID pCLSID,
WCHAR **  Names,
DWORD pcItemsFetched 
)
static

Definition at line 510 of file dmoreg.c.

516{
517 HKEY hkey;
518 WCHAR szNextKey[MAX_PATH];
519 WCHAR szGuidKey[64];
520 WCHAR szKey[MAX_PATH];
521 WCHAR szValue[MAX_PATH];
522 DWORD len;
523 UINT count = 0;
524 HRESULT hres = S_OK;
525 LONG ret;
526 GUID guid;
527
529
530 TRACE("(%p)->(%d %p %p %p)\n", This, cItemsToFetch, pCLSID, Names, pcItemsFetched);
531
532 if (!pCLSID)
533 return E_POINTER;
534
535 if (!pcItemsFetched && cItemsToFetch > 1)
536 return E_INVALIDARG;
537
538 while (count < cItemsToFetch)
539 {
540 This->index++;
541
542 len = MAX_PATH;
543 ret = RegEnumKeyExW(This->hkey, This->index, szNextKey, &len, NULL, NULL, NULL, NULL);
544 if (ret != ERROR_SUCCESS)
545 {
547 break;
548 }
549
550 if (string_to_guid(szNextKey, &guid) != S_OK)
551 continue;
552
553 TRACE("found %s\n", debugstr_w(szNextKey));
554
555 if (!(This->dwFlags & DMO_ENUMF_INCLUDE_KEYED))
556 {
557 wsprintfW(szKey, szCat3Fmt, szDMORootKey, szNextKey, szDMOKeyed);
558 ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &hkey);
559 if (ERROR_SUCCESS == ret)
560 {
561 RegCloseKey(hkey);
562 /* Skip Keyed entries */
563 continue;
564 }
565 }
566
567 wsprintfW(szKey, szCat2Fmt, szDMORootKey, szNextKey);
568 ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &hkey);
569 TRACE("testing %s\n", debugstr_w(szKey));
570
571 if (This->pInTypes)
572 {
573 UINT i, j;
574 DWORD cInTypes;
575 DMO_PARTIAL_MEDIATYPE* pInTypes;
576
577 hres = read_types(hkey, szDMOInputType, &cInTypes,
578 sizeof(szValue)/sizeof(DMO_PARTIAL_MEDIATYPE),
579 (DMO_PARTIAL_MEDIATYPE*)szValue);
580
581 if (FAILED(hres))
582 {
583 RegCloseKey(hkey);
584 continue;
585 }
586
587 pInTypes = (DMO_PARTIAL_MEDIATYPE *)szValue;
588
589 TRACE("read %d intypes for %s:\n", cInTypes, debugstr_w(szKey));
590 for (i = 0; i < cInTypes; i++) {
591 TRACE("intype %d: type %s, subtype %s\n", i, debugstr_guid(&pInTypes[i].type),
592 debugstr_guid(&pInTypes[i].subtype));
593 }
594
595 for (i = 0; i < This->cInTypes; i++)
596 {
597 for (j = 0; j < cInTypes; j++)
598 {
599 if (IsMediaTypeEqual(&pInTypes[j], &This->pInTypes[i]))
600 break;
601 }
602
603 if (j >= cInTypes)
604 break;
605 }
606
607 if (i < This->cInTypes)
608 {
609 RegCloseKey(hkey);
610 continue;
611 }
612 }
613
614 if (This->pOutTypes)
615 {
616 UINT i, j;
617 DWORD cOutTypes;
618 DMO_PARTIAL_MEDIATYPE* pOutTypes;
619
620 hres = read_types(hkey, szDMOOutputType, &cOutTypes,
621 sizeof(szValue)/sizeof(DMO_PARTIAL_MEDIATYPE),
622 (DMO_PARTIAL_MEDIATYPE*)szValue);
623
624 if (FAILED(hres))
625 {
626 RegCloseKey(hkey);
627 continue;
628 }
629
630 pOutTypes = (DMO_PARTIAL_MEDIATYPE *)szValue;
631
632 TRACE("read %d outtypes for %s:\n", cOutTypes, debugstr_w(szKey));
633 for (i = 0; i < cOutTypes; i++) {
634 TRACE("outtype %d: type %s, subtype %s\n", i, debugstr_guid(&pOutTypes[i].type),
635 debugstr_guid(&pOutTypes[i].subtype));
636 }
637
638 for (i = 0; i < This->cOutTypes; i++)
639 {
640 for (j = 0; j < cOutTypes; j++)
641 {
642 if (IsMediaTypeEqual(&pOutTypes[j], &This->pOutTypes[i]))
643 break;
644 }
645
646 if (j >= cOutTypes)
647 break;
648 }
649
650 if (i < This->cOutTypes)
651 {
652 RegCloseKey(hkey);
653 continue;
654 }
655 }
656
657 /* Media object wasn't filtered so add it to return list */
658 len = MAX_PATH * sizeof(WCHAR);
659 ret = RegQueryValueExW(hkey, NULL, NULL, NULL, (LPBYTE)szValue, &len);
660 if (Names)
661 {
662 Names[count] = NULL;
663 if (ret == ERROR_SUCCESS)
664 {
665 Names[count] = CoTaskMemAlloc((lstrlenW(szValue) + 1) * sizeof(WCHAR));
666 if (Names[count])
667 lstrcpyW(Names[count], szValue);
668 }
669 }
670 wsprintfW(szGuidKey,szToGuidFmt,szNextKey);
671 CLSIDFromString(szGuidKey, &pCLSID[count]);
672
673 TRACE("found match %s %s\n", debugstr_w(szValue), debugstr_w(szNextKey));
674 RegCloseKey(hkey);
675 count++;
676 }
677
678 if (pcItemsFetched) *pcItemsFetched = count;
679 if (count < cItemsToFetch)
680 hres = S_FALSE;
681
682 TRACE("<-- %i found\n",count);
683 return hres;
684}
PWSTR Names[]
#define lstrcpyW
Definition: compat.h:749
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
static const WCHAR szToGuidFmt[]
Definition: dmoreg.c:80
static HRESULT string_to_guid(const WCHAR *string, GUID *guid)
Definition: dmoreg.c:119
static BOOL IsMediaTypeEqual(const DMO_PARTIAL_MEDIATYPE *mt1, const DMO_PARTIAL_MEDIATYPE *mt2)
Definition: dmoreg.c:129
static const WCHAR szCat2Fmt[]
Definition: dmoreg.c:75
@ DMO_ENUMF_INCLUDE_KEYED
Definition: dmoreg.h:37
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 GLint GLint j
Definition: glfuncs.h:250
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
const GUID * guid
unsigned int UINT
Definition: ndis.h:50
#define E_POINTER
Definition: winerror.h:2365

◆ IEnumDMO_fnQueryInterface()

static HRESULT WINAPI IEnumDMO_fnQueryInterface ( IEnumDMO iface,
REFIID  riid,
void **  ppvObj 
)
static

Definition at line 467 of file dmoreg.c.

468{
470
471 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObj);
472
473 *ppvObj = NULL;
474
475 if (IsEqualIID(riid, &IID_IEnumDMO) ||
477 {
478 *ppvObj = iface;
479 IEnumDMO_AddRef(iface);
480 }
481
482 return *ppvObj ? S_OK : E_NOINTERFACE;
483}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ IEnumDMO_fnRelease()

static ULONG WINAPI IEnumDMO_fnRelease ( IEnumDMO iface)
static

Definition at line 488 of file dmoreg.c.

489{
491 ULONG refCount = InterlockedDecrement(&This->ref);
492
493 TRACE("(%p)->(%d)\n", This, refCount);
494
495 if (!refCount)
496 {
497 if (This->hkey)
498 RegCloseKey(This->hkey);
499 HeapFree(GetProcessHeap(), 0, This->pInTypes);
500 HeapFree(GetProcessHeap(), 0, This->pOutTypes);
502 }
503 return refCount;
504}
#define InterlockedDecrement
Definition: armddk.h:52
#define HeapFree(x, y, z)
Definition: compat.h:735

◆ IEnumDMO_fnReset()

static HRESULT WINAPI IEnumDMO_fnReset ( IEnumDMO iface)
static

Definition at line 704 of file dmoreg.c.

705{
707
708 TRACE("(%p)\n", This);
709 This->index = -1;
710
711 return S_OK;
712}

◆ IEnumDMO_fnSkip()

static HRESULT WINAPI IEnumDMO_fnSkip ( IEnumDMO iface,
DWORD  cItemsToSkip 
)
static

Definition at line 690 of file dmoreg.c.

691{
693
694 TRACE("(%p)->(%d)\n", This, cItemsToSkip);
695 This->index += cItemsToSkip;
696
697 return S_OK;
698}

◆ impl_from_IEnumDMO()

static IEnumDMOImpl * impl_from_IEnumDMO ( IEnumDMO iface)
inlinestatic

Definition at line 100 of file dmoreg.c.

101{
102 return CONTAINING_RECORD(iface, IEnumDMOImpl, IEnumDMO_iface);
103}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by IEnumDMO_fnAddRef(), IEnumDMO_fnClone(), IEnumDMO_fnNext(), IEnumDMO_fnQueryInterface(), IEnumDMO_fnRelease(), IEnumDMO_fnReset(), and IEnumDMO_fnSkip().

◆ IsMediaTypeEqual()

static BOOL IsMediaTypeEqual ( const DMO_PARTIAL_MEDIATYPE mt1,
const DMO_PARTIAL_MEDIATYPE mt2 
)
static

Definition at line 129 of file dmoreg.c.

130{
131
132 return (IsEqualCLSID(&mt1->type, &mt2->type) ||
133 IsEqualCLSID(&mt2->type, &GUID_NULL) ||
134 IsEqualCLSID(&mt1->type, &GUID_NULL)) &&
135 (IsEqualCLSID(&mt1->subtype, &mt2->subtype) ||
136 IsEqualCLSID(&mt2->subtype, &GUID_NULL) ||
138}
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96

Referenced by IEnumDMO_fnNext().

◆ read_types()

HRESULT read_types ( HKEY  root,
LPCWSTR  key,
ULONG supplied,
ULONG  requested,
DMO_PARTIAL_MEDIATYPE types 
)
static

Definition at line 778 of file dmoreg.c.

779{
780 HRESULT ret = S_OK;
781
782 if (MSDMO_MAJOR_VERSION > 5)
783 {
784 DWORD len;
785 LONG rc;
786
787 len = requested * sizeof(DMO_PARTIAL_MEDIATYPE);
790
791 *supplied = len / sizeof(DMO_PARTIAL_MEDIATYPE);
792 }
793 else
794 {
795 HKEY hkey;
796 WCHAR szGuidKey[64];
797
798 *supplied = 0;
799 if (ERROR_SUCCESS == RegOpenKeyExW(root, key, 0, KEY_READ, &hkey))
800 {
801 int index = 0;
802 WCHAR szNextKey[MAX_PATH];
803 DWORD len;
804 LONG rc = ERROR_SUCCESS;
805
806 while (rc == ERROR_SUCCESS)
807 {
808 len = MAX_PATH;
809 rc = RegEnumKeyExW(hkey, index, szNextKey, &len, NULL, NULL, NULL, NULL);
810 if (rc == ERROR_SUCCESS)
811 {
812 HKEY subk;
813 int sub_index = 0;
814 LONG rcs = ERROR_SUCCESS;
815 WCHAR szSubKey[MAX_PATH];
816
817 RegOpenKeyExW(hkey, szNextKey, 0, KEY_READ, &subk);
818 while (rcs == ERROR_SUCCESS)
819 {
820 len = MAX_PATH;
821 rcs = RegEnumKeyExW(subk, sub_index, szSubKey, &len, NULL, NULL, NULL, NULL);
822 if (rcs == ERROR_SUCCESS)
823 {
824 if (*supplied >= requested)
825 {
826 /* Bailing */
827 ret = S_FALSE;
828 rc = ERROR_MORE_DATA;
829 rcs = ERROR_MORE_DATA;
830 break;
831 }
832
833 wsprintfW(szGuidKey,szToGuidFmt,szNextKey);
834 CLSIDFromString(szGuidKey, &types[*supplied].type);
835 wsprintfW(szGuidKey,szToGuidFmt,szSubKey);
836 CLSIDFromString(szGuidKey, &types[*supplied].subtype);
837 TRACE("Adding type %s subtype %s at index %i\n",
838 debugstr_guid(&types[*supplied].type),
839 debugstr_guid(&types[*supplied].subtype),
840 *supplied);
841 (*supplied)++;
842 }
843 sub_index++;
844 }
845 index++;
846 }
847 }
848 RegCloseKey(hkey);
849 }
850 }
851 return ret;
852}
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define MSDMO_MAJOR_VERSION
Definition: dmoreg.c:35
struct _DMO_PARTIAL_MEDIATYPE DMO_PARTIAL_MEDIATYPE
Definition: copy.c:22

Referenced by DMOGetTypes(), and IEnumDMO_fnNext().

◆ string_to_guid()

static HRESULT string_to_guid ( const WCHAR string,
GUID guid 
)
static

Definition at line 119 of file dmoreg.c.

120{
121 WCHAR buffer[39];
122 buffer[0] = '{';
123 lstrcpyW(buffer + 1, string);
124 buffer[37] = '}';
125 buffer[38] = 0;
126 return CLSIDFromString(buffer, guid);
127}
GLuint buffer
Definition: glext.h:5915

Referenced by IEnumDMO_fnNext().

◆ unregister_dmo_from_category()

static HRESULT unregister_dmo_from_category ( const WCHAR dmoW,
const WCHAR catW,
HKEY  categories 
)
static

Definition at line 270 of file dmoreg.c.

271{
272 HKEY catkey;
273 LONG ret;
274
275 ret = RegOpenKeyExW(categories, catW, 0, KEY_WRITE, &catkey);
276 if (!ret)
277 {
278 ret = RegDeleteKeyW(catkey, dmoW);
279 RegCloseKey(catkey);
280 }
281
282 return !ret ? S_OK : S_FALSE;
283}
GLsizei GLenum * categories
Definition: glext.h:11561

Referenced by DMOUnregister().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msdmo  )

◆ write_types()

static HRESULT write_types ( HKEY  hkey,
LPCWSTR  name,
const DMO_PARTIAL_MEDIATYPE types,
DWORD  count 
)
static

Definition at line 140 of file dmoreg.c.

141{
142 LONG ret;
143
144 if (MSDMO_MAJOR_VERSION > 5)
145 {
146 ret = RegSetValueExW(hkey, name, 0, REG_BINARY, (const BYTE*) types,
148 }
149 else
150 {
151 HKEY skey1,skey2,skey3;
152 DWORD index = 0;
153 WCHAR szGuidKey[64];
154
156 KEY_WRITE, NULL, &skey1, NULL);
157 if (ret)
158 return HRESULT_FROM_WIN32(ret);
159
160 while (index < count)
161 {
162 GUIDToString(szGuidKey,&types[index].type);
163 ret = RegCreateKeyExW(skey1, szGuidKey, 0, NULL,
165 GUIDToString(szGuidKey,&types[index].subtype);
166 ret = RegCreateKeyExW(skey2, szGuidKey, 0, NULL,
168 RegCloseKey(skey3);
169 RegCloseKey(skey2);
170 index ++;
171 }
172 RegCloseKey(skey1);
173 }
174
175 return HRESULT_FROM_WIN32(ret);
176}
#define REG_BINARY
Definition: nt_native.h:1496

Referenced by DMORegister().

Variable Documentation

◆ edmovt

static const IEnumDMOVtbl edmovt
static
Initial value:
=
{
}
static HRESULT WINAPI IEnumDMO_fnNext(IEnumDMO *iface, DWORD cItemsToFetch, CLSID *pCLSID, WCHAR **Names, DWORD *pcItemsFetched)
Definition: dmoreg.c:510
static HRESULT WINAPI IEnumDMO_fnClone(IEnumDMO *iface, IEnumDMO **ppEnum)
Definition: dmoreg.c:718
static HRESULT WINAPI IEnumDMO_fnReset(IEnumDMO *iface)
Definition: dmoreg.c:704
static HRESULT WINAPI IEnumDMO_fnQueryInterface(IEnumDMO *iface, REFIID riid, void **ppvObj)
Definition: dmoreg.c:467
static HRESULT WINAPI IEnumDMO_fnSkip(IEnumDMO *iface, DWORD cItemsToSkip)
Definition: dmoreg.c:690
static ULONG WINAPI IEnumDMO_fnRelease(IEnumDMO *iface)
Definition: dmoreg.c:488
static ULONG WINAPI IEnumDMO_fnAddRef(IEnumDMO *iface)
Definition: dmoreg.c:456

Definition at line 107 of file dmoreg.c.

Referenced by IEnumDMO_Constructor().

◆ szCat2Fmt

const WCHAR szCat2Fmt[]
static
Initial value:
=
{
'%','s','\\','%','s',0
}

Definition at line 75 of file dmoreg.c.

Referenced by IEnumDMO_fnNext().

◆ szCat3Fmt

const WCHAR szCat3Fmt[]
static
Initial value:
=
{
'%','s','\\','%','s','\\','%','s',0
}

Definition at line 70 of file dmoreg.c.

Referenced by IEnumDMO_Constructor(), and IEnumDMO_fnNext().

◆ szDMOCategories

const WCHAR szDMOCategories[]
static
Initial value:
=
{
'C','a','t','e','g','o','r','i','e','s',0
}

Definition at line 58 of file dmoreg.c.

Referenced by DMORegister(), DMOUnregister(), and IEnumDMO_Constructor().

◆ szDMOInputType

const WCHAR szDMOInputType[]
static
Initial value:
=
{
'I','n','p','u','t','T','y','p','e','s',0
}

Definition at line 43 of file dmoreg.c.

Referenced by DMOGetTypes(), DMORegister(), and IEnumDMO_fnNext().

◆ szDMOKeyed

const WCHAR szDMOKeyed[]
static
Initial value:
=
{
'K','e','y','e','d',0
}

Definition at line 53 of file dmoreg.c.

Referenced by DMORegister(), and IEnumDMO_fnNext().

◆ szDMOOutputType

const WCHAR szDMOOutputType[]
static
Initial value:
=
{
'O','u','t','p','u','t','T','y','p','e','s',0
}

Definition at line 48 of file dmoreg.c.

Referenced by DMOGetTypes(), DMORegister(), and IEnumDMO_fnNext().

◆ szDMORootKey

const WCHAR szDMORootKey[]
static
Initial value:
=
{
'D','i','r','e','c','t','S','h','o','w','\\',
'M','e','d','i','a','O','b','j','e','c','t','s',0
}

Definition at line 37 of file dmoreg.c.

Referenced by DMOGetName(), DMOGetTypes(), DMORegister(), DMOUnregister(), IEnumDMO_Constructor(), and IEnumDMO_fnNext().

◆ szGUIDFmt

const WCHAR szGUIDFmt[]
static
Initial value:
=
{
'%','0','8','X','-','%','0','4','X','-','%','0','4','X','-','%','0',
'2','X','%','0','2','X','-','%','0','2','X','%','0','2','X','%','0','2',
'X','%','0','2','X','%','0','2','X','%','0','2','X',0
}

Definition at line 63 of file dmoreg.c.

Referenced by GUIDToString().

◆ szToGuidFmt

const WCHAR szToGuidFmt[]
static
Initial value:
=
{
'{','%','s','}',0
}

Definition at line 80 of file dmoreg.c.

Referenced by IEnumDMO_fnNext(), and read_types().