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


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

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

Синтаксис

RPC_STATUS RpcServerUseProtseqEpExW(
  RPC_WSTR     Protseq,
  unsigned int MaxCalls,
  RPC_WSTR     Endpoint,
  void         *SecurityDescriptor,
  PRPC_POLICY  Policy
);

Параметры

Protseq

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

MaxCalls

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

Endpoint

Указатель на сведения об адресе конечной точки для создания привязки для последовательности протоколов, указанной Protseq.

SecurityDescriptor

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

Policy

Указатель на структуру RPC_POLICY, содержащую флаги, которые задают атрибуты для конкретного транспорта. В случае ncadg_mq транспорта эти флаги указывают свойства очереди получения сервера. В случае транспорта ncacn_ip_tcp или ncadg_ip_udp эти флаги ограничивают выделение портов для динамических портов и позволяют многодомным компьютерам выборочно привязаться к сетевым картам.

Параметры флага в поле политики эффективны только в том случае, если используются последовательности протоколов ncacn_ip_tcp, ncadg_ip_udpили ncadg_mq. Во всех остальных последовательностях протоколов время выполнения RPC игнорирует эти значения.

примечание части политики, связанной с динамическими конечными точками, игнорируются при вызове функции RpcServerUseProtseqEpEx, так как порт указан в самой конечной точке.
 

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

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

Замечания

Параметры и эффекты RpcServerUseProtseqEpEx вложены в RpcServerUseProtseqEp. Разница заключается в параметре политики , что позволяет задавать определенные политики на конечных точках. Задание поля сетевых адаптеров RPC_POLICY равно нулю, что делает эту расширенную функцию эквивалентной исходной RpcServerUseProtseqEp при использовании с транспортом ncacn_ip_tcp или ncadg_ip_udp.

Серверное приложение вызывает RpcServerUseProtseqEpEx для регистрации одной последовательности протоколов в библиотеке времени выполнения RPC. При каждой регистрации последовательности протоколов RpcServerUseProtseqEpEx включает указанные сведения об адресе конечной точки.

Чтобы получить запросы на вызовы удаленных процедур, сервер должен зарегистрировать по крайней мере одну последовательность протоколов в библиотеке времени выполнения RPC. Серверное приложение может вызывать эту подпрограмму многократно для регистрации дополнительных последовательностей и конечных точек протокола. Для каждой последовательности протоколов, зарегистрированной сервером, библиотека времени выполнения RPC создает одну или несколько конечных точек, с помощью которых сервер получает запросы на вызовы удаленных процедур. Библиотека времени выполнения RPC создает разные конечные точки для каждой последовательности протоколов. Однако каждый интерфейс в процессе доступен через любую конечную точку. Дополнительные сведения см. в статье "Запись безопасного клиента 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.

Дополнительные сведения см. в статьепривязки Server-Side строковой привязки, настройке реестра выделения портов и выборочной привязкии очереди сообщений RPC и справочных страниц MIDL и ncadg_mq.

Заметка

Заголовок rpcdce.h определяет RpcServerUseProtseqEpEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка rpcdce.h (include Rpc.h)
библиотеки Rpcrt4.lib
DLL Rpcrt4.dll

См. также

RPC_POLICY

RpcServerUseAllProtseqsEx

RpcServerUseAllProtseqsIfEx

RpcServerUseProtseqEx

RpcServerUseProtseqIfEx

Написание защищенного клиента или сервера RPC