95 lines
2.2 KiB
C++
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 |