Windows2003-3790/windows/appcompat/shims/specific/suda2000.cpp

91 lines
2.2 KiB
C++
Raw Permalink Normal View History

2001-01-01 00:00:00 +01:00
/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
Suda2000.cpp
Abstract:
Call to GetTempPathA is not getting enough buffer and it is returning some
garbage value, so GetTempFileNameA fails. This hooked API, GetTempPathA
returns a constant string "%temp%". GetTempFileNameA expands the environment
variable ("%temp%") and returns a valid path name.
History:
06/15/2001 mamathas Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(Suda2000)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(GetTempPathA)
APIHOOK_ENUM_ENTRY(GetTempFileNameA)
APIHOOK_ENUM_END
/*++
This stub function intercepts all calls to GetTempPathA and sets lpBuffer[out]
with a constant string "%temp%" and returns the length.
--*/
DWORD
APIHOOK(GetTempPathA)(
DWORD nBufferLength,
LPSTR lpBuffer
)
{
LOGN(eDbgLevelError,
"GetTempPathA: Returns invalid Temp Path (%S)\n Changed to %tmp%", lpBuffer);
StringCchCopyA(lpBuffer, nBufferLength, "%temp%");
return strlen(lpBuffer);
}
/*++
This stub function intercepts all calls to GetTempFileNameA and sets lpPathName
with valid path and then calls the original API.
--*/
UINT
APIHOOK(GetTempFileNameA)(
LPCTSTR lpPathName, // directory name
LPCTSTR lpPrefixString, // file name prefix
UINT uUnique, // integer for use in creating the temporary file name
LPTSTR lpTempFileName // file name buffer
)
{
CHAR szDestinationString[MAX_PATH];
ZeroMemory(szDestinationString, MAX_PATH);
ExpandEnvironmentStringsA((LPCSTR)lpPathName, (LPSTR)szDestinationString, MAX_PATH);
LOGN(eDbgLevelInfo,
"ExpandEnvironmentStringsA: Returned the value of environment variable, \"%temp%\" = (%S) ", szDestinationString);
return ORIGINAL_API(GetTempFileNameA)((LPCSTR)szDestinationString, (LPCSTR)lpPrefixString,uUnique,(LPSTR)lpTempFileName);
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, GetTempPathA)
APIHOOK_ENTRY(KERNEL32.DLL, GetTempFileNameA)
HOOK_END
IMPLEMENT_SHIM_END