windows-nt/Source/XPSP1/NT/net/ias/iasjet/setup/migrateregistry.cpp
2020-09-26 16:20:57 +08:00

156 lines
5.3 KiB
C++

/////////////////////////////////////////////////////////////////////////////
//
// Copyright(C) 1999-2000 Microsoft Corporation all rights reserved.
//
// Module: migrateregistry.cpp
//
// Project: Windows 2000 IAS
//
// Description: IAS NT 4 Registry to IAS W2K MDB Migration Logic
//
// Author: TLP 1/13/1999
//
//
// Revision 02/24/2000 Moved to a separate dll
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "migrateregistry.h"
//////////////////////////////////////////////////////////////////////////////
// DeleteAuthSrvService
//////////////////////////////////////////////////////////////////////////////
LONG CMigrateRegistry::DeleteAuthSrvService()
{
LONG Result = ERROR_CAN_NOT_COMPLETE;
SC_HANDLE hServiceManager;
SC_HANDLE hService;
if ( NULL != (hServiceManager = OpenSCManager(
NULL,
NULL,
SC_MANAGER_ALL_ACCESS
)) )
{
if ( NULL != (hService = OpenService(
hServiceManager,
L"AuthSrv",
SERVICE_ALL_ACCESS
)) )
{
DeleteService(hService);
CloseServiceHandle(hService);
}
Result = ERROR_SUCCESS;
CloseServiceHandle(hServiceManager);
}
return Result;
}
//////////////////////////////////////////////////////////////////////////////
// MigrateProviders
//////////////////////////////////////////////////////////////////////////////
void CMigrateRegistry::MigrateProviders()
{
const int MAX_EXTENSION_DLLS_STRING_SIZE = 4096;
const WCHAR AUTHSRV_KEY[] = L"SYSTEM\\CurrentControlSet"
L"\\Services\\AuthSrv";
const WCHAR AUTHSRV_PROVIDERS_EXTENSION_DLL_VALUE[] = L"ExtensionDLLs";
HKEY hKeyAuthSrvParameter;
LONG Result = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
CUtils::AUTHSRV_PARAMETERS_KEY,
0,
KEY_ALL_ACCESS,
&hKeyAuthSrvParameter
);
if ( Result != ERROR_SUCCESS )
{
_com_issue_error(HRESULT_FROM_WIN32(Result));
}
BYTE szProvidersExtensionDLLs[MAX_EXTENSION_DLLS_STRING_SIZE] = "";
DWORD lSizeBuffer = MAX_EXTENSION_DLLS_STRING_SIZE;
LONG ExtensionDLLResult = RegQueryValueEx(
hKeyAuthSrvParameter,
AUTHSRV_PROVIDERS_EXTENSION_DLL_VALUE,
NULL,
NULL,
szProvidersExtensionDLLs,
&lSizeBuffer
);
RegCloseKey(hKeyAuthSrvParameter);
DeleteAuthSrvService(); //ignore the result
CRegKey RegKey;
Result = RegKey.Open(HKEY_LOCAL_MACHINE, CUtils::SERVICES_KEY);
if ( Result == ERROR_SUCCESS )
{
RegKey.RecurseDeleteKey(L"AuthSrv"); //result not checked
}
if ( ExtensionDLLResult == ERROR_SUCCESS ) //ExtensionsDLLs to restore
{
HKEY hKeyAuthSrv;
DWORD dwDisposition;
WCHAR EmptyString[] = L"";
// re-create the AuthSrv key
Result = RegCreateKeyEx(
HKEY_LOCAL_MACHINE,
AUTHSRV_KEY,
0,
EmptyString,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKeyAuthSrv,
&dwDisposition
);
if ( Result != ERROR_SUCCESS )
{
_com_issue_error(HRESULT_FROM_WIN32(Result));
}
HKEY hKeyParameters;
Result = RegCreateKeyEx(
hKeyAuthSrv,
L"Parameters",
0,
EmptyString,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKeyParameters,
&dwDisposition
);
if ( Result != ERROR_SUCCESS )
{
_com_issue_error(HRESULT_FROM_WIN32(Result));
}
Result = RegSetValueEx(
hKeyParameters,
AUTHSRV_PROVIDERS_EXTENSION_DLL_VALUE,
0,
REG_MULTI_SZ,
szProvidersExtensionDLLs,
lSizeBuffer
);
RegCloseKey(hKeyParameters);
RegCloseKey(hKeyAuthSrv);
}
// Else no ExtensionDLL value to restore
}