LPNSPV2LOOKUPSERVICENEXTEX回呼函式 (ws2spi.h)
從先前呼叫NSPv2LookupServiceBegin取得控制碼之後,會呼叫NSPv2LookupServiceNextEx函式,以便從命名空間第 2 版服務提供者擷取要求的資訊。
語法
LPNSPV2LOOKUPSERVICENEXTEX Lpnspv2lookupservicenextex;
void Lpnspv2lookupservicenextex(
[in] HANDLE hAsyncCall,
[in] HANDLE hLookup,
[in] DWORD dwControlFlags,
[in, out] LPDWORD lpdwBufferLength,
[out] LPWSAQUERYSET2W lpqsResults
)
{...}
參數
[in] hAsyncCall
從先前呼叫 NSPv2LookupServiceBegin 傳回的控制碼,用於非同步呼叫。
[in] hLookup
從先前呼叫 NSPv2LookupServiceBegin傳回的控制碼。
[in] dwControlFlags
用來控制下一個作業的旗標。 目前,只有 LUP_FLUSHPREVIOUS 定義為處理太大結果集的方法。 如果應用程式無法提供足夠的緩衝區,設定 LUP_FLUSHPREVIOUS 會指示提供者捨棄最後一個結果集,這太大,並移至這個呼叫的下一個集合。
[in, out] lpdwBufferLength
輸入上的大小,以位元組為單位,包含在 lpqsResults所指向的緩衝區中。 在輸出上,如果函式失敗,且錯誤為 WSAEFAULT,則會包含最小大小,以位元組為單位來傳遞 lpqsResults 以擷取記錄。
[out] lpqsResults
記憶體區塊的指標,將在傳回時包含 WSAQUERYSET2結構中的 一個結果集。
傳回值
如果常式成功,函式應該傳回 NO_ERROR (零) 。 它應該傳回 SOCKET_ERROR (,也就是說,常式失敗時為 1) ,而且必須使用 WSASetLastError設定適當的錯誤碼。
錯誤碼 | 意義 |
---|---|
呼叫 NSPv2LookupServiceEnd 時,此呼叫仍在處理中。 呼叫已取消。 lpqsResults緩衝區中的資料未定義。
在 Windows Sockets 2 中, WSAECANCELLED (10103) 定義衝突的錯誤碼,WSA_E_CANCELLED ( 10111) 。未來版本將會移除錯誤碼 WSAECANCELLED ,且只會保留WSA_E_CANCELLED。 命名空間提供者應該使用 WSA_E_CANCELLED 錯誤碼來維持與最廣泛的應用程式相容性。 |
|
沒有其他可用的資料。
在 Windows Sockets 2 中, WSAENOMORE (10102) 定義衝突的錯誤碼,WSA_E_NO_MORE ( 10110) 。未來版本將會移除錯誤碼 WSAENOMORE ,且只會保留WSA_E_NO_MORE。 命名空間提供者應該使用 WSA_E_NO_MORE 錯誤碼來維持與最廣泛的應用程式相容性。 |
|
lpqsResults緩衝區太小而無法包含WSAQUERYSET集合。 | |
此提供者的一或多個參數無效或遺失。 | |
指定的查閱控制碼無效。 | |
在資料庫中找到名稱,但找不到符合指定限制的資料。 | |
服務未知。 在指定的命名空間中找不到服務。 | |
記憶體不足,無法執行這項作業。 |
備註
NSPv2LookupServiceNextEx函式會用來作為 Windows Vista 和更新版本上可用的命名空間服務提供者版本 2 (NSPv2) 架構的一部分。
在 Windows Vista 和 Windows Server 2008 上, NSPv2LookupServiceNextEx 函式只能用於NS_EMAIL命名空間提供者上的作業。
提供者會在lpqsResults緩衝區中傳遞WSAQUERYSET2結構。 用戶端應該呼叫 NSPv2LookupServiceNextEx 函式,直到傳回 WSA_E_NOMORE為止,表示所有 WSAQUERYSET2 結構都已傳回。
在此函式中指定的 dwControlFlags , 以及 NSPv2LookupServiceBegin 時所指定的 dwControlFlags 會以「限制」的形式處理,以供組合之用。 限制會結合 NSPv2LookupServiceBegin 時間的限制,以及 NSPv2LookupServiceNextEx 時間的限制。 因此, NSPv2LookupServiceNextEx 的 旗標永遠不會增加超過 NSPv2LookupServiceBegin要求的資料量,不過指定更多或更少旗標並不錯誤。 指定于指定 NSPv2LookupServiceNextEx 的旗標僅適用于該呼叫。
dwControlFlagsLUP_FLUSHPREVIOUS和LUP_RES_SERVICE是合併的限制規則 (的例外狀況,因為它們是行為旗標,而不是) 的「限制」旗標。 如果 NSPv2LookupServiceNextEx中使用任一旗標,無論 NSPv2LookupServiceBegin上的相同旗標設定為何,它們都有其已定義的效果。
例如,如果在NSPv2LookupServiceBegin指定LUP_RETURN_VERSION,服務提供者會擷取包含版本的記錄。 如果未在NSPv2LookupServiceNextEx指定LUP_RETURN_VERSION,則傳回的資訊不會包含版本,即使該版本可用也一樣。 不會產生任何錯誤。
例如,如果未在NSPv2LookupServiceBegin指定LUP_RETURN_BLOB,但在NSPv2LookupServiceNextEx指定,則傳回的資訊不包含私人資料。 不會產生任何錯誤。
NSPv2LookupServiceNextEx函式通常至少呼叫兩次。 第一次取得所需緩衝區的大小,以接收lpqsResults參數所指向的WSAQUERYSET2,第二次取得實際的查詢結果集。 在第一次呼叫時,NSPv2 提供者應該傳回 WSAQUERYSET2 結果所需的大小。
傳回之 lpqsResults參數所指向的WSAQUERYSET2結構只有在相同的進程內容中才有用,因為WSAQUERYSET2結構中的數個成員包含所傳回實際資料的指標。 如果需要使用 RPC 將查詢結果傳遞至另一個進程 (,例如) ,則必須序列化和封送處理lpqsResults參數所指向之WSAQUERYSET2結構中所傳回的資料,包括WSAQUERYSET2結構中成員所指向的資料。 資料必須以可跨進程界限傳遞的表單序列化。 只要傳遞 WSAQUERYSET2 結構的複本就不足,因為只會傳遞資料的指標,而實際資料將無法供其他進程使用。
查詢結果
下表列出 WSAQUERYSET2 ,並描述如何在 **WSAQUERYSET2** 結構中表示查詢結果。 如需詳細資訊,請參閱 查詢相關資料結構。WSAQUERYSET2成員名稱 | 結果解譯 |
---|---|
**dwSize** | WSAQUERYSET2 結構的大小 ,以位元組為單位。 這會作為版本設定機制使用。 |
**lpszServiceInstanceName** | 包含服務名稱的字串。 |
**lpVersion** | 參考特定服務實例的版本號碼。 |
**lpszComment** | 服務實例所提供的批註字串。 此成員是選擇性的,取決於 NSPv2 服務提供者的需求。 |
**dwNameSpace** | 找到名稱或服務實例的命名空間識別碼。 |
**lpNSProviderId** | 提供此查詢結果的特定命名空間提供者。 |
**lpszCoNtext** | 服務所在階層命名空間中的內容點。 |
**dwNumberOfProtocols** | 此成員未針對結果定義。 |
**lpafpProtocols** | 此成員未針對結果定義。 所有必要的通訊協定資訊都位於 CSADDR_INFO 結構中。 |
**lpszQueryString** | 當 dwControlFlags包含 **LUP_RETURN_QUERY_STRING**時,此成員會傳回原始查詢中指定的 **lpszServiceInstanceName** 的未剖析其餘部分。 例如,在以階層名稱識別服務的命名空間中,指定主機名稱和該主機內的檔案路徑,傳回的位址可能是主機位址,而未剖析的其餘部分可能是檔案路徑。 如果已完全剖析 **lpszServiceInstanceName**,且使用 **LUP_RETURN_QUERY_STRING** ,則此成員為 null 或指向長度為零的字串。 |
**dwNumberOfCsAddrs** | CSADDR_INFO結構陣列中的元素數目。 |
**lpcsaBuffer** | CSADDR_INFO結構的陣列指標,每個元素都包含一個完整的傳輸位址。 |
**dwOutputFlags** | **RESULT_IS_ALIAS** 旗標表示這是別名結果。 |
**lpBlob** | 提供者特定實體的指標。 此成員是選擇性的,取決於 NSPv2 服務提供者的需求。 |
規格需求
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | ws2spi.h |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應