Leaked source code of windows server 2003
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.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
MindSpring4.cpp
Abstract:
Shim to register the files using regedt32.exe The app creates *.dcu files during installation but fails to register them thus leading to no entires under the HKLM/Software/MindSpring Enterprise/MID4 subkey. This causes the the app to AV when run after successfull installation.
Notes:
This is an app specific shim.
History:
01/29/2001 a-leelat Created 03/13/2001 robkenny Converted to CString
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(MindSpring4) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(CopyFileA) APIHOOK_ENUM_END
BOOL APIHOOK(CopyFileA)( LPCSTR lpExistingFileName, // name of an existing file
LPCSTR lpNewFileName, // name of new file
BOOL bFailIfExists // operation if file exists
) { BOOL bRet = ORIGINAL_API(CopyFileA)( lpExistingFileName, lpNewFileName, bFailIfExists); if ( bRet != 0 ) { CSTRING_TRY { CString csExisting(lpExistingFileName); CString csExt; csExisting.SplitPath(NULL, NULL, NULL, &csExt); //Check if the file name has .dcu in it
//if so run regedit on it
if (csExt.CompareNoCase(L"dcu") == 0) { CString csCl(L"regedit.exe /s "); csCl += lpExistingFileName; STARTUPINFOW si; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); PROCESS_INFORMATION pi; ZeroMemory( &pi, sizeof(pi) ); BOOL bProc = CreateProcessW(NULL, (WCHAR *)csCl.Get(), // Stupid non-const api
NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); if (bProc) { WaitForSingleObject(pi.hProcess,INFINITE); } else { //Fail to run the regedit
DPFN(eDbgLevelInfo,"Failed to run regedit on %s\n",lpExistingFileName); } } } CSTRING_CATCH { // Do nothing
} }
return bRet; }
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, CopyFileA)
HOOK_END
IMPLEMENT_SHIM_END
|