WSCWriteNameSpaceOrder 函式 (sporder.h)
WSCWriteNameSpaceOrder函式會變更可用 Windows Sockets (Winsock) 2 命名空間提供者的順序。 命名空間提供者的順序會決定列舉或查詢名稱解析時命名空間的優先順序。
語法
int WSCWriteNameSpaceOrder(
[in] LPGUID lpProviderId,
[in] DWORD dwNumberOfEntries
);
參數
[in] lpProviderId
在WSANAMESPACE_INFO結構中找到的NSProviderId元素陣列。 NSProviderId元素的順序是命名空間提供者的新優先順序順序。
[in] dwNumberOfEntries
NSProviderId陣列中的元素數目。
傳回值
如果常式成功,函式會傳回 ERROR_SUCCESS (零) 。 否則,它會傳回特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
NSProviderId陣列未完全包含在進程位址空間中。 | |
一或多個引數是輸入參數無效,未採取任何動作。 | |
發生無法復原的錯誤。 此錯誤會在數個情況下傳回,包括下列情況:使用者缺少寫入 Winsock 登錄或其他應用程式目前寫入命名空間提供者目錄所需的系統管理許可權。 | |
不應該失敗的系統呼叫失敗。 | |
函式是由另一個執行緒或進程呼叫。 | |
記憶體不足,無法執行作業。 | |
|
函式可能會傳回任何登錄錯誤碼。 |
備註
命名空間提供者是使用 WSCInstallNameSpace 函式來安裝。 命名空間提供者一開始安裝的順序會控管透過 WSAEnumNameSpaceProviders列舉的預設順序。 更重要的是,此順序也會控管當用戶端要求名稱解析時,會考慮命名空間提供者的順序。 命名空間提供者的順序可以使用 WSCWriteNameSpaceOrder 函式來變更。 在 64 位平臺上,會提供 WSCWriteNameSpaceOrder32 函式,以允許 64 位進程變更 32 位命名空間提供者目錄中的命名空間提供者順序。 在 64 位平臺上,命名空間提供者會使用 WSCInstallNameSpace32 函式安裝在 32 位命名空間提供者目錄中。
目前的命名空間提供者目錄儲存在登錄機碼底下:HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5
名稱解析的用戶端要求會使用 WSALookupServiceBegin、 WSALookupServiceNext和 WSALookupServiceEnd 常式。 傳遞至WSALookupServiceBegin之WSAQUERYSET結構的dwNameSpace成員會設定為單一命名空間 (NS_DNS 的識別碼,例如,用來限制搜尋的) ,或NS_ALL包含所有命名空間。 如果多個命名空間提供者支援特定命名空間 (NS_DNS,例如) ,除非lpNSProviderId成員設定為特定命名空間提供者,否則會傳回符合所要求dwNameSpace的所有命名空間提供者結果。 如果為 dwNameSpace 成員指定了NS_ALL,則會傳回來自所有命名空間提供者的結果。 傳回結果的順序取決於目錄中的命名空間提供者順序。
Windows SDK 包含名為 SpOrder.exe 的應用程式,可讓顯示已安裝命名空間提供者的目錄。 Windows Sockets 2 包含匯出 WSCWriteNameSpaceOrder 函式的 ws2_32.dll,以便重新排序目錄中的命名空間提供者。 您可以透過連結 WS2_32.lib 來匯入此介面。 針對在具有 Service Pack 2 (SP2) 的 Windows XP 上執行的電腦,以及 Service Pack 1 (SP1) 及更新版本的 Windows Server 2003, netsh.exe winsock show catalog 命令會顯示安裝在系統上的通訊協定和命名空間提供者。
WSCWriteNameSpaceOrder 只能由以 Administrators 群組成員身分登入的使用者呼叫。 如果WSCWriteNameSpaceOrder 是由不是 Administrators群組成員的使用者呼叫,則函式呼叫將會失敗,並在lpErrno參數中傳回WSANO_RECOVERY。
對於在 Windows Vista 和 Windows Vista 上執行的電腦,此函式也可能因為使用者帳戶控制 (UAC) 而失敗。 如果包含此函式的應用程式是由以系統管理員以外的 Administrators 群組成員身分登入的使用者執行,除非應用程式已在資訊清單檔案中標示為 requestedExecutionLevel 設定為 requireAdministrator,否則此呼叫將會失敗。 如果 Windows Vista 和 Windows Vista 上的應用程式在用來建置可執行檔的資訊清單檔中缺少此設定,則以系統管理員以外的 Administrators 群組成員身分登入的使用者,則必須在增強的殼層中執行應用程式,因為系統管理員 (RunAs 系統管理員) ,此函式才能成功。
下列清單描述 WSCWriteNameSpaceOrder 函式可能會失敗的案例:
- dwNumberOfEntries參數不等於已註冊的命名空間提供者數目。
- NSProviderId陣列包含不正確命名空間提供者識別碼。
- NSProviderId陣列不包含所有有效的命名空間提供者識別碼一次。
- 例如,函式無法存取登錄 (,使用者權限不足) 。
- 另一個進程 (或執行緒) 目前正在呼叫 函式。
規格需求
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | sporder.h |
程式庫 | Sporder.lib |
Dll | Ws2_32.dll |