WSCWriteNameSpaceOrder32 函式 (sporder.h)

WSCWriteNameSpaceOrder32函式會變更 32 位目錄中的可用 Windows Sockets (Winsock) 2 個命名空間提供者的順序。 命名空間提供者的順序會決定列舉或查詢名稱解析時命名空間的優先順序。

注意 此呼叫是 32 位版本的 WSCWriteNameSpaceOrder ,可用於 64 位平臺上。 提供它以允許 64 位進程重新排序 32 位命名空間提供者目錄。

 

語法

int WSCWriteNameSpaceOrder32(
  [in] LPGUID lpProviderId,
  [in] DWORD  dwNumberOfEntries
);

參數

[in] lpProviderId

WSANAMESPACE_INFO結構中找到的NSProviderId元素陣列。 NSProviderId元素的順序是命名空間提供者的新優先順序順序。

[in] dwNumberOfEntries

NSProviderId陣列中的專案數目。

傳回值

如果常式成功,函式會 傳回ERROR_SUCCESS (零) 。 否則,它會傳回特定的錯誤碼。

錯誤碼 意義
WSAEFAULT
NSProviderId陣列未完全包含在進程位址空間內。
WSAEINVAL
輸入參數無效,未採取任何動作。
WSANO_RECOVERY
發生無法復原的錯誤。 此錯誤會在下列幾種情況下傳回:無法開啟 Winsock 登錄、使用者缺少寫入 Winsock 登錄所需的系統管理許可權,或另一個應用程式目前正在寫入命名空間提供者目錄。
WSASYSCALLFAILURE
應該永遠不會失敗的系統呼叫失敗。
WSATRY_AGAIN
函式是由另一個執行緒或進程呼叫。
WSA_NOT_ENOUGH_MEMORY
記憶體不足,無法執行作業。
(其他)
函式可能會傳回任何登錄錯誤碼。

備註

命名空間提供者會使用 WSCInstallNameSpace32 函式,安裝在 32 位命名空間提供者目錄中的 64 位平臺上。 一開始安裝 32 位目錄中命名空間提供者的順序會控管透過 WSCEnumNameSpaceProviders32列舉的預設順序。 更重要的是,此順序也會控管用戶端要求名稱解析時,命名空間提供者的考慮順序。 在 64 位平臺上,會提供 WSCWriteNameSpaceOrder32 函式,以允許 64 位進程變更 32 位命名空間提供者目錄中的命名空間提供者順序。 您可以使用 WSCWriteNameSpaceOrder 函式來變更原生目錄中的命名空間提供者順序。

目前的命名空間提供者目錄會儲存在登錄的下列登錄機碼下:HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5

名稱解析的用戶端要求會使用 WSALookupServiceBeginWSALookupServiceNextWSALookupServiceEnd 常式。 傳遞至WSALookupServiceBeginWSAQUERYSET結構的dwNameSpace成員會設定為單一命名空間 (NS_DNS的識別碼,例如) ,其中要限制搜尋,或NS_ALL包含所有命名空間。 例如,如果多個命名空間提供者支援特定命名空間 (,NS_DNS) ,則除非lpNSProviderId成員設定為特定命名空間提供者,否則會傳回符合所要求dwNameSpace的所有命名空間提供者結果。 如果為dwNameSpace成員指定了NS_ALL,則會傳回所有命名空間提供者的結果。 傳回結果的順序取決於目錄中的命名空間提供者順序。

Windows SDK 包含名為 SpOrder.exe 的應用程式,可顯示已安裝的命名空間提供者目錄。 Winsock 2 包含 64 位平臺上的 ws2_32.DLL,可匯出 WSCWriteNameSpaceOrder32 函式,以便重新排序 32 位命名空間提供者目錄中的命名空間提供者。 您可以連結 WS2_32.lib 來匯入此介面。 對於在 Windows XP 上使用 Service Pack 2 (SP2) 和 Windows Server 2003 搭配 Service Pack 1 (SP1) 和更新版本執行的電腦, netsh.exe winsock show catalog 命令會顯示已安裝的通訊協定和命名空間提供者。 原生 64 位目錄會先顯示,後面接著 32 位提供者目錄, (在名稱) 之後以 32 表示。

WSCWriteNameSpaceOrder32 只能由以 Administrators 群組成員身分登入的使用者呼叫。 如果 WSCWriteNameSpaceOrder32 是由不是 Administrators 群組成員的使用者呼叫,則函式呼叫將會失敗, 而且會在 lpErrno 參數中傳回WSANO_RECOVERY。

對於在 Windows Vista 和 Windows Vista 上執行的電腦,此函式也可能因為使用者帳戶控制 (UAC) 而失敗。 如果包含此函式的應用程式是由以系統管理員以外的 Administrators 群組成員身分登入的使用者所執行,除非應用程式已在資訊清單檔案中標示 為 requestedExecutionLevel 設定為 requireAdministrator,否則此呼叫將會失敗。 如果 Windows Vista 和 Windows Vista 上的應用程式在用來建置可執行檔的資訊清單檔案中缺少此設定,則以系統管理員以外的 Administrators 群組成員身分登入的使用者,則必須在增強的殼層中執行應用程式,因為 系統管理員 (RunAs 系統管理員) ,此函式才能成功。

下列清單描述 WSCWriteNameSpaceOrder32 函式可能會失敗的案例:

  • dwNumberOfEntries參數不等於已註冊的命名空間提供者數目。
  • NSProviderId陣列包含不正確命名空間提供者識別碼。
  • NSProviderId陣列未只包含一次所有有效的命名空間提供者識別碼。
  • 函式因為某些原因而無法存取登錄, (使用者權限不足,例如) 。
  • 另一個進程或執行緒目前正在呼叫 函式。

規格需求

   
最低支援的用戶端 Windows Vista、Windows XP Professional x64 Edition [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008、Windows Server 2003 x64 Edition [僅限傳統型應用程式]
目標平台 Windows
標頭 sporder.h
程式庫 Sporder.lib
Dll Ws2_32.dll

另請參閱

WSAEnumNameSpaceProviders

WSANAMESPACE_INFO

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCInstallNameSpace

WSCInstallNameSpace32

WSCWriteNameSpaceOrder