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.
 
 
 
 
 
 

77 lines
1.9 KiB

/*
Astub.cpp
*/
#include "windows.h"
#include "shlwapi.h"
#include "badstrfunctions.h"
#define ARRAYSIZE(_exp_) (sizeof(_exp_) / sizeof(_exp_[0]))
static LPCTSTR c_rgszEXEList[] =
{
TEXT("internal.exe\" /Q"),
TEXT("wabinst.exe\" /R:N /Q"),
TEXT("setup50.exe\" /app:oe /install /prompt"),
#if defined(_X86_)
TEXT("polmod.exe\" /R:N /Q"),
#endif
};
BOOL CreateProcessAndWait(LPTSTR pszExe, DWORD *pdwRetValue)
{
BOOL fOK = FALSE;
PROCESS_INFORMATION pi;
STARTUPINFO sti;
// Initialize
ZeroMemory(&sti, sizeof(sti));
sti.cb = sizeof(sti);
*pdwRetValue = 0;
if (CreateProcess(NULL, pszExe, NULL, NULL, FALSE, 0, NULL, NULL, &sti, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, pdwRetValue);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
fOK = TRUE;
}
return fOK;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TCHAR szExe[MAX_PATH];
int iEnd, i;
DWORD dw;
BOOL fNeedReboot = FALSE;
// Figure out the dir we are running from
// Start with a quote so we can wrap the filename to deal with spaces
// Trailing quote is embedded in the string to run.
szExe[0] = TEXT('\"');
GetModuleFileName(NULL, &szExe[1], ARRAYSIZE(szExe) - 1);
PathRemoveFileSpec(&szExe[1]);
iEnd = lstrlen(szExe);
szExe[iEnd++] = '\\';
// Run each package sequentially
for (i = 0; i < ARRAYSIZE(c_rgszEXEList); i++)
{
// Append exe name and args to dir path
StrCpyN(&szExe[iEnd], c_rgszEXEList[i], ARRAYSIZE(szExe)-iEnd);
CreateProcessAndWait(szExe, &dw);
if (ERROR_SUCCESS_REBOOT_REQUIRED == dw)
fNeedReboot = TRUE;
}
return (fNeedReboot ? ERROR_SUCCESS_REBOOT_REQUIRED : S_OK);
}