156 lines
5.3 KiB
C++
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
|
|
}
|