/*++ Copyright (c) 2000 Microsoft Corporation Module Name: WaveOutUsePreferredDevice.cpp Abstract: Force the use of the preferred waveOut device (rather than a specific device) Notes: This is a general purpose shim. History: 06/02/1999 robkenny Created --*/ #include "precomp.h" IMPLEMENT_SHIM_BEGIN(WaveOutUsePreferredDevice) #include "ShimHookMacro.h" APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(waveOutOpen) APIHOOK_ENUM_ENTRY(waveOutGetDevCapsA) APIHOOK_ENUM_ENTRY(waveOutGetDevCapsW) APIHOOK_ENUM_ENTRY(wod32Message) APIHOOK_ENUM_END /*+ Call waveOutOpen, saving dwCallback if it is a function. --*/ MMRESULT APIHOOK(waveOutOpen)( LPHWAVEOUT phwo, UINT uDeviceID, LPWAVEFORMATEX pwfx, DWORD dwCallback, DWORD dwCallbackInstance, DWORD fdwOpen ) { MMRESULT returnValue = ORIGINAL_API(waveOutOpen)(phwo, WAVE_MAPPER, pwfx, dwCallback, dwCallbackInstance, fdwOpen); return returnValue; } MMRESULT APIHOOK(waveOutGetDevCapsA)( UINT uDeviceID, LPWAVEOUTCAPSA pwoc, UINT cbwoc) { MMRESULT returnValue = ORIGINAL_API(waveOutGetDevCapsA)(WAVE_MAPPER, pwoc, cbwoc); return returnValue; } MMRESULT APIHOOK(waveOutGetDevCapsW)( UINT uDeviceID, LPWAVEOUTCAPSW pwoc, UINT cbwoc) { MMRESULT returnValue = ORIGINAL_API(waveOutGetDevCapsW)(WAVE_MAPPER, pwoc, cbwoc); return returnValue; } /*+ Catch the 16 bit applications, WOW calls this routine for 16 bit apps. --*/ #define WODM_GETDEVCAPS 4 #define WODM_OPEN 5 DWORD APIHOOK(wod32Message)( UINT uDeviceID, UINT uMessage, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 ) { // Change device 0 to WAVE_MAPPER for Open and GetDevCaps if (uDeviceID == 0) { if (uMessage == WODM_OPEN || uMessage == WODM_GETDEVCAPS) { uDeviceID = -1; // Force device to WAVE_MAPPER } } MMRESULT returnValue = ORIGINAL_API(wod32Message)(uDeviceID, uMessage, dwInstance, dwParam1, dwParam2); return returnValue; } /*++ Register hooked functions --*/ HOOK_BEGIN APIHOOK_ENTRY(WINMM.DLL, waveOutOpen) APIHOOK_ENTRY(WINMM.DLL, waveOutGetDevCapsA) APIHOOK_ENTRY(WINMM.DLL, waveOutGetDevCapsW) APIHOOK_ENTRY(WINMM.DLL, wod32Message) HOOK_END IMPLEMENT_SHIM_END