Функция RpcServerUseProtseqIfExW (rpcdce.h)
Функция RpcServerUseProtseqIfEx сообщает библиотеке времени выполнения RPC использовать указанную последовательность протоколов в сочетании с конечными точками в спецификации интерфейса для получения удаленных вызовов процедур.
Синтаксис
RPC_STATUS RpcServerUseProtseqIfExW(
RPC_WSTR Protseq,
unsigned int MaxCalls,
RPC_IF_HANDLE IfSpec,
void *SecurityDescriptor,
PRPC_POLICY Policy
);
Параметры
Protseq
Указатель на строковый идентификатор последовательности протокола для регистрации в библиотеке времени выполнения RPC.
MaxCalls
Длина очереди невыполненной работы для последовательности протоколов ncacn_ip_tcp. Все остальные последовательности протоколов игнорируют этот параметр. Используйте RPC_C_PROTSEQ_MAX_REQS_DEFAULT, чтобы указать значение по умолчанию. См. примечания.
IfSpec
Интерфейс, содержащий сведения о конечной точке для создания привязки для последовательности протоколов, указанной в параметре Protseq.
SecurityDescriptor
Указатель на необязательный параметр, предоставленный для подсистемы безопасности. Используется только для ncacn_np и последовательностей протоколов ncalrpc. Все остальные последовательности протоколов игнорируют этот параметр. Использование дескриптора безопасности в конечной точке для обеспечения безопасности сервера не рекомендуется. Этот параметр не отображается в спецификации DCE для этого API.
Policy
Указатель на структуру RPC_POLICY, которая содержит флаги, ограничивающие выделение портов для динамических портов, что позволяет многодомным компьютерам выборочно привязаться к сетевым картам.
Возвращаемое значение
Ценность | Значение |
---|---|
|
Вызов выполнен успешно. |
|
Конечная точка для этой последовательности протоколов не указана в файле IDL. |
|
Последовательность протоколов не поддерживается на этом узле. |
|
Последовательность протоколов недопустимая. |
|
Недопустимый формат конечной точки. |
|
Система не хватает памяти. |
|
Дескриптор безопасности недопустим. |
Замечания
Параметры и эффекты RpcServerUseProtseqIfEx расширения RpcServerUseProtseqIf. Разница заключается в параметре политики
Задание NICFlags поле структуры RPC_POLICY значение 0 делает этот расширенный API функционально эквивалентным исходному RpcServerUseProtseqIf, а сервер привязывается к сетевым адаптерам на основе параметров в системном реестре. Сведения о том, как параметры реестра определяют доступные порты Интернета и интрасети, см. в настройке реестра для выделения портов и выборочной привязки.
Чтобы получить запросы на вызовы удаленных процедур, сервер должен зарегистрировать по крайней мере одну последовательность протоколов в библиотеке времени выполнения 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.
Чтобы зарегистрировать все последовательности протоколов из IDL-файла, сервер вызывает RpcServerUseAllProtseqsIfEx. Дополнительные сведения см. в разделе Server-Side Привязка. Список поддерживаемых последовательностей протоколов Microsoft RPC см. в строковой привязке.
Заметка
Заголовок rpcdce.h определяет RpcServerUseProtseqIfEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | rpcdce.h (include Rpc.h) |
библиотеки |
Rpcrt4.lib |
DLL | Rpcrt4.dll |
См. также
Написание защищенного клиента или сервера RPC