Windows2003-3790/windows/appcompat/shims/specific/outlook98wizard.cpp
2020-09-30 16:53:55 +02:00

95 lines
2.2 KiB
C++

/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
Outlook98Wizard.cpp
Abstract:
This DLL hooks VerQueryValue, and will return English Language information
for Japanese outlook 98 setup file.
Notes:
This is an app specific shim.
History:
01/21/2002 v-rbabu Created
--*/
#include "precomp.h"
#include "string.h"
IMPLEMENT_SHIM_BEGIN(Outlook98Wizard)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(VerQueryValueA)
APIHOOK_ENUM_END
/*++
The actual problem is, the outlook 98 setup is comparing the language
informations of the Shell32.dll and the setup file (outlwzd.exe). But
according to the bug scenario, the system is having English OS and Japanese
Locale. So, Shell32.dll have English language as its language. So, this
differs with the Language informaiton of Japanese Outlook setuip file.
So, setup thorows an error that the Language of the outlook 98 going to be
installed differs with the system language.
This stub function lie about the language information of the outlook setup
file. Though the setup file is Japanese as language informaiton, this shim
returns as if it is English.
--*/
BOOL
APIHOOK(VerQueryValueA)(
const LPVOID pBlock,
LPSTR lpSubBlock,
LPVOID *lplpBuffer,
PUINT puLen
)
{
BOOL bRet = ORIGINAL_API(VerQueryValueA)(pBlock, lpSubBlock, lplpBuffer, puLen);
if (bRet) {
CSTRING_TRY
{
//
// If trying to get the \VarFileInfo\Translation, then assign English
// Language information to the output buffer.
//
CString csSubBlockString(lpSubBlock);
if (lplpBuffer && (csSubBlockString.Find(L"\\VarFileInfo\\Translation") != -1)) {
// Adjust the version info
LOGN(eDbgLevelInfo, "[VerQueryValueA] Return modified version info");
*lplpBuffer = L"03a40409";
}
}
CSTRING_CATCH
{
// Do nothing
}
}
return bRet;
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(VERSION.DLL, VerQueryValueA)
HOOK_END
IMPLEMENT_SHIM_END