ReactOS 0.4.15-dev-8434-g155a7c7
mmebuddy.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Sound System "MME Buddy" Library
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: include/reactos/libs/sound/mmebuddy.h
5 *
6 * PURPOSE: Header for the "MME Buddy" helper library (located in
7 * lib/drivers/sound/mmebuddy)
8 *
9 * PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org)
10 *
11 * HISTORY: 4 July 2008 - Created
12 * 31 Dec 2008 - Split off NT4-specific code into a separate library
13 *
14 * NOTES: MME Buddy was the best name I could come up with...
15 * The structures etc. here should be treated as internal to the
16 * library so should not be directly accessed elsewhere. Perhaps they
17 * can be moved to an internal header?
18*/
19
20#ifndef ROS_AUDIO_MMEBUDDY_H
21#define ROS_AUDIO_MMEBUDDY_H
22
23/*
24 Some memory allocation helper macros
25*/
26
27#define AllocateStruct(thing) \
28 (thing*) AllocateMemory(sizeof(thing))
29
30#define StringLengthToBytes(chartype, string_length) \
31 ( ( string_length + 1 ) * sizeof(chartype) )
32
33#define AllocateWideString(string_length) \
34 (PWSTR) AllocateMemory(StringLengthToBytes(WCHAR, string_length))
35
36#define ZeroWideString(string) \
37 ZeroMemory(string, StringLengthToBytes(WCHAR, wcslen(string)))
38
39#define CopyWideString(dest, source) \
40 CopyMemory(dest, source, StringLengthToBytes(WCHAR, wcslen(source)))
41
42
43/*
44 Helps find the minimum/maximum of two values
45*/
46
47#define MinimumOf(value_a, value_b) \
48 ( value_a < value_b ? value_a : value_b )
49
50#define MaximumOf(value_a, value_b) \
51 ( value_a > value_b ? value_a : value_b )
52
53
54/*
55 Convert a device type into a zero-based array index
56*/
57
58#define SOUND_DEVICE_TYPE_TO_INDEX(x) \
59 ( x - MIN_SOUND_DEVICE_TYPE )
60
61#define INDEX_TO_SOUND_DEVICE_TYPE(x) \
62 ( x + MIN_SOUND_DEVICE_TYPE )
63
64
65/*
66 Validation
67*/
68
69#define IsValidSoundDeviceType IS_VALID_SOUND_DEVICE_TYPE
70
71#define VALIDATE_MMSYS_PARAMETER(parameter_condition) \
72 { \
73 if ( ! (parameter_condition) ) \
74 { \
75 SND_ERR(L"FAILED parameter check: %hS at File %S Line %lu\n", #parameter_condition, __FILE__, __LINE__); \
76 return MMSYSERR_INVALPARAM; \
77 } \
78 }
79
80#define MMSUCCESS(result) \
81 ( result == MMSYSERR_NOERROR )
82
83
84/*
85 Types and Structures
86*/
87
89struct _SOUND_DEVICE;
91
92
93#define DEFINE_GETCAPS_FUNCTYPE(func_typename, caps_type) \
94 typedef MMRESULT (*func_typename)( \
95 IN struct _SOUND_DEVICE* SoundDevice, \
96 IN DWORD DeviceId, \
97 OUT caps_type Capabilities, \
98 IN DWORD CapabilitiesSize);
99
100/* This one is for those of us who don't care */
102
103/* These are for those of us that do */
105DEFINE_GETCAPS_FUNCTYPE(MMGETWAVEINCAPS_FUNC, LPWAVEINCAPS );
107DEFINE_GETCAPS_FUNCTYPE(MMGETMIDIINCAPS_FUNC, LPMIDIINCAPS );
108
109struct _SOUND_DEVICE;
111
112
113/*
114 By extending the OVERLAPPED structure, it becomes possible to provide the
115 I/O completion routines with additional information.
116*/
117
118typedef struct _SOUND_OVERLAPPED
119{
123
126
128
130 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
131 IN PVOID OffsetPtr,
132 IN DWORD Bytes,
133 IN PSOUND_OVERLAPPED Overlap,
135
137 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
138 IN DWORD DeviceId,
139 IN UINT uMsg,
141 IN DWORD Flags);
142
144 IN struct _SOUND_DEVICE* Device,
145 IN PWAVEFORMATEX WaveFormat,
146 IN DWORD WaveFormatSize);
147
150 IN DWORD DeviceId,
151 IN PWAVEFORMATEX WaveFormat,
152 IN DWORD WaveFormatSize);
153
155 IN struct _SOUND_DEVICE* SoundDevice,
156 OUT PVOID* Handle);
157
159 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
160 IN PVOID Handle); /* not sure about this */
161
163 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
164 IN PWAVEHDR WaveHeader);
165
167 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
169 IN DWORD Length);
170
172 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
173 IN MMTIME* Time);
174
175
177 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
178 IN BOOL bStart);
179
180
183 IN DWORD DeviceId,
185 IN DWORD InterfaceLength,
186 OUT DWORD * InterfaceSize);
187
189 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
191 IN BOOLEAN bStartReset);
192
194 _In_ struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
195 _In_ DWORD DeviceId,
196 _Out_ PDWORD pdwVolume);
197
199 _In_ struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
200 _In_ DWORD DeviceId,
201 _In_ DWORD dwVolume);
202
203typedef struct _MMFUNCTION_TABLE
204{
205 union
206 {
207 MMGETCAPS_FUNC GetCapabilities;
208 MMGETWAVEOUTCAPS_FUNC GetWaveOutCapabilities;
209 MMGETWAVEINCAPS_FUNC GetWaveInCapabilities;
210 MMGETMIDIOUTCAPS_FUNC GetMidiOutCapabilities;
211 MMGETMIDIINCAPS_FUNC GetMidiInCapabilities;
212 };
213
216
219
221
223
228
231
232 // Redundant
233 //MMWAVEHEADER_FUNC PrepareWaveHeader;
234 //MMWAVEHEADER_FUNC UnprepareWaveHeader;
235 //MMWAVEHEADER_FUNC WriteWaveHeader;
236
237 //MMWAVEHEADER_FUNC SubmitWaveHeaderToDevice;
238 //MMBUFFER_FUNC CompleteBuffer;
240
241
242
244 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
246
247typedef struct _SOUND_THREAD
248{
251
252 struct
253 {
258
259 struct
260 {
267
268typedef struct _SOUND_DEVICE
269{
274 PVOID Identifier; /* Path for NT4 drivers */
275 /*PWSTR Path;*/
278
280{
285
286 /* Stuff generously donated to us from WinMM */
287 struct
288 {
289 HDRVR Handle;
294
295 /* DO NOT TOUCH THESE OUTSIDE OF THE SOUND THREAD */
296
297 union
298 {
300 };
301
302 union
303 {
305 };
306
308 //PWAVEHDR CurrentWaveHeader;
320
321/* This lives in WAVEHDR.reserved */
322typedef struct _WAVEHDR_EXTENSION
323{
327
328
329/*
330 reentrancy.c
331*/
332
335
336VOID
338
339VOID
342
343VOID
346
347
348/*
349 mme.c
350*/
351
352VOID
354 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
357
361 IN DWORD DeviceId,
363 IN DWORD CapabilitiesSize);
364
368 IN UINT DeviceId,
369 IN LPWAVEOPENDESC OpenParameters,
370 IN DWORD Flags,
371 OUT DWORD_PTR* PrivateHandle);
372
375 IN DWORD_PTR PrivateHandle);
376
380 IN DWORD DeviceId,
381 IN DWORD_PTR PrivateHandle,
382 IN MMTIME* Time,
383 IN DWORD Size);
384
388 _In_ DWORD DeviceId,
389 _In_ DWORD_PTR PrivateHandle,
390 _Out_ DWORD_PTR pdwVolume);
391
395 _In_ DWORD DeviceId,
396 _In_ DWORD_PTR PrivateHandle,
397 _In_ DWORD_PTR dwVolume);
398
402 IN DWORD DeviceId,
404 IN DWORD InterfaceLength,
405 OUT DWORD * InterfaceSize);
406
407
410 IN DWORD_PTR PrivateHandle,
411 IN BOOL bStart);
412
413
414#define MmePrepareWaveHeader(private_handle, header) \
415 PrepareWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header)
416
417#define MmeUnprepareWaveHeader(private_handle, header) \
418 UnprepareWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header)
419
420#define MmeWriteWaveHeader(private_handle, header) \
421 WriteWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header)
422
425 IN DWORD_PTR PrivateHandle);
426
427
428/*
429 capabilities.c
430*/
431
434 IN PSOUND_DEVICE SoundDevice,
435 IN DWORD DeviceId,
437 IN DWORD CapabilitiesSize);
438
439
440/*
441 devicelist.c
442*/
443
444ULONG
447
450 IN PSOUND_DEVICE SoundDevice);
451
456 OUT PSOUND_DEVICE* SoundDevice OPTIONAL);
457
461 IN PSOUND_DEVICE SoundDevice);
462
466
467VOID
469
473 IN DWORD DeviceIndex,
475
478 IN PSOUND_DEVICE SoundDevice,
480
483 IN PSOUND_DEVICE SoundDevice,
485
486
487/*
488 functiontable.c
489*/
490
493 IN PSOUND_DEVICE SoundDevice,
495
498 IN PSOUND_DEVICE SoundDevice,
500
501
502/*
503 deviceinstance.c
504*/
505
508 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
509
512 IN PSOUND_DEVICE SoundDevice,
513 OUT PSOUND_DEVICE_INSTANCE* SoundDeviceInstance);
514
517 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
518
521 IN PSOUND_DEVICE SoundDevice);
522
525 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
526 OUT PSOUND_DEVICE* SoundDevice);
527
530 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
531 OUT PVOID* Handle);
532
535 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
536 IN HDRVR MmeHandle,
537 IN DWORD_PTR ClientCallback,
538 IN DWORD_PTR ClientCallbackData,
539 IN DWORD Flags);
540
541
542/*
543 thread.c
544*/
545
549
553
556 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
559
560
561/*
562 utility.c
563*/
564
565PVOID
567 IN UINT Size);
568
569VOID
571 IN PVOID Pointer);
572
573UINT
575
576UINT
578 IN UINT Number);
579
583
587
588
589/*
590 wave/format.c
591*/
592
595 IN PSOUND_DEVICE SoundDevice,
597 IN DWORD FormatSize);
598
601 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
602 IN DWORD DeviceId,
604 IN DWORD FormatSize);
605
606
607/*
608 wave/header.c
609*/
610
613 PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
615
616VOID
618 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
620
623 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
625
628 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
630
633 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
635
636
637/*
638 wave/streaming.c
639*/
640
641VOID
643 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
644
647 IN DWORD dwErrorCode,
648 IN DWORD dwNumberOfBytesTransferred,
650
653 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
655 IN WAVE_COMMIT_FUNC CommitFunction);
656
659 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
660 IN PVOID OffsetPtr,
662 IN PSOUND_OVERLAPPED Overlap,
664
667 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
668
669VOID
671 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
672
673/*
674 kernel.c
675*/
676
679 IN PWSTR DevicePath,
682
685 IN PSOUND_DEVICE SoundDevice,
688
692
695 IN HANDLE SoundDeviceInstance,
697 IN LPVOID InBuffer,
702
703
704#endif
unsigned char BOOLEAN
@ Identifier
Definition: asmpp.cpp:95
Definition: bufpool.h:45
Definition: Header.h:9
#define CALLBACK
Definition: compat.h:35
static const WCHAR Message[]
Definition: register.c:74
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
ULONG Handle
Definition: gdb_input.c:15
_Must_inspect_result_ typedef _Out_ PHIDP_CAPS Capabilities
Definition: hidclass.h:103
_In_ UINT Bytes
Definition: mmcopy.h:9
DeviceType
Definition: mmdrv.h:42
struct _WAVEHDR_EXTENSION * PWAVEHDR_EXTENSION
struct _MMFUNCTION_TABLE MMFUNCTION_TABLE
MMRESULT(* MMSETSTATE_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN BOOL bStart)
Definition: mmebuddy.h:176
MMRESULT UnlistSoundDevice(IN MMDEVICE_TYPE DeviceType, IN PSOUND_DEVICE SoundDevice)
Definition: devicelist.c:188
BOOLEAN IsValidSoundDevice(IN PSOUND_DEVICE SoundDevice)
Definition: devicelist.c:87
MMRESULT DestroyAllSoundDeviceInstances(IN PSOUND_DEVICE SoundDevice)
MMRESULT ListSoundDevice(IN MMDEVICE_TYPE DeviceType, IN PVOID Identifier OPTIONAL, OUT PSOUND_DEVICE *SoundDevice OPTIONAL)
Definition: devicelist.c:131
MMRESULT MmeOpenDevice(IN MMDEVICE_TYPE DeviceType, IN UINT DeviceId, IN LPWAVEOPENDESC OpenParameters, IN DWORD Flags, OUT DWORD_PTR *PrivateHandle)
Definition: mmewrap.c:132
MMRESULT WriteFileEx_Committer(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PVOID OffsetPtr, IN DWORD Length, IN PSOUND_OVERLAPPED Overlap, IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine)
Definition: streaming.c:264
MMRESULT CreateSoundThread(OUT PSOUND_THREAD *Thread)
Definition: thread.c:209
MMRESULT(* MMGETPOS_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN MMTIME *Time)
Definition: mmebuddy.h:171
MMRESULT MmeCloseDevice(IN DWORD_PTR PrivateHandle)
Definition: mmewrap.c:225
struct _SOUND_DEVICE_INSTANCE * PSOUND_DEVICE_INSTANCE
MMRESULT(* MMOPEN_FUNC)(IN struct _SOUND_DEVICE *SoundDevice, OUT PVOID *Handle)
Definition: mmebuddy.h:154
MMRESULT(* MMWAVESETFORMAT_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *Instance, IN DWORD DeviceId, IN PWAVEFORMATEX WaveFormat, IN DWORD WaveFormatSize)
Definition: mmebuddy.h:148
VOID DoWaveStreaming(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance)
Definition: streaming.c:19
struct _SOUND_OVERLAPPED * PSOUND_OVERLAPPED
MMRESULT(* MMCLOSE_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN PVOID Handle)
Definition: mmebuddy.h:158
VOID AcquireEntrypointMutex(IN MMDEVICE_TYPE DeviceType)
Definition: reentrancy.c:75
MMRESULT(* MMSETVOLUME_FUNC)(_In_ struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, _In_ DWORD DeviceId, _In_ DWORD dwVolume)
Definition: mmebuddy.h:198
ULONG GetSoundDeviceCount(IN MMDEVICE_TYPE DeviceType)
Definition: devicelist.c:67
MMRESULT OpenKernelSoundDeviceByName(IN PWSTR DevicePath, IN BOOLEAN ReadOnly, OUT PHANDLE Handle)
Definition: kernel.c:23
MMRESULT CallSoundThread(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN SOUND_THREAD_REQUEST_HANDLER RequestHandler, IN PVOID Parameter OPTIONAL)
Definition: thread.c:71
MMRESULT MmeGetDeviceInterfaceString(IN MMDEVICE_TYPE DeviceType, IN DWORD DeviceId, IN LPWSTR Interface, IN DWORD InterfaceLength, OUT DWORD *InterfaceSize)
Definition: mmewrap.c:294
MMRESULT SetSoundDeviceInstanceMmeData(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN HDRVR MmeHandle, IN DWORD_PTR ClientCallback, IN DWORD_PTR ClientCallbackData, IN DWORD Flags)
MMRESULT EnqueueWaveHeader(PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PVOID Parameter)
Definition: header.c:218
PVOID AllocateMemory(IN UINT Size)
Definition: utility.c:20
MMRESULT MmeGetPosition(IN MMDEVICE_TYPE DeviceType, IN DWORD DeviceId, IN DWORD_PTR PrivateHandle, IN MMTIME *Time, IN DWORD Size)
Definition: mmewrap.c:327
VOID InitiateSoundStreaming(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance)
Definition: streaming.c:409
MMRESULT GetSoundDeviceCapabilities(IN PSOUND_DEVICE SoundDevice, IN DWORD DeviceId, OUT PVOID Capabilities, IN DWORD CapabilitiesSize)
Definition: capabilities.c:24
MMRESULT GetSoundDeviceFunctionTable(IN PSOUND_DEVICE SoundDevice, OUT PMMFUNCTION_TABLE *FunctionTable)
Definition: functiontable.c:47
MMRESULT MmeSetState(IN DWORD_PTR PrivateHandle, IN BOOL bStart)
Definition: mmewrap.c:19
MMRESULT(* WAVE_COMMIT_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN PVOID OffsetPtr, IN DWORD Bytes, IN PSOUND_OVERLAPPED Overlap, IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine)
Definition: mmebuddy.h:129
VOID NotifyMmeClient(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN UINT Message, IN DWORD_PTR Parameter)
Definition: mmewrap.c:75
struct _SOUND_THREAD * PSOUND_THREAD
MMRESULT MmeResetWavePlayback(IN DWORD_PTR PrivateHandle)
Definition: mmewrap.c:280
MMRESULT SetWaveDeviceFormat(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN DWORD DeviceId, IN LPWAVEFORMATEX Format, IN DWORD FormatSize)
Definition: format.c:49
struct _SOUND_DEVICE * PSOUND_DEVICE
MMRESULT StopStreaming(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance)
Definition: streaming.c:360
MMRESULT CommitWaveHeaderToKernelDevice(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PWAVEHDR Header, IN WAVE_COMMIT_FUNC CommitFunction)
MMRESULT MmeGetVolume(_In_ MMDEVICE_TYPE DeviceType, _In_ DWORD DeviceId, _In_ DWORD_PTR PrivateHandle, _Out_ DWORD_PTR pdwVolume)
Definition: mmewrap.c:369
MMRESULT SetSoundDeviceFunctionTable(IN PSOUND_DEVICE SoundDevice, IN PMMFUNCTION_TABLE FunctionTable)
Definition: functiontable.c:21
MMRESULT(* MMQUERYDEVICEINTERFACESTRING_FUNC)(IN MMDEVICE_TYPE DeviceType, IN DWORD DeviceId, IN LPWSTR Interface, IN DWORD InterfaceLength, OUT DWORD *InterfaceSize)
Definition: mmebuddy.h:181
MMRESULT UnlistSoundDevices(IN MMDEVICE_TYPE DeviceType)
Definition: devicelist.c:245
MMRESULT WriteWaveHeader(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PWAVEHDR Header)
Definition: header.c:159
UCHAR MMDEVICE_TYPE
Definition: mmebuddy.h:88
MMRESULT SyncOverlappedDeviceIoControl(IN HANDLE SoundDeviceInstance, IN DWORD IoControlCode, IN LPVOID InBuffer, IN DWORD InBufferSize, OUT LPVOID OutBuffer, IN DWORD OutBufferSize, OUT LPDWORD BytesTransferred OPTIONAL)
Definition: misc.c:298
MMRESULT GetSoundDeviceFromInstance(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, OUT PSOUND_DEVICE *SoundDevice)
MMRESULT CloseKernelSoundDevice(IN HANDLE Handle)
Definition: kernel.c:58
MMRESULT(* MMGETVOLUME_FUNC)(_In_ struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, _In_ DWORD DeviceId, _Out_ PDWORD pdwVolume)
Definition: mmebuddy.h:193
MMRESULT DestroySoundThread(IN PSOUND_THREAD Thread)
Definition: thread.c:272
struct _MMFUNCTION_TABLE * PMMFUNCTION_TABLE
UCHAR * PMMDEVICE_TYPE
Definition: mmebuddy.h:88
MMRESULT UnprepareWaveHeader(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PWAVEHDR Header)
Definition: header.c:126
struct _SOUND_DEVICE SOUND_DEVICE
MMRESULT PrepareWaveHeader(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PWAVEHDR Header)
Definition: header.c:89
MMRESULT(* MMBUFFER_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN PVOID Buffer, IN DWORD Length)
Definition: mmebuddy.h:166
MMRESULT TranslateInternalMmResult(IN MMRESULT Result)
Definition: utility.c:132
UINT GetDigitCount(IN UINT Number)
Definition: utility.c:68
MMRESULT GetSoundDeviceInstanceHandle(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, OUT PVOID *Handle)
MMRESULT GetSoundDeviceIdentifier(IN PSOUND_DEVICE SoundDevice, OUT PVOID *Identifier)
Definition: devicelist.c:328
MMRESULT DestroySoundDeviceInstance(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance)
VOID FreeMemory(IN PVOID Pointer)
Definition: utility.c:42
VOID CALLBACK CompleteIO(IN DWORD dwErrorCode, IN DWORD dwNumberOfBytesTransferred, IN LPOVERLAPPED lpOverlapped)
Definition: streaming.c:168
MMRESULT GetSoundDeviceType(IN PSOUND_DEVICE SoundDevice, OUT PMMDEVICE_TYPE DeviceType)
Definition: devicelist.c:346
MMRESULT(* MMWAVEHEADER_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN PWAVEHDR WaveHeader)
Definition: mmebuddy.h:162
#define DEFINE_GETCAPS_FUNCTYPE(func_typename, caps_type)
Definition: mmebuddy.h:93
struct _SOUND_THREAD SOUND_THREAD
struct _SOUND_DEVICE_INSTANCE SOUND_DEVICE_INSTANCE
MMRESULT QueryWaveDeviceFormatSupport(IN PSOUND_DEVICE SoundDevice, IN LPWAVEFORMATEX Format, IN DWORD FormatSize)
Definition: format.c:14
MMRESULT(* SOUND_THREAD_REQUEST_HANDLER)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN PVOID Parameter)
Definition: mmebuddy.h:243
VOID CompleteWaveHeader(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PWAVEHDR Header)
Definition: header.c:274
BOOLEAN IsValidSoundDeviceInstance(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance)
MMRESULT OpenKernelSoundDevice(IN PSOUND_DEVICE SoundDevice, IN BOOLEAN ReadOnly, OUT PHANDLE Handle)
VOID ReleaseEntrypointMutex(IN MMDEVICE_TYPE DeviceType)
Definition: reentrancy.c:92
struct _SOUND_OVERLAPPED SOUND_OVERLAPPED
MMRESULT MmeGetSoundDeviceCapabilities(IN MMDEVICE_TYPE DeviceType, IN DWORD DeviceId, IN PVOID Capabilities, IN DWORD CapabilitiesSize)
Definition: mmewrap.c:103
MMRESULT(* MMMIXERQUERY_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN DWORD DeviceId, IN UINT uMsg, IN LPVOID Parameter, IN DWORD Flags)
Definition: mmebuddy.h:136
MMRESULT(* MMWAVEQUERYFORMATSUPPORT_FUNC)(IN struct _SOUND_DEVICE *Device, IN PWAVEFORMATEX WaveFormat, IN DWORD WaveFormatSize)
Definition: mmebuddy.h:143
MMRESULT(* MMRESETSTREAM_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN MMDEVICE_TYPE DeviceType, IN BOOLEAN bStartReset)
Definition: mmebuddy.h:188
MMRESULT MmeSetVolume(_In_ MMDEVICE_TYPE DeviceType, _In_ DWORD DeviceId, _In_ DWORD_PTR PrivateHandle, _In_ DWORD_PTR dwVolume)
Definition: mmewrap.c:409
MMRESULT CreateSoundDeviceInstance(IN PSOUND_DEVICE SoundDevice, OUT PSOUND_DEVICE_INSTANCE *SoundDeviceInstance)
MMRESULT GetSoundDevice(IN MMDEVICE_TYPE DeviceType, IN DWORD DeviceIndex, OUT PSOUND_DEVICE *Device)
Definition: devicelist.c:289
struct _WAVEHDR_EXTENSION WAVEHDR_EXTENSION
MMRESULT Win32ErrorToMmResult(IN UINT ErrorCode)
Definition: utility.c:87
UINT MMRESULT
Definition: mmsystem.h:962
static PLARGE_INTEGER Time
Definition: time.c:105
#define _Out_
Definition: ms_sal.h:345
#define _In_
Definition: ms_sal.h:308
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
Definition: mswsock.h:93
unsigned int UINT
Definition: ndis.h:50
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4436
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
Definition: ntpoapi.h:207
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:455
DWORD * PDWORD
Definition: pedump.c:68
VOID CleanupEntrypointMutexes()
Definition: reentrancy.c:56
MMRESULT InitEntrypointMutexes()
Definition: reentrancy.c:21
_In_ UCHAR _In_ ULONG _Out_ PUCHAR _Outptr_result_bytebuffer_ OutBufferLength PVOID * OutBuffer
Definition: scsi.h:4071
@ ReadOnly
Definition: arc.h:80
VOID UnlistAllSoundDevices()
Definition: devicelist.c:270
UINT GetMemoryAllocationCount()
Definition: utility.c:58
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
MMGETMIDIINCAPS_FUNC GetMidiInCapabilities
Definition: mmebuddy.h:211
MMGETVOLUME_FUNC GetVolume
Definition: mmebuddy.h:229
MMGETMIDIOUTCAPS_FUNC GetMidiOutCapabilities
Definition: mmebuddy.h:210
MMOPEN_FUNC Open
Definition: mmebuddy.h:214
MMCLOSE_FUNC Close
Definition: mmebuddy.h:215
MMGETPOS_FUNC GetPos
Definition: mmebuddy.h:224
MMRESETSTREAM_FUNC ResetStream
Definition: mmebuddy.h:227
MMGETCAPS_FUNC GetCapabilities
Definition: mmebuddy.h:207
MMWAVEQUERYFORMATSUPPORT_FUNC QueryWaveFormatSupport
Definition: mmebuddy.h:217
WAVE_COMMIT_FUNC CommitWaveBuffer
Definition: mmebuddy.h:222
MMGETWAVEOUTCAPS_FUNC GetWaveOutCapabilities
Definition: mmebuddy.h:208
MMSETSTATE_FUNC SetState
Definition: mmebuddy.h:225
MMWAVESETFORMAT_FUNC SetWaveFormat
Definition: mmebuddy.h:218
MMMIXERQUERY_FUNC QueryMixerInfo
Definition: mmebuddy.h:220
MMSETVOLUME_FUNC SetVolume
Definition: mmebuddy.h:230
MMQUERYDEVICEINTERFACESTRING_FUNC GetDeviceInterfaceString
Definition: mmebuddy.h:226
MMGETWAVEINCAPS_FUNC GetWaveInCapabilities
Definition: mmebuddy.h:209
struct _SOUND_DEVICE_INSTANCE * Next
Definition: mmebuddy.h:281
DWORD_PTR ClientCallback
Definition: mmebuddy.h:291
PWAVEHDR TailWaveHeader
Definition: mmebuddy.h:304
WAVEFORMATEX WaveFormatEx
Definition: mmebuddy.h:313
PWAVEHDR WaveLoopStart
Definition: mmebuddy.h:307
struct _SOUND_DEVICE_INSTANCE::@3472 WinMM
DWORD_PTR ClientCallbackInstanceData
Definition: mmebuddy.h:292
struct _SOUND_THREAD * Thread
Definition: mmebuddy.h:284
struct _SOUND_DEVICE * Device
Definition: mmebuddy.h:282
PWAVEHDR HeadWaveHeader
Definition: mmebuddy.h:299
PVOID Identifier
Definition: mmebuddy.h:274
MMFUNCTION_TABLE FunctionTable
Definition: mmebuddy.h:276
struct _SOUND_DEVICE_INSTANCE * HeadInstance
Definition: mmebuddy.h:271
MMDEVICE_TYPE Type
Definition: mmebuddy.h:273
struct _SOUND_DEVICE * Next
Definition: mmebuddy.h:270
struct _SOUND_DEVICE_INSTANCE * TailInstance
Definition: mmebuddy.h:272
OVERLAPPED Standard
Definition: mmebuddy.h:120
PWAVEHDR Header
Definition: mmebuddy.h:122
PVOID CompletionContext
Definition: mmebuddy.h:125
struct _SOUND_DEVICE_INSTANCE * SoundDeviceInstance
Definition: mmebuddy.h:121
LPOVERLAPPED_COMPLETION_ROUTINE OriginalCompletionRoutine
Definition: mmebuddy.h:124
struct _SOUND_THREAD::@3470 Events
HANDLE Request
Definition: mmebuddy.h:255
struct _SOUND_DEVICE_INSTANCE * SoundDeviceInstance
Definition: mmebuddy.h:262
PVOID Parameter
Definition: mmebuddy.h:263
BOOL Running
Definition: mmebuddy.h:250
HANDLE Done
Definition: mmebuddy.h:256
HANDLE Ready
Definition: mmebuddy.h:254
MMRESULT Result
Definition: mmebuddy.h:264
HANDLE Handle
Definition: mmebuddy.h:249
SOUND_THREAD_REQUEST_HANDLER Handler
Definition: mmebuddy.h:261
DWORD BytesCommitted
Definition: mmebuddy.h:324
DWORD BytesCompleted
Definition: mmebuddy.h:325
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint32_t * LPDWORD
Definition: typedefs.h:59
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
Definition: wdfio.h:325
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
Definition: wdfrequest.h:895
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ PWDF_MEMORY_DESCRIPTOR _Out_opt_ PULONG BytesTransferred
Definition: wdfusb.h:1342
_In_ ULONG OutBufferSize
Definition: wdfwmi.h:87
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_WMI_INSTANCE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_opt_ WDFWMIINSTANCE * Instance
Definition: wdfwmi.h:481
_In_ ULONG InBufferSize
Definition: wdfwmi.h:106
void(CALLBACK * LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD, LPOVERLAPPED)
Definition: winbase.h:1451
static WLX_DISPATCH_VERSION_1_4 FunctionTable
Definition: wlx.c:722
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_Inout_opt_ PVOID Parameter
Definition: rtltypes.h:336
unsigned char UCHAR
Definition: xmlstorage.h:181
WCHAR * LPWSTR
Definition: xmlstorage.h:184