windows-nt/Source/XPSP1/NT/admin/admt/workobj/rename.cpp
2020-09-26 16:20:57 +08:00

94 lines
2.4 KiB
C++

/*---------------------------------------------------------------------------
File: RenameComputer.cpp
Comments: Implementation of COM object to change the name of a computer.
This must be run locally on the computer to be renamed.
(c) Copyright 1999, Mission Critical Software, Inc., All Rights Reserved
Proprietary and confidential to Mission Critical Software, Inc.
REVISION LOG ENTRY
Revision By: Christy Boles
Revised on 02/15/99 11:22:41
---------------------------------------------------------------------------
*/
// RenameComputer.cpp : Implementation of CRenameComputer
#include "stdafx.h"
#include "WorkObj.h"
#include "Rename.h"
#include "Common.hpp"
#include "UString.hpp"
#include "EaLen.hpp"
#include <lm.h>
#include "TReg.hpp"
/////////////////////////////////////////////////////////////////////////////
// CRenameComputer
STDMETHODIMP CRenameComputer::RenameLocalComputer(BSTR NewName)
{
HRESULT hr = S_OK;
WCHAR * newNameW = (WCHAR*)NewName;
WCHAR nameW[LEN_Computer];
DWORD rc = 0;
if ( newNameW[0] == L'\\' )
{
safecopy(nameW,newNameW+2);
}
else
{
safecopy(nameW,newNameW);
}
// convert the name to uppercase
for ( int i = 0 ; nameW[i] ; i++ )
{
nameW[i] = towupper(nameW[i]);
}
if ( ! m_bNoChange )
{
if ( ! SetComputerName(nameW) )
{
DWORD rc = GetLastError();
hr = HRESULT_FROM_WIN32(rc);
}
else
{
// Set the host name or the NVHostname value as required
LPWKSTA_INFO_100 pBuf = NULL;
rc = NetWkstaGetInfo(NULL, 100, (LPBYTE*)&pBuf);
if( !rc )
{
TRegKey network(L"System\\CurrentControlSet\\Services\\Tcpip\\Parameters");
if ( pBuf->wki100_ver_major < 5 )
rc = network.ValueSetStr(L"Hostname", nameW);
else
rc = network.ValueSetStr(L"NVHostname", nameW);
if ( rc )
hr = HRESULT_FROM_WIN32(GetLastError());
NetApiBufferFree(pBuf);
}
else
hr = HRESULT_FROM_WIN32(GetLastError());
}
}
return hr;
}
STDMETHODIMP CRenameComputer::get_NoChange(BOOL *pVal)
{
(*pVal) = m_bNoChange;
return S_OK;
}
STDMETHODIMP CRenameComputer::put_NoChange(BOOL newVal)
{
m_bNoChange = newVal;
return S_OK;
}