22 #define KERNEL_DEVICE_NAME L"\\\\.\\wdmaud" 39 WaitObjects[0] =
Instance->hNotifyEvent;
40 WaitObjects[1] =
Instance->hStopEvent;
74 Instance->WinMM.ClientCallbackInstanceData,
122 SND_ERR(
L"Call to IOCTL_GETNUMDEVS_TYPE failed\n");
152 SND_TRACE(
L"WDMAUD - GetWdmDeviceCapabilities DeviceType %u DeviceId %u\n",
DeviceType, DeviceId);
282 if (!DeviceInterfaceDetailData)
351 DeviceInfo.hDevice = SoundDeviceInstance->Handle;
396 SetEvent(SoundDeviceInstance->hStopEvent);
510 DeviceInfo.u.WaveFormatEx.wFormatTag = WaveFormat->wFormatTag;
511 #ifdef USERMODE_MIXER 513 DeviceInfo.u.WaveFormatEx.nSamplesPerSec = 44100;
515 DeviceInfo.u.WaveFormatEx.nAvgBytesPerSec = 176400;
516 DeviceInfo.u.WaveFormatEx.wBitsPerSample = 16;
518 DeviceInfo.u.WaveFormatEx.nChannels = WaveFormat->nChannels;
519 DeviceInfo.u.WaveFormatEx.nSamplesPerSec = WaveFormat->nSamplesPerSec;
520 DeviceInfo.u.WaveFormatEx.nBlockAlign = WaveFormat->nBlockAlign;
521 DeviceInfo.u.WaveFormatEx.nAvgBytesPerSec = WaveFormat->nAvgBytesPerSec;
541 Instance->WaveFormatEx.wFormatTag = WaveFormat->wFormatTag;
542 Instance->WaveFormatEx.nChannels = WaveFormat->nChannels;
543 Instance->WaveFormatEx.nSamplesPerSec = WaveFormat->nSamplesPerSec;
544 Instance->WaveFormatEx.nBlockAlign = WaveFormat->nBlockAlign;
545 Instance->WaveFormatEx.nAvgBytesPerSec = WaveFormat->nAvgBytesPerSec;
599 IN DWORD dwNumberOfBytesTransferred,
661 DeviceInfo->Header.PresentationTime.Numerator = 1;
662 DeviceInfo->Header.PresentationTime.Denominator = 1;
669 if (Overlap->Standard.hEvent ==
NULL)
776 *InterfaceSize =
DeviceInfo.u.Interface.DeviceInterfaceStringSize;
780 if (InterfaceLength <
DeviceInfo.u.Interface.DeviceInterfaceStringSize)
786 DeviceInfo.u.Interface.DeviceInterfaceStringSize = InterfaceLength;
#define IOCTL_SETDEVICE_STATE
struct tagWAVEINCAPSW * LPWAVEINCAPSW
#define IOCTL_GETCONTROLDETAILS
DWORD WINAPI WaitForSingleObjectEx(IN HANDLE hHandle, IN DWORD dwMilliseconds, IN BOOL bAlertable)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IOCTL_QUERYDEVICEINTERFACESTRING
#define IOCTL_GETCAPABILITIES
struct tMIXERCONTROLDETAILS * LPMIXERCONTROLDETAILS
WCHAR DevicePath[ANYSIZE_ARRAY]
WCHAR szPname[MAXPNAMELEN]
HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *class, LPCWSTR enumstr, HWND parent, DWORD flags)
MMRESULT GetSoundDeviceIdentifier(IN PSOUND_DEVICE SoundDevice, OUT PVOID *Identifier)
#define MMSUCCESS(result)
struct tagMIXERCAPSW * LPMIXERCAPSW
BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO DeviceInfoSet, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData, DWORD DeviceInterfaceDetailDataSize, PDWORD RequiredSize, PSP_DEVINFO_DATA DeviceInfoData)
#define IOCTL_GETLINEINFO
MMRESULT TranslateInternalMmResult(IN MMRESULT Result)
#define INVALID_HANDLE_VALUE
MMRESULT WdmAudSetWaveDeviceFormatByLegacy(IN PSOUND_DEVICE_INSTANCE Instance, IN DWORD DeviceId, IN PWAVEFORMATEX WaveFormat, IN DWORD WaveFormatSize)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define CopyWideString(dest, source)
struct tWAVEFORMATEX WAVEFORMATEX
WCHAR szPname[MAXPNAMELEN]
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
#define VALIDATE_MMSYS_PARAMETER(parameter_condition)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
struct _SOUND_DEVICE_INSTANCE * PSOUND_DEVICE_INSTANCE
MMRESULT WdmAudQueryMixerInfoByLegacy(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN DWORD DeviceId, IN UINT uMsg, IN LPVOID Parameter, IN DWORD Flags)
struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA_W
MMRESULT WdmAudGetWavePositionByLegacy(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN MMTIME *Time)
DWORD WINAPI MixerEventThreadRoutine(LPVOID Parameter)
BOOL WINAPI ReadFileEx(IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead OPTIONAL, IN LPOVERLAPPED lpOverlapped, IN LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
_Must_inspect_result_ typedef _Out_ PHIDP_CAPS Capabilities
MMRESULT WdmAudOpenSoundDeviceByLegacy(IN PSOUND_DEVICE SoundDevice, OUT PVOID *Handle)
#define IOCTL_GETLINECONTROLS
VOID CALLBACK LegacyCompletionRoutine(IN DWORD dwErrorCode, IN DWORD dwNumberOfBytesTransferred, IN LPOVERLAPPED lpOverlapped)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
#define SND_ASSERT(condition)
_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
WCHAR Data[ANYSIZE_ARRAY]
#define IOCTL_OPEN_WDMAUD
struct tagMIDIINCAPSW * LPMIDIINCAPSW
#define MXDM_SETCONTROLDETAILS
struct _LARGE_INTEGER::@2284 u
MMRESULT WdmAudGetNumWdmDevsByLegacy(IN MMDEVICE_TYPE DeviceType, OUT DWORD *DeviceCount)
MMRESULT WdmAudCleanupByLegacy()
#define MXDM_GETCONTROLDETAILS
struct _SOUND_OVERLAPPED * PSOUND_OVERLAPPED
WCHAR szPname[MAXPNAMELEN]
_Must_inspect_result_ _In_ ULONG Flags
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
struct tagWAVEOUTCAPSW * LPWAVEOUTCAPSW
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
MMRESULT WdmAudResetStreamByLegacy(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN MMDEVICE_TYPE DeviceType, IN BOOLEAN bStartReset)
#define IOCTL_GETNUMDEVS_TYPE
struct _DeviceInfo DeviceInfo
struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W * PSP_DEVICE_INTERFACE_DETAIL_DATA_W
#define MMSYSERR_NOTSUPPORTED
WCHAR szPname[MAXPNAMELEN]
struct tagMIXERLINEW * LPMIXERLINEW
#define MXDM_GETLINECONTROLS
DWORD SyncOverlappedDeviceIoControl(IN HANDLE Handle, IN DWORD IoControlCode, IN LPVOID InBuffer, IN DWORD InBufferSize, OUT LPVOID OutBuffer, IN DWORD OutBufferSize, OUT LPDWORD BytesTransferred OPTIONAL)
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
MMRESULT WdmAudGetDeviceInterfaceStringByLegacy(IN MMDEVICE_TYPE DeviceType, IN DWORD DeviceId, IN LPWSTR Interface, IN DWORD InterfaceLength, OUT DWORD *InterfaceSize)
MMRESULT WdmAudSetWaveStateByLegacy(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN BOOL bStart)
void(CALLBACK * LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD, LPOVERLAPPED)
LPOVERLAPPED_COMPLETION_ROUTINE OriginalCompletionRoutine
#define MMSYSERR_MOREDATA
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
MMRESULT GetSoundDeviceType(IN PSOUND_DEVICE SoundDevice, OUT PMMDEVICE_TYPE DeviceType)
MMRESULT WdmAudGetCapabilitiesByLegacy(IN PSOUND_DEVICE SoundDevice, IN DWORD DeviceId, OUT PVOID Capabilities, IN DWORD CapabilitiesSize)
BOOL WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, CONST GUID *InterfaceClassGuid, DWORD MemberIndex, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
struct WDMAUD_DEVICE_INFO * PWDMAUD_DEVICE_INFO
#define IS_VALID_SOUND_DEVICE_TYPE(x)
MMRESULT WdmAudCommitWaveBufferByLegacy(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, IN PVOID OffsetPtr, IN DWORD Length, IN PSOUND_OVERLAPPED Overlap, IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine)
struct tagMIDIOUTCAPSW * LPMIDIOUTCAPSW
#define IOCTL_CLOSE_WDMAUD
WCHAR szPname[MAXPNAMELEN]
#define DIGCF_DEVICEINTERFACE
MMRESULT WdmAudCloseSoundDeviceByLegacy(IN struct _SOUND_DEVICE_INSTANCE *SoundDeviceInstance, IN PVOID Handle)
struct _SP_DEVICE_INTERFACE_DATA SP_DEVICE_INTERFACE_DATA
struct tagMIXERLINECONTROLSW * LPMIXERLINECONTROLSW
#define IOCTL_GET_MIXER_EVENT
#define IOCTL_GETFRAMESIZE
#define RtlCopyMemory(Destination, Source, Length)
#define IOCTL_SETCONTROLDETAILS
MMRESULT GetSoundDeviceFromInstance(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, OUT PSOUND_DEVICE *SoundDevice)
BOOL WINAPI DriverCallback(DWORD dwCallBack, UINT uFlags, HDRVR hDev, UINT wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2)
#define IOCTL_RESET_STREAM
#define FILE_FLAG_OVERLAPPED
MMRESULT GetSoundDeviceInstanceHandle(IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, OUT PVOID *Handle)
BOOL WINAPI WriteFileEx(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, IN LPOVERLAPPED lpOverlapped, IN LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
MMRESULT WdmAudSetMixerDeviceFormatByLegacy(IN PSOUND_DEVICE_INSTANCE Instance, IN DWORD DeviceId, IN PWAVEFORMATEX WaveFormat, IN DWORD WaveFormatSize)
#define HeapFree(x, y, z)
static PLARGE_INTEGER Time