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


Использование методов

Когда клиент регистрируется в диспетчере таблиц маршрутизации, он может экспортировать набор методов. Эти методы используются другими клиентами для получения сведений о клиенте. Методы обеспечивают частный обмен данными между клиентами диспетчера таблиц маршрутизации.

Клиент может получить список методов, экспортированных другим клиентом. Клиент вызывает функцию RtmGetEntityMethods , предоставляя дескриптор целевого клиента.

Каждый метод, экспортируемый клиентом, уникально идентифицируется по идентификатору метода. Каждый клиент может экспортировать до 32 методов. Каждый метод соответствует биту, заданному в элементе MethodTypeструктуры RTM_ENTITY_EXPORT_METHOD . Чтобы вызвать несколько методов, клиент должен выполнить логическое ИЛИ идентификаторов этих методов. При реализации протокола необходимо указать синтаксис и семантику входных и выходных структур для каждого протокола.

Примечание

Значения идентификатора метода, соответствующие биту, заданному в нижней половине элемента MethodType (нижние 16 битов), зарезервированы корпорацией Майкрософт.

 

Чтобы вызвать метод второго клиента, клиент вызывает функцию RtmInvokeMethod . Диспетчер таблиц маршрутизации выполняет арбитраж всех запросов для вызова методов клиента. Диспетчер таблиц маршрутизации выполняет две функции при арбитраже между клиентами:

  • Запрет второго клиента вызывать метод для клиента, отменяющего регистрацию.
  • Удержание запроса "вызова" при блокировке методов и разрешение продолжения запроса при разблокировке методов.

Если клиент должен запретить другим клиентам выполнять свои методы, он может вызвать RtmBlockMethods. Диспетчер таблиц маршрутизации не разрешает обработку вызова RtmInvokeMethod , пока клиент снова не разблокирует свои методы.

Клиенты обычно блокируют методы при внесении изменений в личные данные, которыми обмениваются клиенты. Блокирующие методы являются необязательным действием. Клиент также может использовать внутренние блокировки, чтобы предотвратить вызов методов другими клиентами.

Пример кода, демонстрирующий использование этих функций, см. в разделе Получение и вызов экспортированных методов для клиента.