windows-nt/Source/XPSP1/NT/base/ntsetup/winnt32/dll/cleanup.c
2020-09-26 16:20:57 +08:00

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);
}