Поделиться через


Функция WSCWriteNameSpaceOrder (sporder.h)

Функция WSCWriteNameSpaceOrder изменяет порядок доступных поставщиков пространств имен Windows (Winsock) 2. Порядок поставщиков пространства имен определяет приоритет пространства имен при перечислении или запросе разрешения имен.

Синтаксис

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

Параметры

[in] lpProviderId

Массив элементов NSProviderId , найденных в структуре WSANAMESPACE_INFO . Порядок элементов NSProviderId является новым порядком приоритета для поставщиков пространства имен.

[in] dwNumberOfEntries

Количество элементов в массиве NSProviderId .

Возвращаемое значение

Функция возвращает ERROR_SUCCESS (ноль), если подпрограмма выполнена успешно. В противном случае возвращается определенный код ошибки.

Код ошибки Значение
WSAEFAULT
Массив NSProviderId не полностью содержится в адресном пространстве процесса.
WSAEINVAL
Один или несколько аргументов являются недопустимыми входными параметрами, никаких действий не было выполнено.
WSANO_RECOVERY
Произошла неустранимая ошибка. Эта ошибка возвращается при нескольких условиях, включая следующие: пользователь не имеет прав администратора, необходимых для записи в реестр Winsock, или другое приложение в настоящее время записывает данные в каталог поставщика пространства имен.
WSASYSCALLFAILURE
Системный вызов, который никогда не должен завершать ошибку, завершился сбоем.
WSATRY_AGAIN
Функция вызывается другим потоком или процессом.
WSA_NOT_ENOUGH_MEMORY
Недостаточно памяти для выполнения операции.
(другое)
Функция может возвращать любой код ошибки реестра.

Комментарии

Поставщики пространств имен устанавливаются с помощью функции WSCInstallNameSpace . Порядок первоначальной установки поставщиков пространств имен определяет порядок их перечисления по умолчанию с помощью WSAEnumNameSpaceProviders. Что еще более важно, этот порядок также определяет порядок, в котором учитываются поставщики пространства имен, когда клиент запрашивает разрешение имен. Порядок поставщиков пространств имен можно изменить с помощью функции WSCWriteNameSpaceOrder . На 64-разрядных платформах предоставляется функция WSCWriteNameSpaceOrder32 , позволяющая 64-разрядным процессам изменять порядок поставщиков пространств имен в 32-разрядном каталоге поставщиков пространств имен. На 64-разрядных платформах поставщики пространств имен устанавливаются в 32-разрядный каталог поставщиков пространств имен с помощью функции WSCInstallNameSpace32 .

Текущий каталог поставщика пространства имен хранится в реестре в следующем разделе реестра: HKEY_LOCAL_MACHINE\system\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5

Клиентский запрос на разрешение имен использует подпрограммы WSALookupServiceBegin, WSALookupServiceNext и WSALookupServiceEnd . Члену dwNameSpace структуры WSAQUERYSET, передаваемой WSALookupServiceBegin, присваивается идентификатор одного пространства имен (например, NS_DNS), в котором необходимо ограничить поиск, или NS_ALL включить все пространства имен. Если несколько поставщиков пространств имен поддерживают определенное пространство имен (например, NS_DNS), то результаты от всех поставщиков пространств имен, соответствующих запрошенному dwNameSpace , возвращаются, если для члена lpNSProviderId не задан конкретный поставщик пространства имен. Результаты всех поставщиков пространства имен возвращаются, если для члена dwNameSpace указано NS_ALL. Порядок возврата результатов зависит от порядка поставщика пространства имен в каталоге.

Пакет WINDOWS SDK содержит приложение с именем SpOrder.exe, которое позволяет отображать каталог установленных поставщиков пространств имен. Windows Sockets 2 включает ws2_32.dll, экспортируя функцию WSCWriteNameSpaceOrder для изменения порядка поставщиков пространств имен в каталоге. Этот интерфейс можно импортировать путем связывания с WS2_32.lib. Для компьютеров под управлением Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних версий командаnetsh.exe winsock show catalog отображает поставщики протокола и пространства имен, установленные в системе.

WSCWriteNameSpaceOrder может вызываться только пользователем, вошедшего в систему как член группы администраторов. Если WSCWriteNameSpaceOrder вызывается пользователем, который не является членом группы администраторов, вызов функции завершится ошибкой и WSANO_RECOVERY возвращается в параметре lpErrno .

Для компьютеров под управлением Windows Vista и Windows Vista эта функция также может завершиться сбоем из-за контроля учетных записей (UAC). Если приложение, содержащее эту функцию, выполняется пользователем, вошедший в систему как член группы администраторов, отличный от администратора, этот вызов завершится ошибкой, если приложение не было отмечено в файле манифеста с параметром requestedExecutionLevel , для которого задано значение requireAdministrator. Если в приложении в Windows Vista и Windows Vista отсутствует этот параметр в файле манифеста, используемом для сборки исполняемого файла, пользователь, вошедший в систему как член группы администраторов, отличный от администратора, должен выполнить приложение в расширенной оболочке в качестве администратора (администратора запуска от имени администратора) для успешного выполнения этой функции.

В следующем списке описаны сценарии, в которых может произойти сбой функции WSCWriteNameSpaceOrder .

  • Параметр dwNumberOfEntries не равен количеству зарегистрированных поставщиков пространств имен.
  • Массив NSProviderId содержит недопустимый идентификатор поставщика пространства имен.
  • Массив NSProviderId не содержит все допустимые идентификаторы поставщика пространства имен только один раз.
  • Функция не может получить доступ к реестру (например, недостаточно разрешений пользователя).
  • В настоящее время функция вызывается другим процессом (или потоком).

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header sporder.h
Библиотека Sporder.lib
DLL Ws2_32.dll

См. также раздел

WSAEnumNameSpaceProviders

WSANAMESPACE_INFO

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCInstallNameSpace

WSCInstallNameSpace32

WSCWriteNameSpaceOrder32