ReactOS 0.4.15-dev-6680-g8c76870
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{
124
127
129
131 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
132 IN PVOID OffsetPtr,
133 IN DWORD Bytes,
134 IN PSOUND_OVERLAPPED Overlap,
136
138 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
139 IN DWORD DeviceId,
140 IN UINT uMsg,
142 IN DWORD Flags);
143
145 IN struct _SOUND_DEVICE* Device,
146 IN PWAVEFORMATEX WaveFormat,
147 IN DWORD WaveFormatSize);
148
151 IN DWORD DeviceId,
152 IN PWAVEFORMATEX WaveFormat,
153 IN DWORD WaveFormatSize);
154
156 IN struct _SOUND_DEVICE* SoundDevice,
157 OUT PVOID* Handle);
158
160 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
161 IN PVOID Handle); /* not sure about this */
162
164 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
165 IN PWAVEHDR WaveHeader);
166
168 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
170 IN DWORD Length);
171
173 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
174 IN MMTIME* Time);
175
176
178 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
179 IN BOOL bStart);
180
181
184 IN DWORD DeviceId,
186 IN DWORD InterfaceLength,
187 OUT DWORD * InterfaceSize);
188
190 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
192 IN BOOLEAN bStartReset);
193
194typedef struct _MMFUNCTION_TABLE
195{
196 union
197 {
198 MMGETCAPS_FUNC GetCapabilities;
199 MMGETWAVEOUTCAPS_FUNC GetWaveOutCapabilities;
200 MMGETWAVEINCAPS_FUNC GetWaveInCapabilities;
201 MMGETMIDIOUTCAPS_FUNC GetMidiOutCapabilities;
202 MMGETMIDIINCAPS_FUNC GetMidiInCapabilities;
203 };
204
207
210
212
214
219
220 // Redundant
221 //MMWAVEHEADER_FUNC PrepareWaveHeader;
222 //MMWAVEHEADER_FUNC UnprepareWaveHeader;
223 //MMWAVEHEADER_FUNC WriteWaveHeader;
224
225 //MMWAVEHEADER_FUNC SubmitWaveHeaderToDevice;
226 //MMBUFFER_FUNC CompleteBuffer;
228
229
230
232 IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
234
235typedef struct _SOUND_THREAD
236{
239
240 struct
241 {
246
247 struct
248 {
255
256typedef struct _SOUND_DEVICE
257{
262 PVOID Identifier; /* Path for NT4 drivers */
263 /*PWSTR Path;*/
266
268{
273
274 /* Stuff generously donated to us from WinMM */
275 struct
276 {
277 HDRVR Handle;
282
283 /* DO NOT TOUCH THESE OUTSIDE OF THE SOUND THREAD */
284
285 union
286 {
288 };
289
290 union
291 {
293 };
294
296 //PWAVEHDR CurrentWaveHeader;
308
309/* This lives in WAVEHDR.reserved */
310typedef struct _WAVEHDR_EXTENSION
311{
315
316
317/*
318 reentrancy.c
319*/
320
323
324VOID
326
327VOID
330
331VOID
334
335
336/*
337 mme.c
338*/
339
340VOID
342 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
345
349 IN DWORD DeviceId,
351 IN DWORD CapabilitiesSize);
352
356 IN UINT DeviceId,
357 IN LPWAVEOPENDESC OpenParameters,
358 IN DWORD Flags,
359 OUT DWORD_PTR* PrivateHandle);
360
363 IN DWORD_PTR PrivateHandle);
364
368 IN DWORD DeviceId,
369 IN DWORD_PTR PrivateHandle,
370 IN MMTIME* Time,
371 IN DWORD Size);
372
376 IN DWORD DeviceId,
378 IN DWORD InterfaceLength,
379 OUT DWORD * InterfaceSize);
380
381
384 IN DWORD_PTR PrivateHandle,
385 IN BOOL bStart);
386
387
388#define MmePrepareWaveHeader(private_handle, header) \
389 PrepareWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header)
390
391#define MmeUnprepareWaveHeader(private_handle, header) \
392 UnprepareWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header)
393
394#define MmeWriteWaveHeader(private_handle, header) \
395 WriteWaveHeader((PSOUND_DEVICE_INSTANCE)private_handle, (PWAVEHDR)header)
396
399 IN DWORD_PTR PrivateHandle);
400
401
402/*
403 capabilities.c
404*/
405
408 IN PSOUND_DEVICE SoundDevice,
409 IN DWORD DeviceId,
411 IN DWORD CapabilitiesSize);
412
413
414/*
415 devicelist.c
416*/
417
418ULONG
421
424 IN PSOUND_DEVICE SoundDevice);
425
430 OUT PSOUND_DEVICE* SoundDevice OPTIONAL);
431
435 IN PSOUND_DEVICE SoundDevice);
436
440
441VOID
443
447 IN DWORD DeviceIndex,
449
452 IN PSOUND_DEVICE SoundDevice,
454
457 IN PSOUND_DEVICE SoundDevice,
459
460
461/*
462 functiontable.c
463*/
464
467 IN PSOUND_DEVICE SoundDevice,
469
472 IN PSOUND_DEVICE SoundDevice,
474
475
476/*
477 deviceinstance.c
478*/
479
482 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
483
486 IN PSOUND_DEVICE SoundDevice,
487 OUT PSOUND_DEVICE_INSTANCE* SoundDeviceInstance);
488
491 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
492
495 IN PSOUND_DEVICE SoundDevice);
496
499 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
500 OUT PSOUND_DEVICE* SoundDevice);
501
504 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
505 OUT PVOID* Handle);
506
509 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
510 IN HDRVR MmeHandle,
511 IN DWORD_PTR ClientCallback,
512 IN DWORD_PTR ClientCallbackData,
513 IN DWORD Flags);
514
515
516/*
517 thread.c
518*/
519
523
527
530 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
533
534
535/*
536 utility.c
537*/
538
539PVOID
541 IN UINT Size);
542
543VOID
545 IN PVOID Pointer);
546
547UINT
549
550UINT
552 IN UINT Number);
553
557
561
562
563/*
564 wave/format.c
565*/
566
569 IN PSOUND_DEVICE SoundDevice,
571 IN DWORD FormatSize);
572
575 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
576 IN DWORD DeviceId,
578 IN DWORD FormatSize);
579
580
581/*
582 wave/header.c
583*/
584
587 PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
589
590VOID
592 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
594
597 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
599
602 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
604
607 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
609
610
611/*
612 wave/streaming.c
613*/
614
615VOID
617 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
618
621 IN DWORD dwErrorCode,
622 IN DWORD dwNumberOfBytesTransferred,
624
627 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
629 IN WAVE_COMMIT_FUNC CommitFunction);
630
633 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance,
634 IN PVOID OffsetPtr,
636 IN PSOUND_OVERLAPPED Overlap,
638
641 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
642
643VOID
645 IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance);
646
647/*
648 kernel.c
649*/
650
653 IN PWSTR DevicePath,
656
659 IN PSOUND_DEVICE SoundDevice,
662
666
669 IN HANDLE SoundDeviceInstance,
671 IN LPVOID InBuffer,
676
677
678#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_ PVOID Parameter
Definition: ldrtypes.h:241
_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:177
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:238
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:172
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:155
MMRESULT(* MMWAVESETFORMAT_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *Instance, IN DWORD DeviceId, IN PWAVEFORMATEX WaveFormat, IN DWORD WaveFormatSize)
Definition: mmebuddy.h:149
VOID DoWaveStreaming(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance)
Definition: streaming.c:20
struct _SOUND_OVERLAPPED * PSOUND_OVERLAPPED
MMRESULT(* MMCLOSE_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN PVOID Handle)
Definition: mmebuddy.h:159
VOID AcquireEntrypointMutex(IN MMDEVICE_TYPE DeviceType)
Definition: reentrancy.c:75
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:383
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:130
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:334
MMRESULT CommitWaveHeaderToKernelDevice(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PWAVEHDR Header, IN WAVE_COMMIT_FUNC CommitFunction)
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:182
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 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:167
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:157
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:163
#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:231
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:137
MMRESULT(* MMWAVEQUERYFORMATSUPPORT_FUNC)(IN struct _SOUND_DEVICE *Device, IN PWAVEFORMATEX WaveFormat, IN DWORD WaveFormatSize)
Definition: mmebuddy.h:144
MMRESULT(* MMRESETSTREAM_FUNC)(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN MMDEVICE_TYPE DeviceType, IN BOOLEAN bStartReset)
Definition: mmebuddy.h:189
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
_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
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:202
MMGETMIDIOUTCAPS_FUNC GetMidiOutCapabilities
Definition: mmebuddy.h:201
MMOPEN_FUNC Open
Definition: mmebuddy.h:205
MMCLOSE_FUNC Close
Definition: mmebuddy.h:206
MMGETPOS_FUNC GetPos
Definition: mmebuddy.h:215
MMRESETSTREAM_FUNC ResetStream
Definition: mmebuddy.h:218
MMGETCAPS_FUNC GetCapabilities
Definition: mmebuddy.h:198
MMWAVEQUERYFORMATSUPPORT_FUNC QueryWaveFormatSupport
Definition: mmebuddy.h:208
WAVE_COMMIT_FUNC CommitWaveBuffer
Definition: mmebuddy.h:213
MMGETWAVEOUTCAPS_FUNC GetWaveOutCapabilities
Definition: mmebuddy.h:199
MMSETSTATE_FUNC SetState
Definition: mmebuddy.h:216
MMWAVESETFORMAT_FUNC SetWaveFormat
Definition: mmebuddy.h:209
MMMIXERQUERY_FUNC QueryMixerInfo
Definition: mmebuddy.h:211
MMQUERYDEVICEINTERFACESTRING_FUNC GetDeviceInterfaceString
Definition: mmebuddy.h:217
MMGETWAVEINCAPS_FUNC GetWaveInCapabilities
Definition: mmebuddy.h:200
struct _SOUND_DEVICE_INSTANCE * Next
Definition: mmebuddy.h:269
DWORD_PTR ClientCallback
Definition: mmebuddy.h:279
PWAVEHDR TailWaveHeader
Definition: mmebuddy.h:292
WAVEFORMATEX WaveFormatEx
Definition: mmebuddy.h:301
PWAVEHDR WaveLoopStart
Definition: mmebuddy.h:295
DWORD_PTR ClientCallbackInstanceData
Definition: mmebuddy.h:280
struct _SOUND_THREAD * Thread
Definition: mmebuddy.h:272
struct _SOUND_DEVICE_INSTANCE::@3451 WinMM
struct _SOUND_DEVICE * Device
Definition: mmebuddy.h:270
PWAVEHDR HeadWaveHeader
Definition: mmebuddy.h:287
PVOID Identifier
Definition: mmebuddy.h:262
MMFUNCTION_TABLE FunctionTable
Definition: mmebuddy.h:264
struct _SOUND_DEVICE_INSTANCE * HeadInstance
Definition: mmebuddy.h:259
MMDEVICE_TYPE Type
Definition: mmebuddy.h:261
struct _SOUND_DEVICE * Next
Definition: mmebuddy.h:258
struct _SOUND_DEVICE_INSTANCE * TailInstance
Definition: mmebuddy.h:260
OVERLAPPED Standard
Definition: mmebuddy.h:120
BOOL PerformCompletion
Definition: mmebuddy.h:123
PWAVEHDR Header
Definition: mmebuddy.h:122
PVOID CompletionContext
Definition: mmebuddy.h:126
struct _SOUND_DEVICE_INSTANCE * SoundDeviceInstance
Definition: mmebuddy.h:121
LPOVERLAPPED_COMPLETION_ROUTINE OriginalCompletionRoutine
Definition: mmebuddy.h:125
struct _SOUND_THREAD::@3449 Events
HANDLE Request
Definition: mmebuddy.h:243
struct _SOUND_DEVICE_INSTANCE * SoundDeviceInstance
Definition: mmebuddy.h:250
PVOID Parameter
Definition: mmebuddy.h:251
BOOL Running
Definition: mmebuddy.h:238
HANDLE Done
Definition: mmebuddy.h:244
HANDLE Ready
Definition: mmebuddy.h:242
MMRESULT Result
Definition: mmebuddy.h:252
HANDLE Handle
Definition: mmebuddy.h:237
SOUND_THREAD_REQUEST_HANDLER Handler
Definition: mmebuddy.h:249
DWORD BytesCommitted
Definition: mmebuddy.h:312
DWORD BytesCompleted
Definition: mmebuddy.h:313
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:1439
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
unsigned char UCHAR
Definition: xmlstorage.h:181
WCHAR * LPWSTR
Definition: xmlstorage.h:184