Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

77 lines
1.7 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
EmulateGetStdHandle.cpp
Abstract:
Normally, when a process is created, members hStdInput, hStdOutput, and
hStdError of STARTUPINFO struct are set to NULL. Some apps like
Baby-Sitters Club Activity Center and Baby-Sitters Club 3-rd Grade Disk 2
may check these handles and send Error messages.
This shim can be used in this case to send appropriate handles and prevent
program terminate.
History:
06/14/2000 a-vales created
11/29/2000 andyseti Converted into AppSpecific shim.
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(EmulateGetStdHandle)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(GetStdHandle)
APIHOOK_ENUM_END
HANDLE
APIHOOK(GetStdHandle)(
DWORD nStdHandle)
{
HANDLE hStd = ORIGINAL_API(GetStdHandle)(nStdHandle);
if (hStd == 0)
{
switch (nStdHandle)
{
case STD_INPUT_HANDLE:
LOGN( eDbgLevelError, "Correcting GetStdHandle(STD_INPUT_HANDLE). Returning handle = 1.");
hStd = (HANDLE) 1;
break;
case STD_OUTPUT_HANDLE:
LOGN( eDbgLevelError, "Correcting GetStdHandle(STD_OUTPUT_HANDLE). Returning handle = 2.");
hStd = (HANDLE) 2;
break;
case STD_ERROR_HANDLE:
LOGN( eDbgLevelError, "Correcting GetStdHandle(STD_ERROR_HANDLE). Returning handle = 3.");
hStd = (HANDLE) 3;
break;
}
}
return hStd;
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, GetStdHandle)
HOOK_END
IMPLEMENT_SHIM_END