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


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

Функция WSCWriteProviderOrder32 используется для изменения порядка доступных 32-разрядных поставщиков транспорта. Порядок протоколов определяет приоритет протокола при перечислении или выборе для использования.

Примечание Этот вызов является строго 32-разрядной версией WSCWriteProviderOrder для использования на 64-разрядных платформах. Он предоставляется, чтобы разрешить 64-разрядным процессам изменять 32-разрядные каталоги.
 

Синтаксис

int WSCWriteProviderOrder32(
  [in] LPDWORD lpwdCatalogEntryId,
  [in] DWORD   dwNumberOfEntries
);

Параметры

[in] lpwdCatalogEntryId

Указатель на массив элементов CatalogEntryId , найденных в структуре WSAPROTOCOL_INFO . Порядок элементов CatalogEntryId является новым приоритетом для протоколов.

[in] dwNumberOfEntries

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

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

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

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

Комментарии

Функция WSCWriteProviderOrder32 является строго 32-разрядной версией функции WSCWriteProviderOrder . На 64-разрядном компьютере все вызовы не только 32-разрядные (например, все функции, которые не заканчиваются на "32"), работают в собственном 64-разрядном каталоге. Процессы, выполняемые на 64-разрядном компьютере, должны использовать определенные вызовы 32-разрядных функций для работы со строго 32-разрядным каталогом и сохранения совместимости. Определения и семантика конкретных 32-разрядных вызовов совпадают с собственными аналогами.

Порядок первоначальной установки поставщиков транспортных услуг определяет порядок их перечисления через WSCEnumProtocols32 в интерфейсе поставщика услуг или через WSAEnumProtocols в интерфейсе приложения. Что еще более важно, этот порядок также определяет порядок, в котором учитываются протоколы и поставщики услуг, когда клиент запрашивает создание сокета на основе его семейства адресов, типа и идентификатора протокола.

Windows Sockets 2 включает приложение под названием Sporder.exe, которое позволяет переупорядочение каталога установленных протоколов в интерактивном режиме после установки протоколов. Windows Sockets 2 также включает вспомогательную библиотеку DLL ,Sporder.dll , которая экспортирует этот процедурный интерфейс для изменения порядка протоколов. Этот интерфейс можно импортировать путем связывания с Sporder.lib.

Ниже приведены сценарии, в которых может произойти сбой функции WSCWriteProviderOrder32 :

  • Параметр dwNumberOfEntries не равен числу зарегистрированных поставщиков услуг.
  • Идентификатор lpwdCatalogEntryId содержит недопустимый идентификатор каталога.
  • lpwdCatalogEntryId не содержит все допустимые идентификаторы каталога ровно один раз.
  • Подпрограмма по какой-либо причине не может получить доступ к реестру (например, неадекватные разрешения пользователя).
  • Другой процесс (или поток) в настоящее время вызывает функцию.

При успешном выполнении WSCWriteProviderOrder32 попытается оповещать все заинтересованные приложения, зарегистрированные для уведомления об изменении, вызвав WSAProviderConfigChange.

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

Требования

Требование Значение
Минимальная версия клиента Windows Vista, Windows XP Professional x64 Edition [только классические приложения]
Минимальная версия сервера Windows Server 2008, Windows Server 2003 x64 Edition [только классические приложения]
Целевая платформа Windows
Header sporder.h
Библиотека Sporder.lib
DLL Ws2_32.dll

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

WSAEnumProtocols

WSAPROTOCOL_INFO

WSAProviderConfigChange

WSCEnumProtocols32