Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Windows Multimedia Module (winmm.dll) hook #216

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
2 changes: 2 additions & 0 deletions ReShade.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,7 @@
<ModuleDefinitionFile>res\exports.def</ModuleDefinitionFile>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<DelayLoadDLLs>ws2_32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalDependencies>Shlwapi.lib;WinInet.lib;WS2_32.lib;Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<FxCompile>
<ShaderModel>4.0</ShaderModel>
Expand Down Expand Up @@ -621,6 +622,7 @@
<ClCompile Include="source\windows\dinput8.cpp" />
<ClCompile Include="source\windows\user32.cpp" />
<ClCompile Include="source\windows\ws2_32.cpp" />
<ClCompile Include="source\windows\winmm.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="include\reshade.hpp" />
Expand Down
3 changes: 3 additions & 0 deletions ReShade.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,9 @@
<ClCompile Include="source\windows\ws2_32.cpp">
<Filter>hooks\windows</Filter>
</ClCompile>
<ClCompile Include="source\windows\winmm.cpp">
<Filter>hooks\windows</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="source\dll_log.hpp">
Expand Down
182 changes: 182 additions & 0 deletions res/exports.def
Original file line number Diff line number Diff line change
Expand Up @@ -477,3 +477,185 @@ EXPORTS
; dinput8.dll
DirectInput8Create PRIVATE
GetdfDIJoystick PRIVATE

; winmm.dll (winmm.lib)
CloseDriver = HookCloseDriver PRIVATE
DefDriverProc = HookDefDriverProc PRIVATE
DriverCallback = HookDriverCallback PRIVATE
DrvGetModuleHandle = HookDrvGetModuleHandle PRIVATE
GetDriverModuleHandle = HookGetDriverModuleHandle PRIVATE
OpenDriver = HookOpenDriver PRIVATE
; PlaySound = HookPlaySound PRIVATE
PlaySoundA = HookPlaySoundA PRIVATE
PlaySoundW = HookPlaySoundW PRIVATE
SendDriverMessage = HookSendDriverMessage PRIVATE
; WOWAppExit = HookWOWAppExit PRIVATE
auxGetDevCapsA = HookauxGetDevCapsA PRIVATE
auxGetDevCapsW = HookauxGetDevCapsW PRIVATE
auxGetNumDevs = HookauxGetNumDevs PRIVATE
auxGetVolume = HookauxGetVolume PRIVATE
auxOutMessage = HookauxOutMessage PRIVATE
auxSetVolume = HookauxSetVolume PRIVATE
joyConfigChanged = HookjoyConfigChanged PRIVATE
joyGetDevCapsA = HookjoyGetDevCapsA PRIVATE
joyGetDevCapsW = HookjoyGetDevCapsW PRIVATE
joyGetNumDevs = HookjoyGetNumDevs PRIVATE
joyGetPos = HookjoyGetPos PRIVATE
joyGetPosEx = HookjoyGetPosEx PRIVATE
joyGetThreshold = HookjoyGetThreshold PRIVATE
joyReleaseCapture = HookjoyReleaseCapture PRIVATE
joySetCapture = HookjoySetCapture PRIVATE
joySetThreshold = HookjoySetThreshold PRIVATE
mciDriverNotify = HookmciDriverNotify PRIVATE
mciDriverYield = HookmciDriverYield PRIVATE
;mciExecute = HookmciExecute PRIVATE
mciFreeCommandResource = HookmciFreeCommandResource PRIVATE
mciGetCreatorTask = HookmciGetCreatorTask PRIVATE
mciGetDeviceIDA = HookmciGetDeviceIDA PRIVATE
mciGetDeviceIDFromElementIDA = HookmciGetDeviceIDFromElementIDA PRIVATE
mciGetDeviceIDFromElementIDW = HookmciGetDeviceIDFromElementIDW PRIVATE
mciGetDeviceIDW = HookmciGetDeviceIDW PRIVATE
mciGetDriverData = HookmciGetDriverData PRIVATE
mciGetErrorStringA = HookmciGetErrorStringA PRIVATE
mciGetErrorStringW = HookmciGetErrorStringW PRIVATE
mciGetYieldProc = HookmciGetYieldProc PRIVATE
mciLoadCommandResource = HookmciLoadCommandResource PRIVATE
mciSendCommandA = HookmciSendCommandA PRIVATE
mciSendCommandW = HookmciSendCommandW PRIVATE
mciSendStringA = HookmciSendStringA PRIVATE
mciSendStringW = HookmciSendStringW PRIVATE
mciSetDriverData = HookmciSetDriverData PRIVATE
mciSetYieldProc = HookmciSetYieldProc PRIVATE
midiConnect = HookmidiConnect PRIVATE
midiDisconnect = HookmidiDisconnect PRIVATE
midiInAddBuffer = HookmidiInAddBuffer PRIVATE
midiInClose = HookmidiInClose PRIVATE
midiInGetDevCapsA = HookmidiInGetDevCapsA PRIVATE
midiInGetDevCapsW = HookmidiInGetDevCapsW PRIVATE
midiInGetErrorTextA = HookmidiInGetErrorTextA PRIVATE
midiInGetErrorTextW = HookmidiInGetErrorTextW PRIVATE
midiInGetID = HookmidiInGetID PRIVATE
midiInGetNumDevs = HookmidiInGetNumDevs PRIVATE
midiInMessage = HookmidiInMessage PRIVATE
midiInOpen = HookmidiInOpen PRIVATE
midiInPrepareHeader = HookmidiInPrepareHeader PRIVATE
midiInReset = HookmidiInReset PRIVATE
midiInStart = HookmidiInStart PRIVATE
midiInStop = HookmidiInStop PRIVATE
midiInUnprepareHeader = HookmidiInUnprepareHeader PRIVATE
midiOutCacheDrumPatches = HookmidiOutCacheDrumPatches PRIVATE
midiOutCachePatches = HookmidiOutCachePatches PRIVATE
midiOutClose = HookmidiOutClose PRIVATE
midiOutGetDevCapsA = HookmidiOutGetDevCapsA PRIVATE
midiOutGetDevCapsW = HookmidiOutGetDevCapsW PRIVATE
midiOutGetErrorTextA = HookmidiOutGetErrorTextA PRIVATE
midiOutGetErrorTextW = HookmidiOutGetErrorTextW PRIVATE
midiOutGetID = HookmidiOutGetID PRIVATE
midiOutGetNumDevs = HookmidiOutGetNumDevs PRIVATE
midiOutGetVolume = HookmidiOutGetVolume PRIVATE
midiOutLongMsg = HookmidiOutLongMsg PRIVATE
midiOutMessage = HookmidiOutMessage PRIVATE
midiOutOpen = HookmidiOutOpen PRIVATE
midiOutPrepareHeader = HookmidiOutPrepareHeader PRIVATE
midiOutReset = HookmidiOutReset PRIVATE
midiOutSetVolume = HookmidiOutSetVolume PRIVATE
midiOutShortMsg = HookmidiOutShortMsg PRIVATE
midiOutUnprepareHeader = HookmidiOutUnprepareHeader PRIVATE
midiStreamClose = HookmidiStreamClose PRIVATE
midiStreamOpen = HookmidiStreamOpen PRIVATE
midiStreamOut = HookmidiStreamOut PRIVATE
midiStreamPause = HookmidiStreamPause PRIVATE
midiStreamPosition = HookmidiStreamPosition PRIVATE
midiStreamProperty = HookmidiStreamProperty PRIVATE
midiStreamRestart = HookmidiStreamRestart PRIVATE
midiStreamStop = HookmidiStreamStop PRIVATE
mixerClose = HookmixerClose PRIVATE
mixerGetControlDetailsA = HookmixerGetControlDetailsA PRIVATE
mixerGetControlDetailsW = HookmixerGetControlDetailsW PRIVATE
mixerGetDevCapsA = HookmixerGetDevCapsA PRIVATE
mixerGetDevCapsW = HookmixerGetDevCapsW PRIVATE
mixerGetID = HookmixerGetID PRIVATE
mixerGetLineControlsA = HookmixerGetLineControlsA PRIVATE
mixerGetLineControlsW = HookmixerGetLineControlsW PRIVATE
mixerGetLineInfoA = HookmixerGetLineInfoA PRIVATE
mixerGetLineInfoW = HookmixerGetLineInfoW PRIVATE
mixerGetNumDevs = HookmixerGetNumDevs PRIVATE
mixerMessage = HookmixerMessage PRIVATE
mixerOpen = HookmixerOpen PRIVATE
mixerSetControlDetails = HookmixerSetControlDetails PRIVATE
mmDrvInstall = HookmmDrvInstall PRIVATE
;mmGetCurrentTask = HookmmGetCurrentTask PRIVATE
;mmTaskBlock = HookmmTaskBlock PRIVATE
;mmTaskCreate = HookmmTaskCreate PRIVATE
;mmTaskSignal = HookmmTaskSignal PRIVATE
;mmTaskYield = HookmmTaskYield PRIVATE
mmioAdvance = HookmmioAdvance PRIVATE
mmioAscend = HookmmioAscend PRIVATE
mmioClose = HookmmioClose PRIVATE
mmioCreateChunk = HookmmioCreateChunk PRIVATE
mmioDescend = HookmmioDescend PRIVATE
mmioFlush = HookmmioFlush PRIVATE
mmioGetInfo = HookmmioGetInfo PRIVATE
mmioInstallIOProcA = HookmmioInstallIOProcA PRIVATE
mmioInstallIOProcW = HookmmioInstallIOProcW PRIVATE
mmioOpenA = HookmmioOpenA PRIVATE
mmioOpenW = HookmmioOpenW PRIVATE
mmioRead = HookmmioRead PRIVATE
mmioRenameA = HookmmioRenameA PRIVATE
mmioRenameW = HookmmioRenameW PRIVATE
mmioSeek = HookmmioSeek PRIVATE
mmioSendMessage = HookmmioSendMessage PRIVATE
mmioSetBuffer = HookmmioSetBuffer PRIVATE
mmioSetInfo = HookmmioSetInfo PRIVATE
mmioStringToFOURCCA = HookmmioStringToFOURCCA PRIVATE
mmioStringToFOURCCW = HookmmioStringToFOURCCW PRIVATE
mmioWrite = HookmmioWrite PRIVATE
;mmsystemGetVersion = HookmmsystemGetVersion PRIVATE
sndPlaySoundA = HooksndPlaySoundA PRIVATE
sndPlaySoundW = HooksndPlaySoundW PRIVATE
timeBeginPeriod = HooktimeBeginPeriod PRIVATE
timeEndPeriod = HooktimeEndPeriod PRIVATE
timeGetDevCaps = HooktimeGetDevCaps PRIVATE
timeGetSystemTime = HooktimeGetSystemTime PRIVATE
timeGetTime = HooktimeGetTime PRIVATE
timeKillEvent = HooktimeKillEvent PRIVATE
timeSetEvent = HooktimeSetEvent PRIVATE
waveInAddBuffer = HookwaveInAddBuffer PRIVATE
waveInClose = HookwaveInClose PRIVATE
waveInGetDevCapsA = HookwaveInGetDevCapsA PRIVATE
waveInGetDevCapsW = HookwaveInGetDevCapsW PRIVATE
waveInGetErrorTextA = HookwaveInGetErrorTextA PRIVATE
waveInGetErrorTextW = HookwaveInGetErrorTextW PRIVATE
waveInGetID = HookwaveInGetID PRIVATE
waveInGetNumDevs = HookwaveInGetNumDevs PRIVATE
waveInGetPosition = HookwaveInGetPosition PRIVATE
waveInMessage = HookwaveInMessage PRIVATE
waveInOpen = HookwaveInOpen PRIVATE
waveInPrepareHeader = HookwaveInPrepareHeader PRIVATE
waveInReset = HookwaveInReset PRIVATE
waveInStart = HookwaveInStart PRIVATE
waveInStop = HookwaveInStop PRIVATE
waveInUnprepareHeader = HookwaveInUnprepareHeader PRIVATE
waveOutBreakLoop = HookwaveOutBreakLoop PRIVATE
waveOutClose = HookwaveOutClose PRIVATE
waveOutGetDevCapsA = HookwaveOutGetDevCapsA PRIVATE
waveOutGetDevCapsW = HookwaveOutGetDevCapsW PRIVATE
waveOutGetErrorTextA = HookwaveOutGetErrorTextA PRIVATE
waveOutGetErrorTextW = HookwaveOutGetErrorTextW PRIVATE
waveOutGetID = HookwaveOutGetID PRIVATE
waveOutGetNumDevs = HookwaveOutGetNumDevs PRIVATE
waveOutGetPitch = HookwaveOutGetPitch PRIVATE
waveOutGetPlaybackRate = HookwaveOutGetPlaybackRate PRIVATE
waveOutGetPosition = HookwaveOutGetPosition PRIVATE
waveOutGetVolume = HookwaveOutGetVolume PRIVATE
waveOutMessage = HookwaveOutMessage PRIVATE
waveOutOpen = HookwaveOutOpen PRIVATE
waveOutPause = HookwaveOutPause PRIVATE
waveOutPrepareHeader = HookwaveOutPrepareHeader PRIVATE
waveOutReset = HookwaveOutReset PRIVATE
waveOutRestart = HookwaveOutRestart PRIVATE
waveOutSetPitch = HookwaveOutSetPitch PRIVATE
waveOutSetPlaybackRate = HookwaveOutSetPlaybackRate PRIVATE
waveOutSetVolume = HookwaveOutSetVolume PRIVATE
waveOutUnprepareHeader = HookwaveOutUnprepareHeader PRIVATE
waveOutWrite = HookwaveOutWrite PRIVATE
5 changes: 5 additions & 0 deletions source/dll_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,11 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID)
reshade::hooks::register_module(get_system_path() / L"dinput8.dll");
}

// Register Windows Multimedia module in case it was used to load ReShade (but ignore otherwise)
if (_wcsicmp(module_name.c_str(), L"winmm") == 0)
reshade::hooks::register_module(get_system_path() / L"winmm.dll");


#if RESHADE_ADDON == 1
if (!GetEnvironmentVariableW(L"RESHADE_DISABLE_NETWORK_HOOK", nullptr, 0))
{
Expand Down
Loading