115 lines
3.5 KiB
C++
115 lines
3.5 KiB
C++
//*********************************************************************
|
|
//* Microsoft Windows **
|
|
//* Copyright(c) Microsoft Corp., 1999 **
|
|
//*********************************************************************
|
|
//
|
|
// MSOOBE.CPP - WinMain and initialization code for MSOOBE stub EXE
|
|
//
|
|
// HISTORY:
|
|
//
|
|
// 1/27/99 a-jaswed Created.
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <windows.h>
|
|
#include <util.h>
|
|
#include "msoobe.h"
|
|
/*******************************************************************
|
|
|
|
NAME: WinMain
|
|
|
|
SYNOPSIS: App entry point
|
|
|
|
********************************************************************/
|
|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
|
{
|
|
int iReturn = 0;
|
|
int iCount = 0;
|
|
|
|
PTEB pteb = NULL;
|
|
WCHAR szLogfile[MAX_PATH];
|
|
|
|
ExpandEnvironmentStrings(
|
|
L"%SystemRoot%\\system32\\oobe\\msoobe.err",
|
|
szLogfile,
|
|
sizeof(szLogfile)/sizeof(szLogfile[0]));
|
|
//
|
|
// call our DLL to run the OOBE
|
|
//
|
|
|
|
HINSTANCE hObMain;
|
|
|
|
do
|
|
{
|
|
hObMain = LoadLibrary(OOBE_MAIN_DLL);
|
|
|
|
if (hObMain)
|
|
{
|
|
iCount = 0;
|
|
|
|
PFNMsObWinMain pfnWinMain = NULL;
|
|
|
|
if (pfnWinMain = (PFNMsObWinMain)GetProcAddress(hObMain, MSOBMAIN_ENTRY))
|
|
{
|
|
iReturn = pfnWinMain(hInstance, hPrevInstance, GetCommandLine( ), nCmdShow);
|
|
}
|
|
FreeLibrary(hObMain);
|
|
}
|
|
else
|
|
{
|
|
TCHAR szMsg[256];
|
|
TCHAR szCount[10];
|
|
wsprintf(szMsg, TEXT("LoadLibrary(OOBE_MAIN_DLL) failed. GetLastError=%d"), GetLastError());
|
|
wsprintf(szCount, L"Failure%d",iCount);
|
|
WritePrivateProfileString(szCount, L"LoadLibrary", szMsg,szLogfile);
|
|
|
|
pteb = NtCurrentTeb();
|
|
if (pteb)
|
|
{
|
|
wsprintf(szMsg, TEXT("Teb.LastStatusValue = %lx"), pteb->LastStatusValue);
|
|
WritePrivateProfileString(szCount, L"NtCurrentTeb" ,szMsg,szLogfile);
|
|
}
|
|
|
|
iCount++;
|
|
|
|
|
|
}
|
|
} while ((hObMain == NULL) && (iCount <= 10)); // && (iMsgRet == IDYES));
|
|
|
|
if (iCount > 10)
|
|
{
|
|
#define REGSTR_PATH_SYSTEMSETUPKEY L"System\\Setup"
|
|
#define REGSTR_VALUE_SETUPTYPE L"SetupType"
|
|
#define REGSTR_VALUE_SHUTDOWNREQUIRED L"SetupShutdownRequired"
|
|
HKEY hKey;
|
|
// failed 10 times to LoadLibrary msobmain.dll, tell the user
|
|
WCHAR szTitle [MAX_PATH] = L"\0";
|
|
WCHAR szMsg [MAX_PATH] = L"\0";
|
|
DWORD dwValue = 2;
|
|
|
|
// Make sure Winlogon starts us again.
|
|
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_SYSTEMSETUPKEY,
|
|
0,KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
|
|
{
|
|
RegSetValueEx(hKey, REGSTR_VALUE_SETUPTYPE, 0, REG_DWORD,
|
|
(BYTE*)&dwValue, sizeof(dwValue) );
|
|
dwValue = ShutdownReboot;
|
|
RegSetValueEx(hKey, REGSTR_VALUE_SHUTDOWNREQUIRED, 0,
|
|
REG_DWORD, (BYTE*)&dwValue, sizeof(dwValue)
|
|
);
|
|
}
|
|
#ifdef PRERELEASE
|
|
LoadString(GetModuleHandle(NULL), IDS_APPNAME, szTitle, MAX_PATH);
|
|
LoadString(GetModuleHandle(NULL), IDS_SETUPFAILURE, szMsg, MAX_PATH);
|
|
|
|
MessageBox(NULL, szMsg, szTitle, MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
|
|
#endif
|
|
}
|
|
|
|
ExitProcess(iReturn);
|
|
return iReturn;
|
|
}
|
|
|
|
|