/*++

 Copyright (c) 2000 Microsoft Corporation

 Module Name:

    UrbanChaos.cpp

 Abstract:

    The sound system (Miles) uses a very high-resolution timer: 32ms. The app
    has badly designed message loop code. Instead of running everything off the
    loop, they have their movie playing code interspersed with a call to 
    empty the queue. Unfortunately for them, the queue on NT is almost always 
    filled with these timer messages, so their code to keep track of how far
    along their movie is gets starved.

    To fix this we reduce the timer resolution.

 Notes:

    This is an app specific shim.


 History:
        
    10/31/2000 linstev  Created

--*/

#include "precomp.h"

IMPLEMENT_SHIM_BEGIN(UrbanChaos)
#include "ShimHookMacro.h"

APIHOOK_ENUM_BEGIN
    APIHOOK_ENUM_ENTRY(SetTimer) 
APIHOOK_ENUM_END

/*++

 Reduce the timer resolution to a managable level.

--*/

UINT_PTR
APIHOOK(SetTimer)(
    HWND hWnd,              
    UINT nIDEvent,          
    UINT uElapse,           
    TIMERPROC lpTimerFunc   
    )
{
    // Reduce timer resolution
    if (uElapse < 100)
    {
        uElapse = 500;
    }

    return ORIGINAL_API(SetTimer)(hWnd, nIDEvent, uElapse, lpTimerFunc);
}

/*++

 Register hooked functions

--*/

HOOK_BEGIN

    APIHOOK_ENTRY(USER32.DLL, SetTimer)

HOOK_END

IMPLEMENT_SHIM_END