SetComputerNameEX возвращает успех, но имя компьютера не изменяется при перезагрузке

Я пытаюсь изменить имя компьютера, использующего домен, используя SetComputerNameEx(), Функция возвращает успех, но когда я перезагружаю компьютер, он все еще имеет старое имя компьютера. SetComputerNameEx() отлично работает на компьютерах без домена Я сталкиваюсь с этой проблемой только на компьютерах домена. Я что-то пропустил?

РЕДАКТИРОВАТЬ: я использую следующий код.

BOOL ChangeCompName(CString csCompName)
{
    if( !SetComputerNameEx(ComputerNamePhysicalDnsHostname,csCompName.GetBuffer()))
    {
        _tprintf(L"Failed to set Physical DNS name %d\n",GetLastError());
        return FALSE;
    }
    else
    {
        _tprintf(L"Computer name change Success\n");
    }

    if( !SetComputerNameEx(ComputerNamePhysicalNetBIOS,csCompName.GetBuffer()))
    {
        _tprintf(L"Failed to set Physical NetBios name %d\n",GetLastError());
        return FALSE;
    }
    else
    {
        _tprintf(L"Computer name change Success\n");
    }

    return TRUE;
}
int main()
{
    if(!ChangeCompName(L"NewCompName"))
    {
        _tprintf(L"Failed to change Name.\n");
        return 1;
    }
    else
    {
        _tprintf(L"Computer name change.\n");
    }
     return 0;
}

Я попытался запустить код с правами администратора и системы. каждый раз, когда я запускаю код, он возвращает успех, но не меняет имя компьютера. Странно то, что этот код отлично работает на компьютере рабочей группы и не работает на доменных компьютерах.

1 ответ

Решение

Я понял, как сделать переименование компьютера на доменном компьютере. Вот решение, если это кому-нибудь нужно.

Вместо вызова SetComputerNameEx() просто используйте NetGetJoinInformation() с учетными данными администратора домена. Это позволит переименовать компьютер как в домене, так и локально.

Другие вопросы по тегам