/*++ Copyright (c) 2000 Microsoft Corporation Module Name: ExchangeServerSetup.cpp Abstract: This is a non-reusable patch for Exchange Server Setup 5.5 for SP2 and SP3 to change the parameters passed to xcopy. The reason for that is that Win2k's xcopy doesn't have the /y parameter a default parameter. Notes: This is an app specific shim. History: 02/16/2000 clupu Created --*/ #include "precomp.h" IMPLEMENT_SHIM_BEGIN(ExchangeServerSetup) #include "ShimHookMacro.h" APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(CreateProcessW) APIHOOK_ENUM_END /*++ Change the parameters passed to xcopy. --*/ BOOL APIHOOK(CreateProcessW)( LPWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) { BOOL bRet; if (lpCommandLine != NULL) { int cchSize = lstrlenW(lpCommandLine); WCHAR ch; if (cchSize > 12) { DPFN( eDbgLevelInfo, "[CreateProcessW] for \"%ws\".\n", lpCommandLine); ch = lpCommandLine[11]; lpCommandLine[11] = 0; if (CompareStringW(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT), NORM_IGNORECASE, lpCommandLine, -1, L"xcopy /s /e", -1 ) == CSTR_EQUAL) { StringCchCopyW(lpCommandLine, cchSize + 1, L"xcopy /sye "); lpCommandLine[11] = ch; DPFN( eDbgLevelInfo, "[CreateProcessW] changed to \"%ws\".\n", lpCommandLine); } else { lpCommandLine[11] = ch; } } } bRet = ORIGINAL_API(CreateProcessW)( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); return bRet; } /*++ Register hooked functions --*/ HOOK_BEGIN APIHOOK_ENTRY(KERNEL32.DLL, CreateProcessW) HOOK_END IMPLEMENT_SHIM_END