159 lines
3.7 KiB
C++
159 lines
3.7 KiB
C++
/*++
|
|
|
|
Copyright (c) 2002 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
EmulateGetUIEffects.cpp
|
|
|
|
Abstract:
|
|
|
|
Force SPI_GETUIEFFECTS to FALSE if this is a remote (TS) session
|
|
|
|
History:
|
|
|
|
08/07/2002 linstev Created
|
|
08/22/2002 robkenny Converted to a general shim
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
IMPLEMENT_SHIM_BEGIN(EmulateGetUIEffects)
|
|
#include "ShimHookMacro.h"
|
|
|
|
APIHOOK_ENUM_BEGIN
|
|
APIHOOK_ENUM_ENTRY(SystemParametersInfoA)
|
|
APIHOOK_ENUM_ENTRY(SystemParametersInfoW)
|
|
APIHOOK_ENUM_END
|
|
|
|
BOOL bGetUIEffects = FALSE;
|
|
|
|
|
|
/*++
|
|
|
|
If the caller was after SPI_GETUIEFFECTS and this is a TS session
|
|
force the value to the value specified on the command line.
|
|
|
|
--*/
|
|
|
|
|
|
VOID CorrectGetUIEffects(
|
|
UINT uiAction, // system parameter to retrieve or set
|
|
UINT uiParam, // depends on action to be taken
|
|
PVOID pvParam, // depends on action to be taken
|
|
UINT fWinIni // user profile update option
|
|
)
|
|
{
|
|
if (pvParam && (uiAction == SPI_GETUIEFFECTS))
|
|
{
|
|
if (GetSystemMetrics(SM_REMOTESESSION))
|
|
{
|
|
BOOL * bUiEffect = (BOOL *)pvParam;
|
|
|
|
// Only spew the message if we are actually changing the value
|
|
if (*bUiEffect != bGetUIEffects)
|
|
{
|
|
LOGN(eDbgLevelWarning, "SystemParametersInfoA: Forcing SPI_GETUIEFFECTS to %s", bGetUIEffects ? "TRUE" : "FALSE");
|
|
|
|
*bUiEffect = bGetUIEffects;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*++
|
|
|
|
Force SPI_GETUIEFFECTS to bGetUIEffects (defaults to FALSE) if this is a remote (TS) session
|
|
|
|
--*/
|
|
|
|
BOOL
|
|
APIHOOK(SystemParametersInfoA)(
|
|
UINT uiAction, // system parameter to retrieve or set
|
|
UINT uiParam, // depends on action to be taken
|
|
PVOID pvParam, // depends on action to be taken
|
|
UINT fWinIni // user profile update option
|
|
)
|
|
{
|
|
BOOL bRet = ORIGINAL_API(SystemParametersInfoA)(uiAction, uiParam, pvParam, fWinIni);
|
|
|
|
if (bRet)
|
|
{
|
|
CorrectGetUIEffects(uiAction, uiParam, pvParam, fWinIni);
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
BOOL
|
|
APIHOOK(SystemParametersInfoW)(
|
|
UINT uiAction, // system parameter to retrieve or set
|
|
UINT uiParam, // depends on action to be taken
|
|
PVOID pvParam, // depends on action to be taken
|
|
UINT fWinIni // user profile update option
|
|
)
|
|
{
|
|
BOOL bRet = ORIGINAL_API(SystemParametersInfoW)(uiAction, uiParam, pvParam, fWinIni);
|
|
|
|
if (bRet)
|
|
{
|
|
CorrectGetUIEffects(uiAction, uiParam, pvParam, fWinIni);
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
BOOL
|
|
NOTIFY_FUNCTION(
|
|
DWORD fdwReason)
|
|
{
|
|
switch (fdwReason)
|
|
{
|
|
case DLL_PROCESS_ATTACH:
|
|
{
|
|
CSTRING_TRY
|
|
{
|
|
CString csCl(COMMAND_LINE);
|
|
if (csCl.CompareNoCase(L"true") == 0)
|
|
{
|
|
DPFN(eDbgLevelSpew, "EmulateGetUIEffects command line forcing SPI_GETUIEFFECTS to TRUE");
|
|
bGetUIEffects = TRUE;
|
|
}
|
|
else if (csCl.CompareNoCase(L"false") == 0)
|
|
{
|
|
DPFN(eDbgLevelSpew, "EmulateGetUIEffects command line forcing SPI_GETUIEFFECTS to FALSE");
|
|
bGetUIEffects = FALSE;
|
|
}
|
|
}
|
|
CSTRING_CATCH
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*++
|
|
|
|
Register hooked functions
|
|
|
|
--*/
|
|
|
|
HOOK_BEGIN
|
|
|
|
CALL_NOTIFY_FUNCTION
|
|
|
|
APIHOOK_ENTRY(USER32.DLL, SystemParametersInfoA)
|
|
APIHOOK_ENTRY(USER32.DLL, SystemParametersInfoW)
|
|
HOOK_END
|
|
|
|
IMPLEMENT_SHIM_END
|
|
|