From 9c9baca4a78ee9e8bc9bfa78968492e7d544fe2f Mon Sep 17 00:00:00 2001 From: Rodrigo Todescatto <90097545+Rodrigo-Todescatto@users.noreply.github.com> Date: Tue, 27 Jan 2026 17:40:14 -0300 Subject: [PATCH] MMDevAPI stub --- projects/WinDurango.MMDevAPI/CMakeLists.txt | 29 ++++++++ projects/WinDurango.MMDevAPI/Exports.def | 7 ++ .../WinDurango.MMDevAPI/WinDurango.MMDevAPI.h | 8 +++ .../src/WinDurango.MMDevAPI.cpp | 69 +++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 projects/WinDurango.MMDevAPI/CMakeLists.txt create mode 100644 projects/WinDurango.MMDevAPI/Exports.def create mode 100644 projects/WinDurango.MMDevAPI/include/WinDurango.MMDevAPI/WinDurango.MMDevAPI.h create mode 100644 projects/WinDurango.MMDevAPI/src/WinDurango.MMDevAPI.cpp diff --git a/projects/WinDurango.MMDevAPI/CMakeLists.txt b/projects/WinDurango.MMDevAPI/CMakeLists.txt new file mode 100644 index 0000000..c25ade3 --- /dev/null +++ b/projects/WinDurango.MMDevAPI/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 4.0) +project(WinDurango.MMDevAPI VERSION 1.0.0) + +set(VERSION_SUFFIX "-dev.1") # used for non-stable versions, otherwise blank +set(CMAKE_CXX_STANDARD 20) + +set(FILES + include/WinDurango.MMDevAPI/WinDurango.MMDevAPI.h + src/WinDurango.MMDevAPI.cpp + Exports.def +) + +add_library(WinDurango.MMDevAPI SHARED ${FILES}) + +target_link_libraries(WinDurango.MMDevAPI PRIVATE WinDurango.Common) + +target_include_directories(WinDurango.MMDevAPI PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include/WinDurango.MMDevAPI/ + ../WinDurango.Common/include/ +) + +target_link_options(WinDurango.MMDevAPI + PUBLIC + $<$:/FORCE:MULTIPLE> +) + +set_target_properties(WinDurango.MMDevAPI PROPERTIES + OUTPUT_NAME "mmdevapi" +) diff --git a/projects/WinDurango.MMDevAPI/Exports.def b/projects/WinDurango.MMDevAPI/Exports.def new file mode 100644 index 0000000..35c7e7e --- /dev/null +++ b/projects/WinDurango.MMDevAPI/Exports.def @@ -0,0 +1,7 @@ +LIBRARY MMDevAPI +EXPORTS + RestoreBitstreamOut = RestoreBitstreamOut + DisableBitstreamOut = DisableBitstreamOut + EnableSpatialAudio = EnableSpatialAudio + SetWasapiThreadAffinityMask = SetWasapiThreadAffinityMask + RefreshWasapiDeviceList = RefreshWasapiDeviceList \ No newline at end of file diff --git a/projects/WinDurango.MMDevAPI/include/WinDurango.MMDevAPI/WinDurango.MMDevAPI.h b/projects/WinDurango.MMDevAPI/include/WinDurango.MMDevAPI/WinDurango.MMDevAPI.h new file mode 100644 index 0000000..75b503d --- /dev/null +++ b/projects/WinDurango.MMDevAPI/include/WinDurango.MMDevAPI/WinDurango.MMDevAPI.h @@ -0,0 +1,8 @@ +#pragma once +#include + +void DisableBitstreamOut(); +HRESULT EnableSpatialAudio(); +void RestoreBitstreamOut(); +DWORD_PTR SetWasapiThreadAffinityMask(DWORD_PTR dwThreadAffinityMask); +void RefreshWasapiDeviceList(); \ No newline at end of file diff --git a/projects/WinDurango.MMDevAPI/src/WinDurango.MMDevAPI.cpp b/projects/WinDurango.MMDevAPI/src/WinDurango.MMDevAPI.cpp new file mode 100644 index 0000000..591d415 --- /dev/null +++ b/projects/WinDurango.MMDevAPI/src/WinDurango.MMDevAPI.cpp @@ -0,0 +1,69 @@ +#include "WinDurango.MMDevAPI.h" + +void DisableBitstreamOut() +{ + MessageBoxW(nullptr, L"TODO: MMDevAPI::DisableBitstreamOut", L"TODO:", MB_OK | MB_ICONERROR); +} +HRESULT EnableSpatialAudio() +{ + MessageBoxW(nullptr, L"TODO: MMDevAPI::EnableSpatialAudio", L"TODO:", MB_OK | MB_ICONERROR); + return S_OK; +} +void RestoreBitstreamOut() +{ + MessageBoxW(nullptr, L"TODO: MMDevAPI::RestoreBitstreamOut", L"TODO:", MB_OK | MB_ICONERROR); +} +DWORD_PTR SetWasapiThreadAffinityMask(DWORD_PTR dwThreadAffinityMask) +{ + return dwThreadAffinityMask; +} +void RefreshWasapiDeviceList() +{ + MessageBoxW(nullptr, L"TODO: MMDevAPI::RefreshWasapiDeviceList", L"TODO:", MB_OK | MB_ICONERROR); +} + + +//PC Exports +#define MMDEVAPI_EXPORT(Name) __pragma(comment(linker, "/export:" #Name "=C:\\WINDOWS\\System32\\MMDevAPI." #Name)) +#define MMDEVAPI_EXPORT_ORDINAL(Name, Ordinal) \ + __pragma(comment(linker, "/export:" #Name "=C:\\WINDOWS\\System32\\MMDevAPI." #Name ",@" #Ordinal)) +#define MMDEVAPI_EXPORT_ORDINAL_PRIVATE(Name, Ordinal) \ + __pragma(comment(linker, "/export:" #Name "=C:\\WINDOWS\\System32\\MMDevAPI.#" #Ordinal ",@" #Ordinal ",NONAME")) + +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(CleanupDeviceAPI, 2) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(InitializeDeviceAPI, 3) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(MMDeviceCreateRegistryPropertyStore, 4) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(MMDeviceGetDeviceEnumerator, 5) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(MMDeviceGetEndpointManager, 6) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(GetClassFromEndpointId, 7) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(GetEndpointGuidFromEndpointId, 8) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(GetSessionIdFromEndpointId, 9) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(RegisterForMediaCallback, 10) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(UnregisterMediaCallback, 11) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(GenerateMediaEvent, 12) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(AETraceOutputDebugString, 13) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(MMDeviceGetPolicyConfig, 14) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(FlushDeviceTopologyCache, 15) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(GetNeverSetAsDefaultProperty, 16) +MMDEVAPI_EXPORT_ORDINAL(ActivateAudioInterfaceAsync, 17) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(GetEndpointIdFromDeviceInterfaceId, 18) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevFindMmDevProperty, 19) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetInterfacePropertyStore, 20) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetInterfaceIdFromMMDevice, 21) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetInterfaceDataFlow, 22) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetMMDeviceFromInterfaceId, 23) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetInterfaceClassGuid, 24) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetMMDeviceIdFromInterfaceId, 25) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetInstanceIdFromInterfaceId, 26) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetRelatedInterfaceId, 27) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetInterfaceIdFromMMDeviceId, 28) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetInstanceIdFromMMDeviceId, 29) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetEndpointFormFactorFromMMDeviceId, 30) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(mmdDevGetDeviceIdFromPnpInterface, 31) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(GetCategoryPath, 32) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(MMDeviceCreateRegistryPropertyStore2, 33) +MMDEVAPI_EXPORT_ORDINAL_PRIVATE(MMDeviceCreateAudioSystemEffectsPropertyStore, 34) +MMDEVAPI_EXPORT_ORDINAL(DllCanUnloadNow, 35) +MMDEVAPI_EXPORT_ORDINAL(DllGetClassObject, 36) +MMDEVAPI_EXPORT_ORDINAL(DllRegisterServer, 37) +MMDEVAPI_EXPORT_ORDINAL(DllUnregisterServer, 38) \ No newline at end of file