Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
CorrectACMStreamOpen.cpp
Abstract: This shim corrects the samples per block for acmStreamOpen so that it will pass IMA ADPCM's parameter validation.
Notes:
This is a general shim.
History:
08/09/2002 mnikkel Created
--*/
#include "precomp.h"
#include "msacmdrv.h"
typedef MMRESULT (*_pfn_acmStreamOpen)(LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen );
IMPLEMENT_SHIM_BEGIN(CorrectACMStreamOpen) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(acmStreamOpen) APIHOOK_ENUM_END /*++
If the wSamplesPerBlock is 1017 samples change it to 505 samples so it will pass IMA ADPCM's parameter validation. --*/
MMRESULT APIHOOK(acmStreamOpen)( LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen ) { if ( pwfxSrc && (WAVE_FORMAT_IMA_ADPCM == pwfxSrc->wFormatTag) && (256 == pwfxSrc->nBlockAlign) && (1017 == ((LPIMAADPCMWAVEFORMAT)(pwfxSrc))->wSamplesPerBlock)) { ((LPIMAADPCMWAVEFORMAT)(pwfxSrc))->wSamplesPerBlock = 505; DPFN( eDbgLevelError, "[acmStreamOpen] changing samples per block to 505"); }
return acmStreamOpen( phas, had, pwfxSrc, pwfxDst, pwfltr, dwCallback, dwInstance, fdwOpen); }
/*++
Register hooked functions
--*/
HOOK_BEGIN APIHOOK_ENTRY(MSACM32.DLL, acmStreamOpen) HOOK_END
IMPLEMENT_SHIM_END
|