GetAddressByNameA 函式 (nspapi.h)
[GetAddressByName 已不再可供 Windows Sockets 2 使用。 請改用 通訊協議獨立名稱解析中詳述的函式。
GetAddressByName 函式會查詢命名空間或一組預設命名空間,以擷取指定網路服務的網路地址資訊。 此程式稱為服務名稱解析。 網路服務也可以使用函式來取得可搭配 系結 函式使用的本機地址資訊。
語法
INT GetAddressByNameA(
[in] DWORD dwNameSpace,
[in] LPGUID lpServiceType,
[in, optional] LPSTR lpServiceName,
[in, optional] LPINT lpiProtocols,
[in] DWORD dwResolution,
[in, optional] LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
[out] LPVOID lpCsaddrBuffer,
[in, out] LPDWORD lpdwBufferLength,
[in, out] LPSTR lpAliasBuffer,
[in, out] LPDWORD lpdwAliasBufferLength
);
參數
[in] dwNameSpace
操作系統應該查詢網路位址資訊的命名空間或預設命名空間集。
使用下列其中一個常數來指定命名空間。
對 GetAddressByName 的大部分呼叫都應該使用特殊值NS_DEFAULT。 這可讓客戶端瞭解因特網上有哪些命名空間可供使用。 系統管理員會決定命名空間存取權。 命名空間可以進入,而不需要用戶端知道變更。
[in] lpServiceType
指定網路服務類型的全域唯一標識符指標 (GUID) 。 Svcguid.h 頭檔包含數種 GUID 服務類型的定義,以及用來處理它們的宏。
Winsock2.h 頭檔不會自動包含 Svcguid.h 頭檔。
[in, optional] lpServiceName
唯一表示服務名稱之零終止字串的指標。 例如,“MY SNA SERVER”。
將 lpServiceName 設定為 NULL 相當於將 dwResolution 設定為 RES_SERVICE。 函式會在其第二個模式中運作,取得指定型別的服務應該系結至其中的本機位址。 函式會將本機位址儲存在儲存至 *lpCsaddrBuffer之CSADDR_INFO結構的LocalAddr成員內。
如果 dwResolution 設定為 RES_SERVICE,則函式會忽略 lpServiceName 參數。
如果 dwNameSpace 設定為 NS_DNS,*lpServiceName 是主機的名稱。
[in, optional] lpiProtocols
通訊協議標識碼之零終止數位的指標。 函式會將名稱解析嘗試限制為提供這些通訊協定的命名空間提供者。 這可讓呼叫端限制搜尋的範圍。
如果 lpiProtocols 設定為 NULL,函式會擷取所有可用通訊協議的相關信息。
[in] dwResolution
一組位旗標,指定服務名稱解析程式的各個層面。 定義下列位旗標。
[in, optional] lpServiceAsyncInfo
保留供日後使用;必須設定為 NULL。
[out] lpCsaddrBuffer
要接收一或多個 CSADDR_INFO 數據結構的緩衝區指標。 寫入緩衝區的結構數目取決於解析嘗試中找到的資訊量。 您應該假設會撰寫多個結構,但在許多情況下,只有一個結構。
[in, out] lpdwBufferLength
在輸入時,變數的指標會指定 lpCsaddrBuffer 所指向之緩衝區的大小,以位元組為單位。
輸出時,此變數包含儲存 CSADDR_INFO 結構數位所需的位元組總數。 如果此值小於或等於 *lpdwBufferLength 的輸入值,而且函式成功,則這是實際儲存在緩衝區中的位元組數目。 如果此值大於 *lpdwBufferLength 的輸入值,則緩衝區太小,而且 *lpdwBufferLength 的輸出值是最少的必要緩衝區大小。
[in, out] lpAliasBuffer
要接收網路服務的別名資訊的緩衝區指標。
如果命名空間支持別名,函式會將零終止名稱字串的陣列儲存到 lpAliasBuffer 所指向的緩衝區中。 清單結尾有雙零終止符。 陣列中的名字是服務的主要名稱。 下列名稱是別名。 支援別名的命名空間範例為 DNS。
如果命名空間不支持別名,它會將雙零終止符儲存至緩衝區。
此參數是選擇性的,而且可以設定為 NULL。
[in, out] lpdwAliasBufferLength
在輸入時,變數的指標會指定 lpAliasBuffer 所指向之緩衝區 (字元) 的大小。
輸出時,此變數包含儲存名稱字串數位所需的元素總數 (字元數) 。 如果此值小於或等於 *lpdwAliasBufferLength 的輸入值,且函式成功,則這是實際儲存在緩衝區中的元素數目。 如果此值大於 *lpdwAliasBufferLength 的輸入值,則緩衝區太小,而且 *lpdwAliasBufferLength 的輸出值是最小的必要緩衝區大小。
如果 lpAliasBuffer 是NULL,lpdwAliasBufferLength 是無意義的,也可以是 NULL。
傳回值
如果函式成功,傳回值就是寫入 lpCsaddrBuffer 所指向之緩衝區的CSADDR_INFO數據結構數目。
如果函式失敗,傳回值會SOCKET_ERROR ( –1) 。 若要取得擴充錯誤資訊,請呼叫 GetLastError,這會傳回下列擴充錯誤值。
錯誤碼 | 意義 |
---|---|
|
lpCsaddrBuffer 所指向的緩衝區太小,無法接收所有相關CSADDR_INFO結構。 使用緩衝區至少與 *lpdwBufferLength 中所傳回的值一樣大來呼叫函式。 |
備註
此函式是 gethostbyname 函式更強大的版本。 GetAddressByName 函式適用於多個名稱服務。
GetAddressByName 函式可讓用戶端取得網路服務的 Windows 套接字位址。 用戶端會根據其服務類型和服務名稱來指定感興趣的服務。
許多名稱服務都支援名稱服務提供者在解析服務名稱時所考慮的預設前置詞或後綴。 例如,在 DNS 命名空間中,如果網域名為 「nt.microsoft.com」,且提供 「ftp millikan」 作為輸入,DNS 軟體將無法解析 「millikan」,但已成功解析 「millikan.nt.microsoft.com」。
請注意, GetAddressByName 函式可以透過兩種方式搜尋服務位址:在特定命名空間內,或在一組預設命名空間內。 使用預設命名空間時,系統管理員可以指定只有在名稱指定時,才會搜尋特定命名空間。 系統管理員或命名空間— 安裝程式也可以控制命名空間搜尋的順序。
注意
nspapi.h 標頭會根據 UNICODE 預處理器常數的定義,將 GetAddressByName 定義為別名,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | nspapi.h |
程式庫 | Mswsock.lib |
Dll | Mswsock.dll |