190 lines
3.3 KiB
C
190 lines
3.3 KiB
C
|
/*
|
||
|
File upgrade.c
|
||
|
|
||
|
Implementation of functions to update the registry when an
|
||
|
NT 4.0 to NT 5.0 upgrade takes place.
|
||
|
|
||
|
Paul Mayfield, 8/11/97
|
||
|
|
||
|
Copyright 1997 Microsoft.
|
||
|
*/
|
||
|
|
||
|
#include "upgrade.h"
|
||
|
|
||
|
static const WCHAR szSteelheadKey[] = L"PreUpgradeRouter";
|
||
|
static const WCHAR szSapKey[] = L"Sap.Parameters";
|
||
|
static const WCHAR szIpRipKey[] = L"IpRip.Parameters";
|
||
|
static const WCHAR szDhcpKey[] = L"RelayAgent.Parameters";
|
||
|
static const WCHAR szRadiusKey[] = L"Radius.Parameters";
|
||
|
static const WCHAR szIpxRipKey[] = L"IpxRip";
|
||
|
|
||
|
// Dll entry
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
RtrUpgradeDllEntry (
|
||
|
IN HINSTANCE hInstDll,
|
||
|
IN DWORD fdwReason,
|
||
|
IN LPVOID pReserved)
|
||
|
{
|
||
|
switch (fdwReason)
|
||
|
{
|
||
|
case DLL_PROCESS_ATTACH:
|
||
|
DisableThreadLibraryCalls(hInstDll);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Performs the various router upgrade scenarios
|
||
|
//
|
||
|
DWORD
|
||
|
DispatchSetupWork(
|
||
|
IN PWCHAR szAnswerFileName,
|
||
|
IN PWCHAR szSectionName)
|
||
|
{
|
||
|
HINF hInf = NULL;
|
||
|
BOOL DoUpgrade;
|
||
|
WCHAR szBuf[1024];
|
||
|
DWORD dwSize = 1024;
|
||
|
DWORD dwErr, dwRet = NO_ERROR;
|
||
|
|
||
|
// Open the answer file
|
||
|
hInf = SetupOpenInfFileW(
|
||
|
szAnswerFileName,
|
||
|
NULL,
|
||
|
INF_STYLE_OLDNT,
|
||
|
NULL);
|
||
|
if (hInf == INVALID_HANDLE_VALUE)
|
||
|
{
|
||
|
return GetLastError();
|
||
|
}
|
||
|
|
||
|
// Perform a steelhead upgrade
|
||
|
//
|
||
|
dwSize = sizeof(szBuf) / sizeof(WCHAR);
|
||
|
if (SetupGetLineTextW(
|
||
|
NULL,
|
||
|
hInf,
|
||
|
szSectionName,
|
||
|
szSteelheadKey,
|
||
|
szBuf,
|
||
|
dwSize,
|
||
|
&dwSize))
|
||
|
{
|
||
|
dwErr = SteelheadToNt5Upgrade(szBuf);
|
||
|
if (dwErr != NO_ERROR)
|
||
|
{
|
||
|
dwRet = dwErr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Perform an ipx sap upgrade
|
||
|
//
|
||
|
dwSize = sizeof(szBuf) / sizeof(WCHAR);
|
||
|
if (SetupGetLineTextW(
|
||
|
NULL,
|
||
|
hInf,
|
||
|
szSectionName,
|
||
|
szSapKey,
|
||
|
szBuf,
|
||
|
dwSize,
|
||
|
&dwSize))
|
||
|
{
|
||
|
dwErr = SapToRouterUpgrade(szBuf);
|
||
|
if (dwErr != NO_ERROR)
|
||
|
{
|
||
|
dwRet = dwErr;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// Perform an ip rip upgrade
|
||
|
//
|
||
|
dwSize = sizeof(szBuf) / sizeof(WCHAR);
|
||
|
if (SetupGetLineTextW(
|
||
|
NULL,
|
||
|
hInf,
|
||
|
szSectionName,
|
||
|
szIpRipKey,
|
||
|
szBuf,
|
||
|
dwSize,
|
||
|
&dwSize))
|
||
|
{
|
||
|
dwErr = IpRipToRouterUpgrade(szBuf);
|
||
|
if (dwErr != NO_ERROR)
|
||
|
{
|
||
|
dwRet = dwErr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Perform a dhcp relay agent upgrade
|
||
|
//
|
||
|
dwSize = sizeof(szBuf) / sizeof(WCHAR);
|
||
|
if (SetupGetLineTextW(
|
||
|
NULL,
|
||
|
hInf,
|
||
|
szSectionName,
|
||
|
szDhcpKey,
|
||
|
szBuf,
|
||
|
dwSize,
|
||
|
&dwSize))
|
||
|
{
|
||
|
dwErr = DhcpToRouterUpgrade(szBuf);
|
||
|
if (dwErr != NO_ERROR)
|
||
|
{
|
||
|
dwRet = dwErr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Perform a radius upgrade
|
||
|
//
|
||
|
dwSize = sizeof(szBuf) / sizeof(WCHAR);
|
||
|
if (SetupGetLineTextW(
|
||
|
NULL,
|
||
|
hInf,
|
||
|
szSectionName,
|
||
|
szRadiusKey,
|
||
|
szBuf,
|
||
|
dwSize,
|
||
|
&dwSize))
|
||
|
{
|
||
|
dwErr = RadiusToRouterUpgrade(szBuf);
|
||
|
if (dwErr != NO_ERROR)
|
||
|
{
|
||
|
dwRet = dwErr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SetupCloseInfFile(hInf);
|
||
|
|
||
|
return dwRet;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// This is the entry point to upgrade mpr v1 and steelhead to
|
||
|
// NT 5.0.
|
||
|
//
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
RouterUpgrade (
|
||
|
IN DWORD dwUpgradeFlag,
|
||
|
IN DWORD dwUpgradeFromBuildNumber,
|
||
|
IN PWCHAR szAnswerFileName,
|
||
|
IN PWCHAR szSectionName)
|
||
|
{
|
||
|
DWORD dwErr;
|
||
|
|
||
|
dwErr = DispatchSetupWork(szAnswerFileName, szSectionName);
|
||
|
if (dwErr == NO_ERROR)
|
||
|
{
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
UtlPrintErr(dwErr);
|
||
|
|
||
|
return dwErr;
|
||
|
}
|
||
|
|