33DEFINE_GUID(
GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
50 &IID_ICreateDevEnum, (
LPVOID*)&create_devenum);
53 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_ActiveMovieCategories, &enum_cat, 0);
62 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
69 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
76 IPropertyBag_Release(prop_bag);
79 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &cat_guid, &
enum_moniker, 0);
103 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
105 "Got hr %#lx.\n",
hr);
114 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
120 IUnknown_Release(unk);
124 IUnknown_Release(unk);
125 ok(hr2 ==
hr,
"Expected hr %#lx, got %#lx.\n",
hr, hr2);
132 IPropertyBag_Release(prop_bag);
133 IBindCtx_Release(bindctx);
137 IPropertyBag_Release(prop_bag);
143 ok(
count > 0,
"CreateClassEnumerator() returned S_OK but no devices were enumerated.\n");
147 IEnumMoniker_Release(enum_cat);
148 ICreateDevEnum_Release(create_devenum);
159 &IID_ICreateDevEnum, (
LPVOID*)&create_devenum);
162 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker0, 0);
165 if (IEnumMoniker_Next(enum_moniker0, 1, &moniker0,
NULL) ==
S_OK
166 && IEnumMoniker_Next(enum_moniker0, 1, &moniker1,
NULL) ==
S_OK)
168 hr = IMoniker_IsEqual(moniker0, moniker1);
171 hr = IMoniker_IsEqual(moniker1, moniker0);
174 IMoniker_Release(moniker0);
175 IMoniker_Release(moniker1);
179 skip(
"Cannot get moniker for testing.\n");
181 IEnumMoniker_Release(enum_moniker0);
183 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker0, 0);
185 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_AudioRendererCategory, &enum_moniker1, 0);
188 if (IEnumMoniker_Next(enum_moniker0, 1, &moniker0,
NULL) ==
S_OK
189 && IEnumMoniker_Next(enum_moniker1, 1, &moniker1,
NULL) ==
S_OK)
191 hr = IMoniker_IsEqual(moniker0, moniker1);
194 hr = IMoniker_IsEqual(moniker1, moniker0);
197 IMoniker_Release(moniker0);
198 IMoniker_Release(moniker1);
202 skip(
"Cannot get moniker for testing.\n");
204 IEnumMoniker_Release(enum_moniker0);
205 IEnumMoniker_Release(enum_moniker1);
207 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker0, 0);
209 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker1, 0);
212 if (IEnumMoniker_Next(enum_moniker0, 1, &moniker0,
NULL) ==
S_OK
213 && IEnumMoniker_Next(enum_moniker1, 1, &moniker1,
NULL) ==
S_OK)
215 hr = IMoniker_IsEqual(moniker0, moniker1);
218 hr = IMoniker_IsEqual(moniker1, moniker0);
221 IMoniker_Release(moniker0);
222 IMoniker_Release(moniker1);
226 skip(
"Cannot get moniker for testing.\n");
228 IEnumMoniker_Release(enum_moniker0);
229 IEnumMoniker_Release(enum_moniker1);
231 ICreateDevEnum_Release(create_devenum);
241 CoCreateInstance(&CLSID_SystemDeviceEnum,
NULL, CLSCTX_INPROC, &IID_ICreateDevEnum, (
void **)&devenum);
242 if (ICreateDevEnum_CreateClassEnumerator(devenum,
class, &enum_mon, 0) ==
S_OK)
244 while (!found && IEnumMoniker_Next(enum_mon, 1, &mon,
NULL) ==
S_OK)
246 if (IMoniker_IsEqual(mon, needle) ==
S_OK)
249 IMoniker_Release(mon);
252 IEnumMoniker_Release(enum_mon);
254 ICreateDevEnum_Release(devenum);
258DEFINE_GUID(CLSID_TestFilter, 0xdeadbeef,0xcf51,0x43e6,0xb6,0xc5,0x29,0x9e,0xa8,0xb6,0xb5,0x91);
275 hr = IFilterMapper2_RegisterFilter(mapper2, &CLSID_TestFilter,
L"devenum test", &mon,
NULL,
NULL, &rgf2);
278 skip(
"Not enough permissions to register filters\n");
279 IFilterMapper2_Release(mapper2);
284 ok(
find_moniker(&CLSID_LegacyAmFilterCategory, mon),
"filter should be registered\n");
286 hr = IFilterMapper2_UnregisterFilter(mapper2,
NULL,
NULL, &CLSID_TestFilter);
289 ok(!
find_moniker(&CLSID_LegacyAmFilterCategory, mon),
"filter should not be registered\n");
290 IMoniker_Release(mon);
293 hr = IFilterMapper2_RegisterFilter(mapper2, &CLSID_TestFilter,
L"devenum test", &mon, &CLSID_AudioRendererCategory,
NULL, &rgf2);
296 ok(
find_moniker(&CLSID_AudioRendererCategory, mon),
"filter should be registered\n");
298 hr = IFilterMapper2_UnregisterFilter(mapper2, &CLSID_AudioRendererCategory,
NULL, &CLSID_TestFilter);
301 ok(!
find_moniker(&CLSID_AudioRendererCategory, mon),
"filter should not be registered\n");
302 IMoniker_Release(mon);
304 IFilterMapper2_Release(mapper2);
325#define check_display_name(parser, buffer) check_display_name_(__LINE__, parser, buffer)
349 ok(!
find_moniker(&CLSID_AudioRendererCategory, mon),
"filter should not be registered\n");
355 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
361 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
366 ok(
find_moniker(&CLSID_AudioRendererCategory, mon),
"filter should be registered\n");
370 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
377 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
381 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
387 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
393 hr = IPropertyBag_Write(prop_bag,
L"foobar", &
var);
397 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
403 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
406 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
410 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
416 hr = IPropertyBag_Write(prop_bag,
L"foobar", &
var);
422 memcpy(array_data,
"test data", 10);
424 hr = IPropertyBag_Write(prop_bag,
L"foobar", &
var);
429 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
433 ok(!
memcmp(array_data,
"test data", 10),
"Got wrong data.\n");
436 IMoniker_Release(mon);
443 ok(!
res,
"Failed to delete key, error %Iu.\n",
res);
447 IPropertyBag_Release(prop_bag);
458 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
463 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
469 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
473 IMoniker_Release(mon);
479 ok(!
res,
"Failed to delete key, error %Iu.\n",
res);
483 IPropertyBag_Release(prop_bag);
484 IParseDisplayName_Release(
parser);
508 ok(!
find_moniker(&CLSID_AudioRendererCategory, mon),
"codec should not be registered\n");
514 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
519 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
523 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
528 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
535 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
539 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
546 hr = IPropertyBag_Write(prop_bag,
L"foobar", &
var);
550 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
556 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
559 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
563 hr = IPropertyBag_Read(prop_bag,
L"foobar", &
var,
NULL);
569 hr = IPropertyBag_Write(prop_bag,
L"foobar", &
var);
575 memcpy(array_data,
"test data", 10);
577 hr = IPropertyBag_Write(prop_bag,
L"foobar", &
var);
582 ok(!
find_moniker(&CLSID_AudioRendererCategory, mon),
"codec should not be registered\n");
585 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
588 IPropertyBag_Release(prop_bag);
589 IMoniker_Release(mon);
591 IParseDisplayName_Release(
parser);
616 ok(!
find_moniker(enum_category, mon),
"DMO should not be registered\n");
622 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
627 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
635 ok(
find_moniker(enum_category, mon),
"DMO should be registered\n");
638 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
645 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
649 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
655 IPropertyBag_Release(prop_bag);
656 IMoniker_Release(mon);
667 ok(
find_moniker(&DMOCATEGORY_AUDIO_DECODER, mon),
"DMO was not found.\n");
673 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
680 hr = IPropertyBag_Write(prop_bag,
L"FriendlyName", &
var);
684 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
687 IPropertyBag_Release(prop_bag);
697 hr = IBaseFilter_QueryInterface(
filter, &IID_IMediaObject, (
void **)&dmo);
699 IMediaObject_Release(dmo);
701 IBaseFilter_Release(
filter);
703 IEnumDMO_Release(enumdmo);
705 IParseDisplayName_Release(
parser);
712 IFilterMapper *mapper;
724 hr = IFilterMapper_RegisterFilter(mapper, CLSID_TestFilter,
L"test", 0xdeadbeef);
727 win_skip(
"not enough permissions to register filters\n");
738 ok(
find_moniker(&CLSID_LegacyAmFilterCategory, mon),
"filter should be registered\n");
744 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
752 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
758 IPropertyBag_Release(prop_bag);
760 hr = IFilterMapper_UnregisterFilter(mapper, CLSID_TestFilter);
763 ok(!
find_moniker(&CLSID_LegacyAmFilterCategory, mon),
"filter should not be registered\n");
764 IMoniker_Release(mon);
767 IFilterMapper_Release(mapper);
768 IParseDisplayName_Release(
parser);
806 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
810 IPropertyBag_Release(prop_bag);
811 IMoniker_Release(mon);
824 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
832 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
840 hr = IPropertyBag_Read(prop_bag,
L"DSGuid", &
var,
NULL);
848 IPropertyBag_Release(prop_bag);
849 IMoniker_Release(mon);
850 IParseDisplayName_Release(
parser);
878 name =
L"Default WaveOut Device";
893 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
896 IPropertyBag_Release(prop_bag);
897 IMoniker_Release(mon);
902 ok(!mmr,
"waveOutMessage failed: %u\n", mmr);
914 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
922 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
930 hr = IPropertyBag_Read(prop_bag,
L"WaveOutId", &
var,
NULL);
935 IPropertyBag_Release(prop_bag);
936 IMoniker_Release(mon);
939 IParseDisplayName_Release(
parser);
975 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
978 IPropertyBag_Release(prop_bag);
979 IMoniker_Release(mon);
984 ok(!mmr,
"waveInMessage failed: %u\n", mmr);
996 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
1004 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
1012 hr = IPropertyBag_Read(prop_bag,
L"WaveInId", &
var,
NULL);
1017 IPropertyBag_Release(prop_bag);
1018 IMoniker_Release(mon);
1021 IParseDisplayName_Release(
parser);
1046 name =
L"Default MidiOut Device";
1061 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
1068 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
1076 hr = IPropertyBag_Read(prop_bag,
L"MidiOutId", &
var,
NULL);
1081 IPropertyBag_Release(prop_bag);
1082 IMoniker_Release(mon);
1085 IParseDisplayName_Release(
parser);
1100 if (
broken(
sizeof(
void *) == 8))
1102 win_skip(
"VFW codecs are not enumerated on 64-bit Windows\n");
1129 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
1136 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
1144 hr = IPropertyBag_Read(prop_bag,
L"FccHandler", &
var,
NULL);
1150 IPropertyBag_Release(prop_bag);
1151 IMoniker_Release(mon);
1154 IParseDisplayName_Release(
parser);
1170 hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_VideoInputDeviceCategory, &mon, 0);
1173 skip(
"No video capture devices present.\n");
1174 ICreateDevEnum_Release(create_devenum);
1186 hr = IPropertyBag_Read(prop_bag,
L"CLSID", &
var,
NULL);
1193 hr = IPropertyBag_Read(prop_bag,
L"FriendlyName", &
var,
NULL);
1197 hr = IPropertyBag_Read(prop_bag,
L"DevicePath", &
var,
NULL);
1201 IPropertyBag_Release(prop_bag);
1205 IEnumMoniker_Release(mon);
1206 ICreateDevEnum_Release(create_devenum);
1220 test_dmo(&DMOCATEGORY_AUDIO_DECODER, &CLSID_LegacyAmFilterCategory);
1221 test_dmo(&DMOCATEGORY_VIDEO_DECODER, &CLSID_LegacyAmFilterCategory);
1222 test_dmo(&DMOCATEGORY_VIDEO_DECODER, &DMOCATEGORY_VIDEO_DECODER);
const GUID IID_IBaseFilter
HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW lpDSEnumCallback, LPVOID lpContext)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void WINAPI CoTaskMemFree(void *ptr)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData)
HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY *psa)
SAFEARRAY *WINAPI SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound)
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 DMORegister(LPCWSTR szName, REFCLSID clsidDMO, REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes)
HRESULT WINAPI DMOUnregister(REFCLSID dmo, REFGUID category)
GLuint GLuint GLsizei count
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
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
D3D11_SHADER_VARIABLE_DESC desc
static void test_devenum(void)
static void test_midiout(void)
static void test_legacy_filter(void)
#define check_display_name(parser, buffer)
static void test_video_input(void)
static void test_register_filter(void)
static void test_moniker_isequal(void)
static IMoniker * check_display_name_(int line, IParseDisplayName *parser, WCHAR *buffer)
static void test_wavein(void)
static BOOL find_moniker(const GUID *class, IMoniker *needle)
static void test_codec(void)
static void test_directshow_filter(void)
static void test_vfw(void)
static void test_waveout(void)
static BOOL CALLBACK test_dsound(GUID *guid, const WCHAR *desc, const WCHAR *module, void *context)
static void test_dmo(void)
HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode)
LRESULT VFWAPI ICGetInfo(HIC hic, ICINFO *picinfo, DWORD cb)
BOOL VFWAPI ICInfo(DWORD type, DWORD handler, ICINFO *info)
LRESULT WINAPI ICClose(HIC hic)
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
BSTR WINAPI SysAllocString(LPCOLESTR str)
const GUID IID_IParseDisplayName
const GUID IID_IPropertyBag
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
#define IsEqualGUID(rguid1, rguid2)
#define DRV_QUERYFUNCTIONINSTANCEID
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define ERROR_KEY_DOES_NOT_EXIST
WCHAR szPname[MAXPNAMELEN]
WCHAR szPname[MAXPNAMELEN]
WCHAR szPname[MAXPNAMELEN]
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
UINT WINAPI midiOutGetNumDevs(void)
UINT WINAPI waveOutGetNumDevs(void)
UINT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW lpCaps, UINT uSize)
UINT WINAPI waveInGetNumDevs(void)
UINT WINAPI midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpCaps, UINT uSize)
UINT WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
UINT WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
UINT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSize)
#define HKEY_CLASSES_ROOT