windows-nt/Source/XPSP1/NT/base/ntsetup/oobe/msoobe/msoobe.cpp

115 lines
3.5 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//*********************************************************************
//* 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;
}