152 lines
3.9 KiB
C
152 lines
3.9 KiB
C
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
VOID CleanUpHardDriveTags (VOID);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
StartCleanup(
|
||
|
IN PVOID ThreadParameter
|
||
|
)
|
||
|
//
|
||
|
// BUGBUG - this routine NEVER gets executed in a /checkupgradeonly case
|
||
|
//
|
||
|
{
|
||
|
TCHAR Buffer[MAX_PATH];
|
||
|
HKEY setupKey;
|
||
|
DWORD error;
|
||
|
|
||
|
//
|
||
|
// Make sure the copy threads are really gone so we're not
|
||
|
// trying to clean up files at the same time as files are
|
||
|
// getting copied.
|
||
|
//
|
||
|
CancelledMakeSureCopyThreadsAreDead();
|
||
|
|
||
|
error = RegOpenKeyEx (
|
||
|
HKEY_LOCAL_MACHINE,
|
||
|
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup"),
|
||
|
0,
|
||
|
KEY_ALL_ACCESS,
|
||
|
&setupKey
|
||
|
);
|
||
|
|
||
|
if (error == ERROR_SUCCESS) {
|
||
|
|
||
|
//
|
||
|
// If g_DeleteRunOnceFlag is set and the user did not cancel setup, then
|
||
|
// remove the Winnt32RunOnce flag from the Setup key.
|
||
|
//
|
||
|
|
||
|
if (g_DeleteRunOnceFlag && !Cancelled) {
|
||
|
RegDeleteValue (setupKey, S_WINNT32_WARNING);
|
||
|
g_DeleteRunOnceFlag = FALSE;
|
||
|
}
|
||
|
|
||
|
#ifdef _X86_
|
||
|
//
|
||
|
// If canceled, remove last report time, so that the report
|
||
|
// will be displayed on the next run of setup.
|
||
|
//
|
||
|
|
||
|
if (!ISNT()) {
|
||
|
if (!CheckUpgradeOnly) {
|
||
|
RegDeleteValue (setupKey, TEXT("LastReportTime"));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
RegCloseKey (setupKey);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Let upgrade code do its cleanup.
|
||
|
//
|
||
|
if(UpgradeSupport.CleanupRoutine) {
|
||
|
UpgradeSupport.CleanupRoutine();
|
||
|
}
|
||
|
|
||
|
if (g_DynUpdtStatus->ForceRemoveWorkingDir || !g_DynUpdtStatus->PreserveWorkingDir) {
|
||
|
if (g_DynUpdtStatus->WorkingDir[0] && !g_DynUpdtStatus->RestartWinnt32) {
|
||
|
MyDelnode (g_DynUpdtStatus->WorkingDir);
|
||
|
}
|
||
|
|
||
|
GetCurrentWinnt32RegKey (Buffer, MAX_PATH);
|
||
|
ConcatenatePaths (Buffer, WINNT_U_DYNAMICUPDATESHARE, MAX_PATH);
|
||
|
RegDeleteKey (HKEY_LOCAL_MACHINE, Buffer);
|
||
|
}
|
||
|
|
||
|
#if 0
|
||
|
//
|
||
|
// Remove registry entries
|
||
|
//
|
||
|
if (GetCurrentWinnt32RegKey (Buffer, MAX_PATH)) {
|
||
|
RegDeleteKey (HKEY_LOCAL_MACHINE, Buffer);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Always do this, since the system might not boot otherwise.
|
||
|
//
|
||
|
ForceBootFilesUncompressed(ThreadParameter,FALSE);
|
||
|
|
||
|
//
|
||
|
// The first thing to do is to wipe out the local source drive.
|
||
|
//
|
||
|
if(LocalSourceDirectory[0]) {
|
||
|
MyDelnode(LocalSourceDirectory);
|
||
|
}
|
||
|
|
||
|
if (!IsArc()) {
|
||
|
#ifdef _X86_
|
||
|
//
|
||
|
// Blow away the local boot dir.
|
||
|
//
|
||
|
if(LocalBootDirectory[0]) {
|
||
|
MyDelnode(LocalBootDirectory);
|
||
|
}
|
||
|
BuildSystemPartitionPathToFile (AUX_BS_NAME, Buffer, MAX_PATH);
|
||
|
SetFileAttributes(Buffer,FILE_ATTRIBUTE_NORMAL);
|
||
|
DeleteFile(Buffer);
|
||
|
|
||
|
BuildSystemPartitionPathToFile(TEXTMODE_INF, Buffer, MAX_PATH);
|
||
|
SetFileAttributes(Buffer,FILE_ATTRIBUTE_NORMAL);
|
||
|
DeleteFile(Buffer);
|
||
|
|
||
|
RestoreBootSector();
|
||
|
RestoreBootIni();
|
||
|
|
||
|
//
|
||
|
// restore backed up files and clean up backup directory
|
||
|
//
|
||
|
if(IsNEC98() && LocalBackupDirectory[0]) {
|
||
|
SaveRestoreBootFiles_NEC98(NEC98RESTOREBOOTFILES);
|
||
|
MyDelnode(LocalBackupDirectory);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Clean up any ~_~ files from drvlettr migration.
|
||
|
//
|
||
|
if (!ISNT()) {
|
||
|
CleanUpHardDriveTags ();
|
||
|
}
|
||
|
#endif // _X86_
|
||
|
} else { // We're on an ARC machine.
|
||
|
#ifdef UNICODE // Always true for ARC, never true for Win9x upgrade
|
||
|
//
|
||
|
// Blow away setupldr off the root of the system partition.
|
||
|
//
|
||
|
BuildSystemPartitionPathToFile (SETUPLDR_FILENAME, Buffer, MAX_PATH);
|
||
|
SetFileAttributes(Buffer,FILE_ATTRIBUTE_NORMAL);
|
||
|
DeleteFile(Buffer);
|
||
|
|
||
|
RestoreNvRam();
|
||
|
#endif // UNICODE
|
||
|
} // if (!IsArc())
|
||
|
|
||
|
PostMessage(ThreadParameter,WMX_I_AM_DONE,0,0);
|
||
|
return(0);
|
||
|
}
|
||
|
|