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


Функция RpcServerUseProtseqEx (rpcdce.h)

Функция RpcServerUseProtseqEx сообщает библиотеке времени выполнения RPC использовать указанную последовательность протокола для получения удаленных вызовов процедур.

Синтаксис

RPC_STATUS RpcServerUseProtseqEx(
  RPC_CSTR     Protseq,
  unsigned int MaxCalls,
  void         *SecurityDescriptor,
  PRPC_POLICY  Policy
);

Параметры

Protseq

Указатель на строковый идентификатор последовательности протокола для регистрации в библиотеке времени выполнения RPC.

MaxCalls

Длина очереди невыполненной работы для последовательности протокола ncacn_ip_tcp . Все остальные последовательности протоколов игнорируют этот параметр. Используйте RPC_C_PROTSEQ_MAX_REQS_DEFAULT, чтобы указать значение по умолчанию. См. заметки.

SecurityDescriptor

Указатель на необязательный параметр, предоставленный для подсистемы безопасности Windows XP/2000/NT. Используется только для последовательностей протоколов ncacn_np и ncalrpc . Все остальные последовательности протоколов игнорируют этот параметр. Использование дескриптора безопасности в конечной точке для обеспечения безопасности сервера не рекомендуется. Этот параметр не отображается в спецификации DCE для этого API.

Policy

Указатель на структуру RPC_POLICY , которая содержит флаги, ограничивающие выделение портов для динамических портов и разрешающие многосетевым компьютерам выборочную привязку к сетевым картам. Структура RPC_POLICY позволяет вызывающей объекту направлять библиотеку времени выполнения RPC на использование порта интрасети или интернет-порта, а также других вариантов.

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

Значение Значение
RPC_S_OK
Вызов выполнен успешно.
RPC_S_PROTSEQ_NOT_SUPPORTED
Последовательность протоколов не поддерживается на этом узле.
RPC_S_INVALID_RPC_PROTSEQ
Последовательность протоколов.
RPC_S_OUT_OF_MEMORY
Системе не хватает памяти.
RPC_S_INVALID_SECURITY_DESC
Недопустимый дескриптор безопасности.
 
Примечание Список допустимых кодов ошибок см. в разделе Возвращаемые значения RPC.
 

Комментарии

Параметры и эффекты RpcServerUseProtseqEx подразделяют параметры RpcServerUseProtseq. Разница заключается в поле Политика , которое позволяет ограничить выделение портов для динамических портов и позволяет многосетевым компьютерам выборочно привязаться к сетевым картам.

Установка нулевого значения поля NICFlags структуры RPC_POLICY делает эту расширенную функцию функционально эквивалентной исходному RpcServerUseProtseq, и сервер будет выполнять привязку к сетевым адаптерам на основе параметров системного реестра. Дополнительные сведения см. в разделе Настройка реестра для выделения портов и выборочной привязки.

Примечание Параметры флагов в поле Политика действуют только в том случае, если используется последовательность протоколов ncacn_ip_tcp или ncadg_ip_udp . Для всех остальных последовательностей протоколов время выполнения RPC игнорирует эти значения.
 
Серверное приложение вызывает RpcServerUseProtseqEx для регистрации одной последовательности протокола в библиотеке времени выполнения RPC. Чтобы получать запросы на удаленные вызовы процедур, сервер должен зарегистрировать по крайней мере одну последовательность протоколов в библиотеке времени выполнения RPC. Серверное приложение может вызывать RpcServerUseProtseqEx несколько раз для регистрации дополнительных последовательностей протокола.

Для каждой последовательности протокола, зарегистрированной сервером, библиотека времени выполнения RPC создает одну или несколько конечных точек, через которые сервер получает запросы на удаленные вызовы процедур. Библиотека времени выполнения RPC создает разные конечные точки для каждой последовательности протокола. Имя конечной точки создается во время выполнения RPC или операционной системой. Например, для ncacn_ip_tcp номер порта динамически определяется временем выполнения RPC в зависимости от доступности и параметров реестра.

Для MaxCalls значение, предоставленное приложением, является лишь подсказкой. Время выполнения RPC или поставщик сокетов Windows может переопределить значение. Например, в Windows XP или Windows 2000 Профессиональная значение ограничено 5. Значения больше 5 игнорируются, а вместо этого используется 5. В Windows Server 2003 и Windows 2000 Server это значение будет учитываться.

Приложения должны быть осторожны, чтобы передать разумные значения в MaxCalls. Большие значения на сервере, расширенном сервере или сервере центра обработки данных могут привести к использованию большого объема памяти нестраничного пула. Использование слишком малого значения также является неблагоприятным, так как это может привести к тому, что пакеты TCP SYN будут удовлетворены TCP RST с сервера, если очередь невыполненной работы будет исчерпана. Разработчик приложения должен сбалансировать объем памяти и требования к масштабируемости при определении правильного значения maxCalls.

Если компьютер настроен для использования выборочной привязки, успешное возвращение не гарантирует, что сервер создал конечные точки для всех сетевых интерфейсов, присутствующих на компьютере. Время выполнения RPC может не прослушивать некоторые сетевые интерфейсы в зависимости от параметров выборочной привязки. Кроме того, если интерфейс еще не получил IP-адрес с помощью DHCP, сервер RPC не будет прослушивать сетевой интерфейс, пока ему не будет назначен DHCP-адрес. Успешное возвращение подразумевает, что сервер прослушивает по крайней мере один сетевой интерфейс; Полный список дескрипторов привязки, по которым можно получить вызовы удаленных процедур, можно получить с помощью вызова функции RpcServerInqBindings.

Чтобы зарегистрировать все последовательности протоколов, сервер вызывает подпрограмму RpcServerUseAllProtseqsEx .

Дополнительные сведения см. в разделе Привязка на стороне сервера.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header rpcdce.h (включая Rpc.h)
Библиотека Rpcrt4.lib
DLL Rpcrt4.dll

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

RpcServerUseAllProtseqsEx

RpcServerUseAllProtseqsIfEx

RpcServerUseProtseqEpEx

RpcServerUseProtseqIfEx