共用方式為


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.DomainName。 如果本機計算機是叢集中的節點, lpBuffer 會收到叢集虛擬伺服器的完整 DNS 名稱。
ComputerNameDnsHostname
本機電腦的 DNS 主機名稱。 如果本機計算機是叢集中的節點, lpBuffer 會收到叢集虛擬伺服器的 DNS 主機名。
ComputerNameNetBIOS
本機電腦的 NetBIOS 名稱。 如果本機計算機是叢集中的節點, lpBuffer 會收到叢集虛擬伺服器的 NetBIOS 名稱。
ComputerNamePhysicalDnsDomain
指派給本機電腦之 DNS 網域的名稱。 如果本機計算機是叢集中的節點, lpBuffer 會收到本機計算機的 DNS 功能變數名稱,而不是叢集虛擬伺服器的名稱。
ComputerNamePhysicalDnsFullyQualified
唯一識別電腦的完整 DNS 名稱。 如果本機計算機是叢集中的節點, lpBuffer 會收到本機計算機的完整 DNS 名稱,而不是叢集虛擬伺服器的名稱。

完整的 DNS 名稱結合 DNS 主機名稱與 DNS 網域名稱,其格式為 HostName.DomainName

ComputerNamePhysicalDnsHostname
本機電腦的 DNS 主機名稱。 如果本機計算機是叢集中的節點, lpBuffer 會收到本機計算機的 DNS 主機名,而不是叢集虛擬伺服器的名稱。
ComputerNamePhysicalNetBIOS
本機電腦的 NetBIOS 名稱。 如果本機計算機是叢集中的節點, lpBuffer 會收到本機計算機的 NetBIOS 名稱,而不是叢集虛擬伺服器的名稱。

[out] lpBuffer

接收電腦名稱或叢集虛擬伺服器名稱之緩衝區的指標。

名稱的長度可能大於MAX_COMPUTERNAME_LENGTH字元,因為 DNS 允許較長的名稱。 若要確保這個緩衝區夠大,請將此參數設定為 NULL ,並使用 lpnSize 參數中傳回的必要緩衝區大小。

[in, out] nSize

在輸入上,以 TCHAR 指定緩衝區的大小。 在輸出中,接收複製到目的地緩衝區的 TCHA 數目 ,不包括終止 Null 字元。

如果緩衝區太小,則函式會失敗, 而且 GetLastError 會傳回ERROR_MORE_DATA。 此參數會接收所需的緩衝區大小,包括終止 的 Null 字元。

如果 lpBufferNULL,此參數必須為零。

傳回值

如果函式成功,則傳回值是非零值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 可能的值如下。

傳回碼 Description
ERROR_MORE_DATA
lpBuffer 緩衝區太小。 lpnSize 參數包含接收名稱所需的位元組數目。

備註

如果未設定本機計算機的組策略, GetComputerNameEx 函式會擷取在系統啟動時建立的 NetBIOS 或 DNS 名稱。 如果已設定組策略,函式會傳回組策略所設定的主要功能變數名稱。 在使用者重新啟動電腦之前, SetComputerNameSetComputerNameEx 函式所做的名稱變更不會生效。

如果本機計算機未設定為使用 DNS 名稱, GetComputerNameEx 將不會傳回 DNS 資訊。 若要將計算機設定為這樣做,請遵循操作系統說明中所述的步驟,並變更計算機的主要 DNS 後綴,然後重新啟動電腦。

如果本機計算機是叢集中的節點,此函式的行為可能會受到影響。 如需詳細資訊,請參閱 ResUtilGetEnvironmentWithNetNameUseNetworkName

如果您使用使用不同 DNS 配置的環境,其中計算機的 FQDN 不符合其網域的 FQDN,請改用 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 標頭會根據 UNICODE 預處理器常數的定義,將 GetComputerNameEx 定義為別名,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 sysinfoapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

COMPUTER_NAME_FORMAT

計算機名稱

GetComputerName

ResUtilGetEnvironmentWithNetName

ResUtilSetResourceServiceEnvironment

ResUtilSetResourceServiceStartParameters

SetComputerName

SetComputerNameEx

系統資訊函式