LPNSPV2LOOKUPSERVICENEXTEX回呼函式 (ws2spi.h)

NSPv2LookupServiceNextEx 函式是在從先前呼叫 NSPv2LookupServiceBegin 取得句柄之後呼叫,以便從命名空間第 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 (零)。 如果例程失敗,且必須使用 WSASetLastError來設定適當的錯誤碼,它應該會傳回 SOCKET_ERROR (也就是 1)。

錯誤碼 意義
WSA_E_CANCELLED
呼叫 NSPv2LookupServiceEnd 時,此呼叫仍在處理中。 已取消呼叫。 lpqsResults 緩衝區中的數據未定義。

在 Windows Sockets 2 中,WSAECANCELLED (10103) 和 WSA_E_CANCELLED (10111) 定義衝突的錯誤碼。WSAECANCELLED 的錯誤碼將會在未來版本中移除,而且只會保留WSA_E_CANCELLED。 Namespace提供者應該使用 WSA_E_CANCELLED 錯誤碼來維持與最廣泛應用程式範圍的相容性。

WSA_E_NO_MORE
沒有其他可用的數據。

在 Windows Sockets 2 中,WSAENOMORE (10102) 和 WSA_E_NO_MORE (10110) 定義衝突的錯誤碼。WSAENOMORE 錯誤碼將會在未來版本中移除,且只會保留WSA_E_NO_MORE。 Namespace提供者應該使用 WSA_E_NO_MORE 錯誤碼來維持與最廣泛應用程式範圍的相容性。

WSAEFAULT
lpqsResults 緩衝區太小,無法包含 WSAQUERYSET 集。
WSAEINVAL
此提供者的一或多個參數無效或遺失。
WSA_INVALID_HANDLE
指定的查閱句柄無效。
WSANO_DATA
在資料庫中找到名稱,但找不到符合指定限制的數據。
WSASERVICE_NOT_FOUND
服務未知。 在指定的命名空間中找不到服務。
WSA_NOT_ENOUGH_MEMORY
記憶體不足,無法執行這項作業。

言論

NSPv2LookupServiceNextEx 函式會作為 Windows Vista 和更新版本上可用的命名空間服務提供者第 2 版 (NSPv2) 架構的一部分。

在 Windows Vista 和 Windows Server 2008 上,NSPv2LookupServiceNextEx 函式只能用於NS_EMAIL命名空間提供者上的作業。

提供者會在 lpqsResults 緩衝區中傳遞 WSAQUERYSET2 結構。 客戶端應該呼叫 NSPv2LookupServiceNextEx 函式,直到傳回 WSA_E_NOMORE為止,表示已傳回所有 WSAQUERYSET2 結構。

此函式中指定的 dwControlFlags,且在 NSPv2LookupServiceBegin 時指定的 會以「限制」的方式處理。 這些限制會結合 NSPv2LookupServiceBegin 時間與 NSPv2LookupServiceNextEx 時間的限制。 因此,NSPv2LookupServiceNextEx 的旗標永遠無法增加在 NSPv2LookupServiceBegin所要求的數據量,不過指定更多或更少旗標不是錯誤。 在指定 NSPv2LookupServiceNextEx 指定的旗標 僅適用於該呼叫。

dwControlFlagsLUP_FLUSHPREVIOUSLUP_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** 結構中表示查詢結果。 如需詳細資訊,請參閱 Query-Related 資料結構
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 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 ws2spi.h

另請參閱

CSADDR_INFO

NSPV2_ROUTINE

NSPv2Cleanup

NSPv2ClientSessionRundown

NSPv2LookupServiceBegin

NSPv2LookupServiceEnd

NSPv2SetServiceEx

NSPv2Startup

WSAQUERYSET2

WSASetLastError