Поделиться через


Функция GetComputerNameExA (sysinfoapi.h)

Извлекает netBIOS или DNS-имя, связанное с локальным компьютером. Имена устанавливаются при запуске системы, когда система считывает их из реестра.

Синтаксис

BOOL GetComputerNameExA(
  [in]      COMPUTER_NAME_FORMAT NameType,
  [out]     LPSTR                lpBuffer,
  [in, out] LPDWORD              nSize
);

Параметры

[in] NameType

Тип извлекаемого имени. Этот параметр является значением из типа перечисления COMPUTER_NAME_FORMAT. В следующей таблице приведены дополнительные сведения.

Ценность Значение
ComputerNameDnsDomain
Имя домена DNS, назначенного локальному компьютеру. Если локальный компьютер является узлом в кластере, lpBuffer получает DNS-доменное имя виртуального сервера кластера.
ComputerNameDnsFullyQualified
Полное DNS-имя, которое однозначно идентифицирует локальный компьютер. Это имя представляет собой сочетание dns-имени узла и dns-имени домена, используя форму HostName.Имя домена. Если локальный компьютер является узлом в кластере, lpBuffer получает полное DNS-имя виртуального сервера кластера.
computerNameDnsHostname
Dns-имя узла локального компьютера. Если локальный компьютер является узлом в кластере, lpBuffer получает dns-имя узла виртуального сервера кластера.
ComputerNameNetBIOS
Имя NetBIOS локального компьютера. Если локальный компьютер является узлом в кластере, lpBuffer получает имя NetBIOS виртуального сервера кластера.
ComputerNamePhysicalDnsDomain
Имя домена DNS, назначенного локальному компьютеру. Если локальный компьютер является узлом в кластере, lpBuffer получает DNS-доменное имя локального компьютера, а не имя виртуального сервера кластера.
ComputerNamePhysicalDnsFullyQualified
Полное DNS-имя, которое однозначно идентифицирует компьютер. Если локальный компьютер является узлом в кластере, lpBuffer получает полное DNS-имя локального компьютера, а не имя виртуального сервера кластера.

Полное DNS-имя — это сочетание dns-имени узла и dns-доменного имени, используя форму имя узла.Имя домена.

ComputerNamePhysicalDnsHostname
Dns-имя узла локального компьютера. Если локальный компьютер является узлом в кластере, lpBuffer получает dns-имя узла локального компьютера, а не имя виртуального сервера кластера.
ComputerNamePhysicalNetBIOS
Имя NetBIOS локального компьютера. Если локальный компьютер является узлом в кластере, lpBuffer получает имя NetBIOS локального компьютера, а не имя виртуального сервера кластера.

[out] lpBuffer

Указатель на буфер, который получает имя компьютера или имя виртуального сервера кластера.

Длина имени может превышать MAX_COMPUTERNAME_LENGTH символов, так как DNS разрешает более длинные имена. Чтобы убедиться, что этот буфер достаточно велик, задайте этот параметр для null и используйте требуемый размер буфера, возвращаемый в параметре lpnSize lpnSize.

[in, out] nSize

При входных данных указывает размер буфера в TCHARs. В выходных данных получает количество TCHARs скопировано в целевой буфер, не включая завершающий символ null.

Если буфер слишком мал, функция завершается ошибкой и GetLastError возвращает ERROR_MORE_DATA. Этот параметр получает необходимый размер буфера, включая завершающий символ null.

Если lpBufferNULL, этот параметр должен быть равен нулю.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение является ненулевое значение.

Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError. Возможные значения включают следующие значения.

Возвращаемый код Описание
ERROR_MORE_DATA
Буфер lpBuffer слишком мал. Параметр lpnSize содержит количество байтов, необходимых для получения имени.

Замечания

Если групповая политика не задана для локального компьютера, функция GetComputerNameEx извлекает имена NetBIOS или DNS, установленные при запуске системы. Если задана групповая политика, функция возвращает основное доменное имя, заданное групповой политикой. Изменения имен, внесенные функциями setComputerName или SetComputerNameEx, не вступают в силу, пока пользователь не перезагрузит компьютер.

Если локальный компьютер не настроен на использование DNS-имен, GetComputerNameEx не вернет dns-данные. Чтобы настроить компьютер для этого, выполните действия, описанные в справке операционной системы, и измените основной DNS-суффикс компьютера, а затем перезагрузите компьютер.

Поведение этой функции может быть затронуто, если локальный компьютер является узлом в кластере. Дополнительные сведения см. в разделе ResUtilGetEnvironmentWithNetName и UseNetworkName.

Если вы работаете с средами, используюющими разные макеты DNS, где полное доменное имя компьютера не соответствует полному домену, используйте вместо этого LsaQueryInformationPolicy.

Чтобы скомпилировать приложение, использующее эту функцию, определите макрос _WIN32_WINNT как 0x0500 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.

Примеры

#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain(void)
{
    TCHAR buffer[256] = TEXT("");
    TCHAR szDescription[8][32] = {TEXT("NetBIOS"), 
        TEXT("DNS hostname"), 
        TEXT("DNS domain"), 
        TEXT("DNS fully-qualified"), 
        TEXT("Physical NetBIOS"), 
        TEXT("Physical DNS hostname"), 
        TEXT("Physical DNS domain"), 
        TEXT("Physical DNS fully-qualified")};
    int cnf = 0;
    DWORD dwSize = _countof(buffer);
    
    for (cnf = 0; cnf < ComputerNameMax; cnf++)
    {
        if (!GetComputerNameEx((COMPUTER_NAME_FORMAT)cnf, buffer, &dwSize))
        {
            _tprintf(TEXT("GetComputerNameEx failed (%d)\n"), GetLastError());
            return;
        }
        else _tprintf(TEXT("%s: %s\n"), szDescription[cnf], buffer);

        dwSize = _countof(buffer);
        ZeroMemory(buffer, dwSize);
    }
}

Заметка

Заголовок sysinfoapi.h определяет GetComputerNameEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка sysinfoapi.h (включая Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

COMPUTER_NAME_FORMAT

имена компьютеров

GetComputerName

ResUtilGetEnvironmentWithNetName

ResUtilSetResourceServiceEnvironment

ResUtilSetResourceServiceStartParameters

SetComputerName

SetComputerNameEx

системные информационные функции