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


структура RPC_INTERFACE_TEMPLATEW (rpcdce.h)

Структура RPC_INTERFACE_TEMPLATE определяет интерфейс сервера группы интерфейсов RPC.

Синтаксис

typedef struct {
  unsigned long      Version;
  RPC_IF_HANDLE      IfSpec;
  UUID               *MgrTypeUuid;
  RPC_MGR_EPV        *MgrEpv;
  unsigned int       Flags;
  unsigned int       MaxCalls;
  unsigned int       MaxRpcSize;
  RPC_IF_CALLBACK_FN *IfCallback;
  UUID_VECTOR        *UuidVector;
  RPC_WSTR           Annotation;
  void               *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEW, *PRPC_INTERFACE_TEMPLATEW;

Члены

Version

Это поле зарезервировано и должно иметь значение 0.

IfSpec

Созданная MIDL структура, определяющая интерфейс для регистрации.

MgrTypeUuid

Указатель на UUID для связывания с MgrEpv. NULL или nil UUID регистрирует IfSpec с nil UUID.

MgrEpv

Указатель на структуру RPC_MGR_EPV, содержащую вектор точки входа (EPV) подпрограмм диспетчера. Если значение NULLиспользуется EPV, созданный по умолчанию по умолчанию.

Flags

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

MaxCalls

Максимальное число одновременных вызовов удаленной процедуры, запрашиваемых сервером, может принимать этот интерфейс. Библиотека времени выполнения RPC делает все возможное, чтобы сервер не разрешал больше одновременных вызовов, чем количество вызовов, указанных в MaxCalls. Однако фактическое число может быть больше MaxCalls и может отличаться для каждой последовательности протоколов.

Вызовы других интерфейсов управляются значением параметра MaxCalls, заданного в RpcServerListen.

Если число одновременных вызовов не является проблемой, то можно добиться немного лучшей производительности на стороне сервера, указав значение по умолчанию с помощью RPC_C_LISTEN_MAX_CALLS_DEFAULT. Это позволяет освободить среду выполнения RPC от принудительного применения ненужных ограничений.

MaxRpcSize

Максимальный размер в байтах входящих блоков данных. MaxRpcSize может использоваться для предотвращения вредоносных атак типа "отказ в обслуживании". Если блок данных удаленного вызова процедуры превышает MaxRpcSize, библиотека времени выполнения RPC отклоняет вызов и отправляет клиенту ошибку RPC_S_ACCESS_DENIED. Указание значения (без знака int) –1 в MaxRpcSize удаляет ограничение размера входящих блоков данных. Этот параметр не влияет на вызовы, выполненные по протоколу ncalrpc.

IfCallback

Указатель на функцию обратного вызова RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN или NULL для обратного вызова. Каждый зарегистрированный интерфейс может иметь другую функцию обратного вызова.

UuidVector

Указатель на вектор объектов UUID, предлагаемых сервером для регистрации в средстве сопоставления конечных точек RPC. Серверное приложение создает этот вектор. NULL указывает, что идентификатор ов UUID для регистрации нет объектов.

Annotation

Указатель на комментарий строки символов, примененный к каждому элементу кросс-продукта, добавленному в локальную базу данных карты конечных точек. Строка может содержать до 64 символов, включая символ конца NULL. Укажите значение NULL или строку, завершаемую значением NULL (\0), если строки заметки отсутствуют.

Строка заметки используется приложениями только для сведений. RPC не использует эту строку для определения экземпляра сервера, с которым клиент взаимодействует или для перечисления элементов в базе данных карты конечных точек.

SecurityDescriptor

Необязательный дескриптор безопасности, описывающий, какие клиенты имеют право доступа к интерфейсу.

Замечания

Чтобы зарегистрировать интерфейс, сервер предоставляет следующие сведения:

  • Спецификация интерфейса — это структура данных, которую создает компилятор MIDL.
  • Тип диспетчера UUID и диспетчер EPV Тип диспетчера UUID и диспетчер EPV определяет, какой подпрограмма диспетчера выполняется, когда сервер получает запрос на вызов удаленной процедуры от клиента. Для каждой реализации интерфейса, предлагаемого сервером, он должен зарегистрировать отдельный EPV диспетчера. Обратите внимание, что при указании ненулевых типов диспетчера UUIDсервер также должен вызывать RpcObjectSetType для регистрации объектов этого типа, отличного от nil.

Все интерфейсы группы интерфейсов рассматриваются как автоматического прослушивания. Среда выполнения начинает прослушивать вызовы сразу после активации группы интерфейсов. Вызовы RpcServerListen и RpcMgmtStopServerListening не влияют на интерфейс, а также не вызывают вызов RpcServerUnregisterIf с IfSpec значением NULL.

Указание функции обратного вызова безопасности в IfCallback позволяет серверу приложению ограничить доступ к его интерфейсам на основе отдельного клиента. То есть по умолчанию безопасность является необязательной; Время выполнения сервера будет отправлять незащищенные вызовы, даже если сервер вызвал RpcServerRegisterAuthInfo. Если сервер хочет принять только прошедшие проверку подлинности клиенты, Функция обратного вызова интерфейса должна вызывать RpcBindingInqAuthClient, RpcGetAuthorizationContextForClientили RpcServerInqCallAttributes для получения уровня безопасности или попытки олицетворения клиента с RpcImpersonateClient. Он также может указать флаг RPC_IF_ALLOW_SECURE_ONLY в Flags, чтобы отклонить неуверенные вызовы.

Если серверное приложение указывает функцию обратного вызова безопасности для интерфейсов в IfCallback, время выполнения RPC автоматически отклоняет вызовы без сведений проверки подлинности в этом интерфейсе. Кроме того, во время выполнения записываются интерфейсы, используемые каждым клиентом. Когда клиент создает RPC в интерфейс, который он не использовал во время текущего сеанса связи, библиотека времени выполнения RPC вызывает функцию обратного вызова безопасности интерфейса. Указание RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH в флагах предотвратит автоматическое отклонение неавтономных клиентов. Обратите внимание, что вызовы сеанса безопасности NULL могут иметь сведения о проверке подлинности, даже если они получены от анонимных клиентов. Таким образом, отсутствие обратного вызова недостаточно для предотвращения подключения анонимных клиентов; Либо функция обратного вызова безопасности должна проверить это, либо должен использоваться флаг RPC_IF_ALLOW_SECURE_ONLY. RPC_IF_ALLOW_SECURE_ONLY отклоняет вызовы сеансов NULL только в Windows XP и более поздних версиях Windows.

Сигнатуру для функции обратного вызова см. в RPC_IF_CALLBACK_FN.

Функция обратного вызова в IfCallback должна возвращать RPC_S_OK, если клиенту разрешено вызывать методы в этом интерфейсе. Любой другой код возврата приведет к тому, что клиент получит исключение RPC_S_ACCESS_DENIED.

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

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 8 [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2012 [только классические приложения]
заголовка rpcdce.h (include Rpc.h)

См. также

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate