1 /*** Autogenerated by WIDL 3.19 from include/mmdeviceapi.idl - Do not edit ***/
2 
3 #ifndef __REQUIRED_RPCNDR_H_VERSION__
4 #define __REQUIRED_RPCNDR_H_VERSION__ 475
5 #endif
6 
7 #include <rpc.h>
8 #include <rpcndr.h>
9 
10 #ifndef COM_NO_WINDOWS_H
11 #include <windows.h>
12 #include <ole2.h>
13 #endif
14 
15 #ifndef __mmdeviceapi_h__
16 #define __mmdeviceapi_h__
17 
18 /* Forward declarations */
19 
20 #ifndef __IMMNotificationClient_FWD_DEFINED__
21 #define __IMMNotificationClient_FWD_DEFINED__
22 typedef interface IMMNotificationClient IMMNotificationClient;
23 #ifdef __cplusplus
24 interface IMMNotificationClient;
25 #endif /* __cplusplus */
26 #endif
27 
28 #ifndef __IMMDevice_FWD_DEFINED__
29 #define __IMMDevice_FWD_DEFINED__
30 typedef interface IMMDevice IMMDevice;
31 #ifdef __cplusplus
32 interface IMMDevice;
33 #endif /* __cplusplus */
34 #endif
35 
36 #ifndef __IMMDeviceCollection_FWD_DEFINED__
37 #define __IMMDeviceCollection_FWD_DEFINED__
38 typedef interface IMMDeviceCollection IMMDeviceCollection;
39 #ifdef __cplusplus
40 interface IMMDeviceCollection;
41 #endif /* __cplusplus */
42 #endif
43 
44 #ifndef __IMMEndpoint_FWD_DEFINED__
45 #define __IMMEndpoint_FWD_DEFINED__
46 typedef interface IMMEndpoint IMMEndpoint;
47 #ifdef __cplusplus
48 interface IMMEndpoint;
49 #endif /* __cplusplus */
50 #endif
51 
52 #ifndef __IMMDeviceEnumerator_FWD_DEFINED__
53 #define __IMMDeviceEnumerator_FWD_DEFINED__
54 typedef interface IMMDeviceEnumerator IMMDeviceEnumerator;
55 #ifdef __cplusplus
56 interface IMMDeviceEnumerator;
57 #endif /* __cplusplus */
58 #endif
59 
60 #ifndef __IMMDeviceActivator_FWD_DEFINED__
61 #define __IMMDeviceActivator_FWD_DEFINED__
62 typedef interface IMMDeviceActivator IMMDeviceActivator;
63 #ifdef __cplusplus
64 interface IMMDeviceActivator;
65 #endif /* __cplusplus */
66 #endif
67 
68 #ifndef __MMDeviceEnumerator_FWD_DEFINED__
69 #define __MMDeviceEnumerator_FWD_DEFINED__
70 #ifdef __cplusplus
71 typedef class MMDeviceEnumerator MMDeviceEnumerator;
72 #else
73 typedef struct MMDeviceEnumerator MMDeviceEnumerator;
74 #endif /* defined __cplusplus */
75 #endif /* defined __MMDeviceEnumerator_FWD_DEFINED__ */
76 
77 /* Headers for imported files */
78 
79 #include <unknwn.h>
80 #include <propsys.h>
81 
82 #ifdef __cplusplus
83 extern "C" {
84 #endif
85 
86 #ifndef E_NOTFOUND
87 #define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
88 #endif
89 #ifndef E_UNSUPPORTED_TYPE
90 #define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)
91 #endif
92 #define DEVICE_STATE_ACTIVE 0x1
93 #define DEVICE_STATE_DISABLED 0x2
94 #define DEVICE_STATE_NOTPRESENT 0x4
95 #define DEVICE_STATE_UNPLUGGED 0x8
96 #define DEVICE_STATEMASK_ALL 0xf
97 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,0);
98 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,1);
99 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,2);
100 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,3);
101 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,4);
102 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,5);
103 #define ENDPOINT_SYSFX_ENABLED 0
104 #define ENDPOINT_SYSFX_DISABLED 1
105 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,6);
106 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Supports_EventDriven_Mode,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,7);
107 DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_JackSubType,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,8);
108 DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat,0xf19f064d,0x082c,0x4e27,0xbc,0x73,0x68,0x82,0xa1,0xbb,0x8e,0x4c,0);
109 DEFINE_PROPERTYKEY(PKEY_AudioEngine_OEMFormat,0xe4870e26,0x3cc5,0x4cd2,0xba,0x46,0xca,0x0a,0x9a,0x70,0xed,0x04,3);
110 typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS {
111     DWORD cbDirectXAudioActivationParams;
112     GUID guidAudioSession;
113     DWORD dwAudioStreamFlags;
114 } DIRECTX_AUDIO_ACTIVATION_PARAMS;
115 typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS *PDIRECTX_AUDIO_ACTIVATION_PARAMS;
116 typedef enum _EDataFlow {
117     eRender = 0,
118     eCapture = 1,
119     eAll = 2,
120     EDataFlow_enum_count = 3
121 } EDataFlow;
122 typedef enum _ERole {
123     eConsole = 0,
124     eMultimedia = 1,
125     eCommunications = 2,
126     ERole_enum_count = 3
127 } ERole;
128 typedef enum _EndpointFormFactor {
129     RemoteNetworkDevice = 0,
130     Speakers = 1,
131     LineLevel = 2,
132     Headphones = 3,
133     Microphone = 4,
134     Headset = 5,
135     Handset = 6,
136     UnknownDigitalPassthrough = 7,
137     SPDIF = 8,
138     DigitalAudioDisplayDevice = 9,
139     UnknownFormFactor = 10,
140     EndpointFormFactor_enum_count = 11
141 } EndpointFormFactor;
142 #define HDMI DigitalAudioDisplayDevice
143 /*****************************************************************************
144  * IMMNotificationClient interface
145  */
146 #ifndef __IMMNotificationClient_INTERFACE_DEFINED__
147 #define __IMMNotificationClient_INTERFACE_DEFINED__
148 
149 DEFINE_GUID(IID_IMMNotificationClient, 0x7991eec9, 0x7e89, 0x4d85, 0x83,0x90, 0x6c,0x70,0x3c,0xec,0x60,0xc0);
150 #if defined(__cplusplus) && !defined(CINTERFACE)
151 MIDL_INTERFACE("7991eec9-7e89-4d85-8390-6c703cec60c0")
152 IMMNotificationClient : public IUnknown
153 {
154     virtual HRESULT STDMETHODCALLTYPE OnDeviceStateChanged(
155         LPCWSTR pwstrDeviceId,
156         DWORD dwNewState) = 0;
157 
158     virtual HRESULT STDMETHODCALLTYPE OnDeviceAdded(
159         LPCWSTR pwstrDeviceId) = 0;
160 
161     virtual HRESULT STDMETHODCALLTYPE OnDeviceRemoved(
162         LPCWSTR pwstrDeviceId) = 0;
163 
164     virtual HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged(
165         EDataFlow flow,
166         ERole role,
167         LPCWSTR pwstrDeviceId) = 0;
168 
169     virtual HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(
170         LPCWSTR pwstrDeviceId,
171         const PROPERTYKEY key) = 0;
172 
173 };
174 #ifdef __CRT_UUID_DECL
175 __CRT_UUID_DECL(IMMNotificationClient, 0x7991eec9, 0x7e89, 0x4d85, 0x83,0x90, 0x6c,0x70,0x3c,0xec,0x60,0xc0)
176 #endif
177 #else
178 typedef struct IMMNotificationClientVtbl {
179     BEGIN_INTERFACE
180 
181     /*** IUnknown methods ***/
182     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
183         IMMNotificationClient *This,
184         REFIID riid,
185         void **ppvObject);
186 
187     ULONG (STDMETHODCALLTYPE *AddRef)(
188         IMMNotificationClient *This);
189 
190     ULONG (STDMETHODCALLTYPE *Release)(
191         IMMNotificationClient *This);
192 
193     /*** IMMNotificationClient methods ***/
194     HRESULT (STDMETHODCALLTYPE *OnDeviceStateChanged)(
195         IMMNotificationClient *This,
196         LPCWSTR pwstrDeviceId,
197         DWORD dwNewState);
198 
199     HRESULT (STDMETHODCALLTYPE *OnDeviceAdded)(
200         IMMNotificationClient *This,
201         LPCWSTR pwstrDeviceId);
202 
203     HRESULT (STDMETHODCALLTYPE *OnDeviceRemoved)(
204         IMMNotificationClient *This,
205         LPCWSTR pwstrDeviceId);
206 
207     HRESULT (STDMETHODCALLTYPE *OnDefaultDeviceChanged)(
208         IMMNotificationClient *This,
209         EDataFlow flow,
210         ERole role,
211         LPCWSTR pwstrDeviceId);
212 
213     HRESULT (STDMETHODCALLTYPE *OnPropertyValueChanged)(
214         IMMNotificationClient *This,
215         LPCWSTR pwstrDeviceId,
216         const PROPERTYKEY key);
217 
218     END_INTERFACE
219 } IMMNotificationClientVtbl;
220 
221 interface IMMNotificationClient {
222     CONST_VTBL IMMNotificationClientVtbl* lpVtbl;
223 };
224 
225 #ifdef COBJMACROS
226 #ifndef WIDL_C_INLINE_WRAPPERS
227 /*** IUnknown methods ***/
228 #define IMMNotificationClient_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
229 #define IMMNotificationClient_AddRef(This) (This)->lpVtbl->AddRef(This)
230 #define IMMNotificationClient_Release(This) (This)->lpVtbl->Release(This)
231 /*** IMMNotificationClient methods ***/
232 #define IMMNotificationClient_OnDeviceStateChanged(This,pwstrDeviceId,dwNewState) (This)->lpVtbl->OnDeviceStateChanged(This,pwstrDeviceId,dwNewState)
233 #define IMMNotificationClient_OnDeviceAdded(This,pwstrDeviceId) (This)->lpVtbl->OnDeviceAdded(This,pwstrDeviceId)
234 #define IMMNotificationClient_OnDeviceRemoved(This,pwstrDeviceId) (This)->lpVtbl->OnDeviceRemoved(This,pwstrDeviceId)
235 #define IMMNotificationClient_OnDefaultDeviceChanged(This,flow,role,pwstrDeviceId) (This)->lpVtbl->OnDefaultDeviceChanged(This,flow,role,pwstrDeviceId)
236 #define IMMNotificationClient_OnPropertyValueChanged(This,pwstrDeviceId,key) (This)->lpVtbl->OnPropertyValueChanged(This,pwstrDeviceId,key)
237 #else
238 /*** IUnknown methods ***/
239 static FORCEINLINE HRESULT IMMNotificationClient_QueryInterface(IMMNotificationClient* This,REFIID riid,void **ppvObject) {
240     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
241 }
242 static FORCEINLINE ULONG IMMNotificationClient_AddRef(IMMNotificationClient* This) {
243     return This->lpVtbl->AddRef(This);
244 }
245 static FORCEINLINE ULONG IMMNotificationClient_Release(IMMNotificationClient* This) {
246     return This->lpVtbl->Release(This);
247 }
248 /*** IMMNotificationClient methods ***/
249 static FORCEINLINE HRESULT IMMNotificationClient_OnDeviceStateChanged(IMMNotificationClient* This,LPCWSTR pwstrDeviceId,DWORD dwNewState) {
250     return This->lpVtbl->OnDeviceStateChanged(This,pwstrDeviceId,dwNewState);
251 }
252 static FORCEINLINE HRESULT IMMNotificationClient_OnDeviceAdded(IMMNotificationClient* This,LPCWSTR pwstrDeviceId) {
253     return This->lpVtbl->OnDeviceAdded(This,pwstrDeviceId);
254 }
255 static FORCEINLINE HRESULT IMMNotificationClient_OnDeviceRemoved(IMMNotificationClient* This,LPCWSTR pwstrDeviceId) {
256     return This->lpVtbl->OnDeviceRemoved(This,pwstrDeviceId);
257 }
258 static FORCEINLINE HRESULT IMMNotificationClient_OnDefaultDeviceChanged(IMMNotificationClient* This,EDataFlow flow,ERole role,LPCWSTR pwstrDeviceId) {
259     return This->lpVtbl->OnDefaultDeviceChanged(This,flow,role,pwstrDeviceId);
260 }
261 static FORCEINLINE HRESULT IMMNotificationClient_OnPropertyValueChanged(IMMNotificationClient* This,LPCWSTR pwstrDeviceId,const PROPERTYKEY key) {
262     return This->lpVtbl->OnPropertyValueChanged(This,pwstrDeviceId,key);
263 }
264 #endif
265 #endif
266 
267 #endif
268 
269 
270 #endif  /* __IMMNotificationClient_INTERFACE_DEFINED__ */
271 
272 /*****************************************************************************
273  * IMMDevice interface
274  */
275 #ifndef __IMMDevice_INTERFACE_DEFINED__
276 #define __IMMDevice_INTERFACE_DEFINED__
277 
278 DEFINE_GUID(IID_IMMDevice, 0xd666063f, 0x1587, 0x4e43, 0x81,0xf1, 0xb9,0x48,0xe8,0x07,0x36,0x3f);
279 #if defined(__cplusplus) && !defined(CINTERFACE)
280 MIDL_INTERFACE("d666063f-1587-4e43-81f1-b948e807363f")
281 IMMDevice : public IUnknown
282 {
283     virtual HRESULT STDMETHODCALLTYPE Activate(
284         REFIID iid,
285         DWORD dwClsCtx,
286         PROPVARIANT *pActivationParams,
287         void **ppv) = 0;
288 
289     virtual HRESULT STDMETHODCALLTYPE OpenPropertyStore(
290         DWORD stgmAccess,
291         IPropertyStore **ppProperties) = 0;
292 
293     virtual HRESULT STDMETHODCALLTYPE GetId(
294         LPWSTR *ppstrId) = 0;
295 
296     virtual HRESULT STDMETHODCALLTYPE GetState(
297         DWORD *pdwState) = 0;
298 
299 };
300 #ifdef __CRT_UUID_DECL
301 __CRT_UUID_DECL(IMMDevice, 0xd666063f, 0x1587, 0x4e43, 0x81,0xf1, 0xb9,0x48,0xe8,0x07,0x36,0x3f)
302 #endif
303 #else
304 typedef struct IMMDeviceVtbl {
305     BEGIN_INTERFACE
306 
307     /*** IUnknown methods ***/
308     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
309         IMMDevice *This,
310         REFIID riid,
311         void **ppvObject);
312 
313     ULONG (STDMETHODCALLTYPE *AddRef)(
314         IMMDevice *This);
315 
316     ULONG (STDMETHODCALLTYPE *Release)(
317         IMMDevice *This);
318 
319     /*** IMMDevice methods ***/
320     HRESULT (STDMETHODCALLTYPE *Activate)(
321         IMMDevice *This,
322         REFIID iid,
323         DWORD dwClsCtx,
324         PROPVARIANT *pActivationParams,
325         void **ppv);
326 
327     HRESULT (STDMETHODCALLTYPE *OpenPropertyStore)(
328         IMMDevice *This,
329         DWORD stgmAccess,
330         IPropertyStore **ppProperties);
331 
332     HRESULT (STDMETHODCALLTYPE *GetId)(
333         IMMDevice *This,
334         LPWSTR *ppstrId);
335 
336     HRESULT (STDMETHODCALLTYPE *GetState)(
337         IMMDevice *This,
338         DWORD *pdwState);
339 
340     END_INTERFACE
341 } IMMDeviceVtbl;
342 
343 interface IMMDevice {
344     CONST_VTBL IMMDeviceVtbl* lpVtbl;
345 };
346 
347 #ifdef COBJMACROS
348 #ifndef WIDL_C_INLINE_WRAPPERS
349 /*** IUnknown methods ***/
350 #define IMMDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
351 #define IMMDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
352 #define IMMDevice_Release(This) (This)->lpVtbl->Release(This)
353 /*** IMMDevice methods ***/
354 #define IMMDevice_Activate(This,iid,dwClsCtx,pActivationParams,ppv) (This)->lpVtbl->Activate(This,iid,dwClsCtx,pActivationParams,ppv)
355 #define IMMDevice_OpenPropertyStore(This,stgmAccess,ppProperties) (This)->lpVtbl->OpenPropertyStore(This,stgmAccess,ppProperties)
356 #define IMMDevice_GetId(This,ppstrId) (This)->lpVtbl->GetId(This,ppstrId)
357 #define IMMDevice_GetState(This,pdwState) (This)->lpVtbl->GetState(This,pdwState)
358 #else
359 /*** IUnknown methods ***/
360 static FORCEINLINE HRESULT IMMDevice_QueryInterface(IMMDevice* This,REFIID riid,void **ppvObject) {
361     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
362 }
363 static FORCEINLINE ULONG IMMDevice_AddRef(IMMDevice* This) {
364     return This->lpVtbl->AddRef(This);
365 }
366 static FORCEINLINE ULONG IMMDevice_Release(IMMDevice* This) {
367     return This->lpVtbl->Release(This);
368 }
369 /*** IMMDevice methods ***/
370 static FORCEINLINE HRESULT IMMDevice_Activate(IMMDevice* This,REFIID iid,DWORD dwClsCtx,PROPVARIANT *pActivationParams,void **ppv) {
371     return This->lpVtbl->Activate(This,iid,dwClsCtx,pActivationParams,ppv);
372 }
373 static FORCEINLINE HRESULT IMMDevice_OpenPropertyStore(IMMDevice* This,DWORD stgmAccess,IPropertyStore **ppProperties) {
374     return This->lpVtbl->OpenPropertyStore(This,stgmAccess,ppProperties);
375 }
376 static FORCEINLINE HRESULT IMMDevice_GetId(IMMDevice* This,LPWSTR *ppstrId) {
377     return This->lpVtbl->GetId(This,ppstrId);
378 }
379 static FORCEINLINE HRESULT IMMDevice_GetState(IMMDevice* This,DWORD *pdwState) {
380     return This->lpVtbl->GetState(This,pdwState);
381 }
382 #endif
383 #endif
384 
385 #endif
386 
387 
388 #endif  /* __IMMDevice_INTERFACE_DEFINED__ */
389 
390 /*****************************************************************************
391  * IMMDeviceCollection interface
392  */
393 #ifndef __IMMDeviceCollection_INTERFACE_DEFINED__
394 #define __IMMDeviceCollection_INTERFACE_DEFINED__
395 
396 DEFINE_GUID(IID_IMMDeviceCollection, 0x0bd7a1be, 0x7a1a, 0x44db, 0x83,0x97, 0xcc,0x53,0x92,0x38,0x7b,0x5e);
397 #if defined(__cplusplus) && !defined(CINTERFACE)
398 MIDL_INTERFACE("0bd7a1be-7a1a-44db-8397-cc5392387b5e")
399 IMMDeviceCollection : public IUnknown
400 {
401     virtual HRESULT STDMETHODCALLTYPE GetCount(
402         UINT *pcDevices) = 0;
403 
404     virtual HRESULT STDMETHODCALLTYPE Item(
405         UINT nDevice,
406         IMMDevice **ppdevice) = 0;
407 
408 };
409 #ifdef __CRT_UUID_DECL
410 __CRT_UUID_DECL(IMMDeviceCollection, 0x0bd7a1be, 0x7a1a, 0x44db, 0x83,0x97, 0xcc,0x53,0x92,0x38,0x7b,0x5e)
411 #endif
412 #else
413 typedef struct IMMDeviceCollectionVtbl {
414     BEGIN_INTERFACE
415 
416     /*** IUnknown methods ***/
417     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
418         IMMDeviceCollection *This,
419         REFIID riid,
420         void **ppvObject);
421 
422     ULONG (STDMETHODCALLTYPE *AddRef)(
423         IMMDeviceCollection *This);
424 
425     ULONG (STDMETHODCALLTYPE *Release)(
426         IMMDeviceCollection *This);
427 
428     /*** IMMDeviceCollection methods ***/
429     HRESULT (STDMETHODCALLTYPE *GetCount)(
430         IMMDeviceCollection *This,
431         UINT *pcDevices);
432 
433     HRESULT (STDMETHODCALLTYPE *Item)(
434         IMMDeviceCollection *This,
435         UINT nDevice,
436         IMMDevice **ppdevice);
437 
438     END_INTERFACE
439 } IMMDeviceCollectionVtbl;
440 
441 interface IMMDeviceCollection {
442     CONST_VTBL IMMDeviceCollectionVtbl* lpVtbl;
443 };
444 
445 #ifdef COBJMACROS
446 #ifndef WIDL_C_INLINE_WRAPPERS
447 /*** IUnknown methods ***/
448 #define IMMDeviceCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
449 #define IMMDeviceCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
450 #define IMMDeviceCollection_Release(This) (This)->lpVtbl->Release(This)
451 /*** IMMDeviceCollection methods ***/
452 #define IMMDeviceCollection_GetCount(This,pcDevices) (This)->lpVtbl->GetCount(This,pcDevices)
453 #define IMMDeviceCollection_Item(This,nDevice,ppdevice) (This)->lpVtbl->Item(This,nDevice,ppdevice)
454 #else
455 /*** IUnknown methods ***/
456 static FORCEINLINE HRESULT IMMDeviceCollection_QueryInterface(IMMDeviceCollection* This,REFIID riid,void **ppvObject) {
457     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
458 }
459 static FORCEINLINE ULONG IMMDeviceCollection_AddRef(IMMDeviceCollection* This) {
460     return This->lpVtbl->AddRef(This);
461 }
462 static FORCEINLINE ULONG IMMDeviceCollection_Release(IMMDeviceCollection* This) {
463     return This->lpVtbl->Release(This);
464 }
465 /*** IMMDeviceCollection methods ***/
466 static FORCEINLINE HRESULT IMMDeviceCollection_GetCount(IMMDeviceCollection* This,UINT *pcDevices) {
467     return This->lpVtbl->GetCount(This,pcDevices);
468 }
469 static FORCEINLINE HRESULT IMMDeviceCollection_Item(IMMDeviceCollection* This,UINT nDevice,IMMDevice **ppdevice) {
470     return This->lpVtbl->Item(This,nDevice,ppdevice);
471 }
472 #endif
473 #endif
474 
475 #endif
476 
477 
478 #endif  /* __IMMDeviceCollection_INTERFACE_DEFINED__ */
479 
480 /*****************************************************************************
481  * IMMEndpoint interface
482  */
483 #ifndef __IMMEndpoint_INTERFACE_DEFINED__
484 #define __IMMEndpoint_INTERFACE_DEFINED__
485 
486 DEFINE_GUID(IID_IMMEndpoint, 0x1be09788, 0x6894, 0x4089, 0x85,0x86, 0x9a,0x2a,0x6c,0x26,0x5a,0xc5);
487 #if defined(__cplusplus) && !defined(CINTERFACE)
488 MIDL_INTERFACE("1be09788-6894-4089-8586-9a2a6c265ac5")
489 IMMEndpoint : public IUnknown
490 {
491     virtual HRESULT STDMETHODCALLTYPE GetDataFlow(
492         EDataFlow *pDataFlow) = 0;
493 
494 };
495 #ifdef __CRT_UUID_DECL
496 __CRT_UUID_DECL(IMMEndpoint, 0x1be09788, 0x6894, 0x4089, 0x85,0x86, 0x9a,0x2a,0x6c,0x26,0x5a,0xc5)
497 #endif
498 #else
499 typedef struct IMMEndpointVtbl {
500     BEGIN_INTERFACE
501 
502     /*** IUnknown methods ***/
503     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
504         IMMEndpoint *This,
505         REFIID riid,
506         void **ppvObject);
507 
508     ULONG (STDMETHODCALLTYPE *AddRef)(
509         IMMEndpoint *This);
510 
511     ULONG (STDMETHODCALLTYPE *Release)(
512         IMMEndpoint *This);
513 
514     /*** IMMEndpoint methods ***/
515     HRESULT (STDMETHODCALLTYPE *GetDataFlow)(
516         IMMEndpoint *This,
517         EDataFlow *pDataFlow);
518 
519     END_INTERFACE
520 } IMMEndpointVtbl;
521 
522 interface IMMEndpoint {
523     CONST_VTBL IMMEndpointVtbl* lpVtbl;
524 };
525 
526 #ifdef COBJMACROS
527 #ifndef WIDL_C_INLINE_WRAPPERS
528 /*** IUnknown methods ***/
529 #define IMMEndpoint_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
530 #define IMMEndpoint_AddRef(This) (This)->lpVtbl->AddRef(This)
531 #define IMMEndpoint_Release(This) (This)->lpVtbl->Release(This)
532 /*** IMMEndpoint methods ***/
533 #define IMMEndpoint_GetDataFlow(This,pDataFlow) (This)->lpVtbl->GetDataFlow(This,pDataFlow)
534 #else
535 /*** IUnknown methods ***/
536 static FORCEINLINE HRESULT IMMEndpoint_QueryInterface(IMMEndpoint* This,REFIID riid,void **ppvObject) {
537     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
538 }
539 static FORCEINLINE ULONG IMMEndpoint_AddRef(IMMEndpoint* This) {
540     return This->lpVtbl->AddRef(This);
541 }
542 static FORCEINLINE ULONG IMMEndpoint_Release(IMMEndpoint* This) {
543     return This->lpVtbl->Release(This);
544 }
545 /*** IMMEndpoint methods ***/
546 static FORCEINLINE HRESULT IMMEndpoint_GetDataFlow(IMMEndpoint* This,EDataFlow *pDataFlow) {
547     return This->lpVtbl->GetDataFlow(This,pDataFlow);
548 }
549 #endif
550 #endif
551 
552 #endif
553 
554 
555 #endif  /* __IMMEndpoint_INTERFACE_DEFINED__ */
556 
557 /*****************************************************************************
558  * IMMDeviceEnumerator interface
559  */
560 #ifndef __IMMDeviceEnumerator_INTERFACE_DEFINED__
561 #define __IMMDeviceEnumerator_INTERFACE_DEFINED__
562 
563 DEFINE_GUID(IID_IMMDeviceEnumerator, 0xa95664d2, 0x9614, 0x4f35, 0xa7,0x46, 0xde,0x8d,0xb6,0x36,0x17,0xe6);
564 #if defined(__cplusplus) && !defined(CINTERFACE)
565 MIDL_INTERFACE("a95664d2-9614-4f35-a746-de8db63617e6")
566 IMMDeviceEnumerator : public IUnknown
567 {
568     virtual HRESULT STDMETHODCALLTYPE EnumAudioEndpoints(
569         EDataFlow dataFlow,
570         DWORD dwStateMask,
571         IMMDeviceCollection **ppDevices) = 0;
572 
573     virtual HRESULT STDMETHODCALLTYPE GetDefaultAudioEndpoint(
574         EDataFlow dataFlow,
575         ERole role,
576         IMMDevice **ppEndpoint) = 0;
577 
578     virtual HRESULT STDMETHODCALLTYPE GetDevice(
579         LPCWSTR pwstrId,
580         IMMDevice **ppDevice) = 0;
581 
582     virtual HRESULT STDMETHODCALLTYPE RegisterEndpointNotificationCallback(
583         IMMNotificationClient *pClient) = 0;
584 
585     virtual HRESULT STDMETHODCALLTYPE UnregisterEndpointNotificationCallback(
586         IMMNotificationClient *pClient) = 0;
587 
588 };
589 #ifdef __CRT_UUID_DECL
590 __CRT_UUID_DECL(IMMDeviceEnumerator, 0xa95664d2, 0x9614, 0x4f35, 0xa7,0x46, 0xde,0x8d,0xb6,0x36,0x17,0xe6)
591 #endif
592 #else
593 typedef struct IMMDeviceEnumeratorVtbl {
594     BEGIN_INTERFACE
595 
596     /*** IUnknown methods ***/
597     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
598         IMMDeviceEnumerator *This,
599         REFIID riid,
600         void **ppvObject);
601 
602     ULONG (STDMETHODCALLTYPE *AddRef)(
603         IMMDeviceEnumerator *This);
604 
605     ULONG (STDMETHODCALLTYPE *Release)(
606         IMMDeviceEnumerator *This);
607 
608     /*** IMMDeviceEnumerator methods ***/
609     HRESULT (STDMETHODCALLTYPE *EnumAudioEndpoints)(
610         IMMDeviceEnumerator *This,
611         EDataFlow dataFlow,
612         DWORD dwStateMask,
613         IMMDeviceCollection **ppDevices);
614 
615     HRESULT (STDMETHODCALLTYPE *GetDefaultAudioEndpoint)(
616         IMMDeviceEnumerator *This,
617         EDataFlow dataFlow,
618         ERole role,
619         IMMDevice **ppEndpoint);
620 
621     HRESULT (STDMETHODCALLTYPE *GetDevice)(
622         IMMDeviceEnumerator *This,
623         LPCWSTR pwstrId,
624         IMMDevice **ppDevice);
625 
626     HRESULT (STDMETHODCALLTYPE *RegisterEndpointNotificationCallback)(
627         IMMDeviceEnumerator *This,
628         IMMNotificationClient *pClient);
629 
630     HRESULT (STDMETHODCALLTYPE *UnregisterEndpointNotificationCallback)(
631         IMMDeviceEnumerator *This,
632         IMMNotificationClient *pClient);
633 
634     END_INTERFACE
635 } IMMDeviceEnumeratorVtbl;
636 
637 interface IMMDeviceEnumerator {
638     CONST_VTBL IMMDeviceEnumeratorVtbl* lpVtbl;
639 };
640 
641 #ifdef COBJMACROS
642 #ifndef WIDL_C_INLINE_WRAPPERS
643 /*** IUnknown methods ***/
644 #define IMMDeviceEnumerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
645 #define IMMDeviceEnumerator_AddRef(This) (This)->lpVtbl->AddRef(This)
646 #define IMMDeviceEnumerator_Release(This) (This)->lpVtbl->Release(This)
647 /*** IMMDeviceEnumerator methods ***/
648 #define IMMDeviceEnumerator_EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices) (This)->lpVtbl->EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices)
649 #define IMMDeviceEnumerator_GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint) (This)->lpVtbl->GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint)
650 #define IMMDeviceEnumerator_GetDevice(This,pwstrId,ppDevice) (This)->lpVtbl->GetDevice(This,pwstrId,ppDevice)
651 #define IMMDeviceEnumerator_RegisterEndpointNotificationCallback(This,pClient) (This)->lpVtbl->RegisterEndpointNotificationCallback(This,pClient)
652 #define IMMDeviceEnumerator_UnregisterEndpointNotificationCallback(This,pClient) (This)->lpVtbl->UnregisterEndpointNotificationCallback(This,pClient)
653 #else
654 /*** IUnknown methods ***/
655 static FORCEINLINE HRESULT IMMDeviceEnumerator_QueryInterface(IMMDeviceEnumerator* This,REFIID riid,void **ppvObject) {
656     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
657 }
658 static FORCEINLINE ULONG IMMDeviceEnumerator_AddRef(IMMDeviceEnumerator* This) {
659     return This->lpVtbl->AddRef(This);
660 }
661 static FORCEINLINE ULONG IMMDeviceEnumerator_Release(IMMDeviceEnumerator* This) {
662     return This->lpVtbl->Release(This);
663 }
664 /*** IMMDeviceEnumerator methods ***/
665 static FORCEINLINE HRESULT IMMDeviceEnumerator_EnumAudioEndpoints(IMMDeviceEnumerator* This,EDataFlow dataFlow,DWORD dwStateMask,IMMDeviceCollection **ppDevices) {
666     return This->lpVtbl->EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices);
667 }
668 static FORCEINLINE HRESULT IMMDeviceEnumerator_GetDefaultAudioEndpoint(IMMDeviceEnumerator* This,EDataFlow dataFlow,ERole role,IMMDevice **ppEndpoint) {
669     return This->lpVtbl->GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint);
670 }
671 static FORCEINLINE HRESULT IMMDeviceEnumerator_GetDevice(IMMDeviceEnumerator* This,LPCWSTR pwstrId,IMMDevice **ppDevice) {
672     return This->lpVtbl->GetDevice(This,pwstrId,ppDevice);
673 }
674 static FORCEINLINE HRESULT IMMDeviceEnumerator_RegisterEndpointNotificationCallback(IMMDeviceEnumerator* This,IMMNotificationClient *pClient) {
675     return This->lpVtbl->RegisterEndpointNotificationCallback(This,pClient);
676 }
677 static FORCEINLINE HRESULT IMMDeviceEnumerator_UnregisterEndpointNotificationCallback(IMMDeviceEnumerator* This,IMMNotificationClient *pClient) {
678     return This->lpVtbl->UnregisterEndpointNotificationCallback(This,pClient);
679 }
680 #endif
681 #endif
682 
683 #endif
684 
685 
686 #endif  /* __IMMDeviceEnumerator_INTERFACE_DEFINED__ */
687 
688 /*****************************************************************************
689  * IMMDeviceActivator interface
690  */
691 #ifndef __IMMDeviceActivator_INTERFACE_DEFINED__
692 #define __IMMDeviceActivator_INTERFACE_DEFINED__
693 
694 DEFINE_GUID(IID_IMMDeviceActivator, 0x3b0d0ea4, 0xd0a9, 0x4b0e, 0x93,0x5b, 0x09,0x51,0x67,0x46,0xfa,0xc0);
695 #if defined(__cplusplus) && !defined(CINTERFACE)
696 MIDL_INTERFACE("3b0d0ea4-d0a9-4b0e-935b-09516746fac0")
697 IMMDeviceActivator : public IUnknown
698 {
699     virtual HRESULT STDMETHODCALLTYPE Activate(
700         REFIID iid,
701         IMMDevice *pDevice,
702         PROPVARIANT *pActivationParams,
703         void **ppv) = 0;
704 
705 };
706 #ifdef __CRT_UUID_DECL
707 __CRT_UUID_DECL(IMMDeviceActivator, 0x3b0d0ea4, 0xd0a9, 0x4b0e, 0x93,0x5b, 0x09,0x51,0x67,0x46,0xfa,0xc0)
708 #endif
709 #else
710 typedef struct IMMDeviceActivatorVtbl {
711     BEGIN_INTERFACE
712 
713     /*** IUnknown methods ***/
714     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
715         IMMDeviceActivator *This,
716         REFIID riid,
717         void **ppvObject);
718 
719     ULONG (STDMETHODCALLTYPE *AddRef)(
720         IMMDeviceActivator *This);
721 
722     ULONG (STDMETHODCALLTYPE *Release)(
723         IMMDeviceActivator *This);
724 
725     /*** IMMDeviceActivator methods ***/
726     HRESULT (STDMETHODCALLTYPE *Activate)(
727         IMMDeviceActivator *This,
728         REFIID iid,
729         IMMDevice *pDevice,
730         PROPVARIANT *pActivationParams,
731         void **ppv);
732 
733     END_INTERFACE
734 } IMMDeviceActivatorVtbl;
735 
736 interface IMMDeviceActivator {
737     CONST_VTBL IMMDeviceActivatorVtbl* lpVtbl;
738 };
739 
740 #ifdef COBJMACROS
741 #ifndef WIDL_C_INLINE_WRAPPERS
742 /*** IUnknown methods ***/
743 #define IMMDeviceActivator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
744 #define IMMDeviceActivator_AddRef(This) (This)->lpVtbl->AddRef(This)
745 #define IMMDeviceActivator_Release(This) (This)->lpVtbl->Release(This)
746 /*** IMMDeviceActivator methods ***/
747 #define IMMDeviceActivator_Activate(This,iid,pDevice,pActivationParams,ppv) (This)->lpVtbl->Activate(This,iid,pDevice,pActivationParams,ppv)
748 #else
749 /*** IUnknown methods ***/
750 static FORCEINLINE HRESULT IMMDeviceActivator_QueryInterface(IMMDeviceActivator* This,REFIID riid,void **ppvObject) {
751     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
752 }
753 static FORCEINLINE ULONG IMMDeviceActivator_AddRef(IMMDeviceActivator* This) {
754     return This->lpVtbl->AddRef(This);
755 }
756 static FORCEINLINE ULONG IMMDeviceActivator_Release(IMMDeviceActivator* This) {
757     return This->lpVtbl->Release(This);
758 }
759 /*** IMMDeviceActivator methods ***/
760 static FORCEINLINE HRESULT IMMDeviceActivator_Activate(IMMDeviceActivator* This,REFIID iid,IMMDevice *pDevice,PROPVARIANT *pActivationParams,void **ppv) {
761     return This->lpVtbl->Activate(This,iid,pDevice,pActivationParams,ppv);
762 }
763 #endif
764 #endif
765 
766 #endif
767 
768 
769 #endif  /* __IMMDeviceActivator_INTERFACE_DEFINED__ */
770 
771 typedef struct _AudioExtensionParams {
772     LPARAM AddPageParam;
773     IMMDevice *pEndPoint;
774     IMMDevice *pPnpInterface;
775     IMMDevice *pPnpDevnode;
776 } AudioExtensionParams;
777 
778 DEFINE_GUID(LIBID_MMDeviceAPILib, 0x2fdaafa3, 0x7523, 0x4f66, 0x99,0x57, 0x9d,0x5e,0x7f,0xe6,0x98,0xf6);
779 
780 /*****************************************************************************
781  * MMDeviceEnumerator coclass
782  */
783 
784 DEFINE_GUID(CLSID_MMDeviceEnumerator, 0xbcde0395, 0xe52f, 0x467c, 0x8e,0x3d, 0xc4,0x57,0x92,0x91,0x69,0x2e);
785 
786 #ifdef __cplusplus
787 class DECLSPEC_UUID("bcde0395-e52f-467c-8e3d-c4579291692e") MMDeviceEnumerator;
788 #ifdef __CRT_UUID_DECL
789 __CRT_UUID_DECL(MMDeviceEnumerator, 0xbcde0395, 0xe52f, 0x467c, 0x8e,0x3d, 0xc4,0x57,0x92,0x91,0x69,0x2e)
790 #endif
791 #endif
792 
793 /* Begin additional prototypes for all interfaces */
794 
795 
796 /* End additional prototypes */
797 
798 #ifdef __cplusplus
799 }
800 #endif
801 
802 #endif /* __mmdeviceapi_h__ */
803