Использование методов
Когда клиент регистрируется в диспетчере таблиц маршрутизации, он может экспортировать набор методов. Эти методы используются другими клиентами для получения сведений о клиенте. Методы обеспечивают частный обмен данными между клиентами диспетчера таблиц маршрутизации.
Клиент может получить список методов, экспортированных другим клиентом. Клиент вызывает функцию RtmGetEntityMethods , предоставляя дескриптор целевого клиента.
Каждый метод, экспортируемый клиентом, уникально идентифицируется по идентификатору метода. Каждый клиент может экспортировать до 32 методов. Каждый метод соответствует биту, заданному в элементе MethodTypeструктуры RTM_ENTITY_EXPORT_METHOD . Чтобы вызвать несколько методов, клиент должен выполнить логическое ИЛИ идентификаторов этих методов. При реализации протокола необходимо указать синтаксис и семантику входных и выходных структур для каждого протокола.
Примечание
Значения идентификатора метода, соответствующие биту, заданному в нижней половине элемента MethodType (нижние 16 битов), зарезервированы корпорацией Майкрософт.
Чтобы вызвать метод второго клиента, клиент вызывает функцию RtmInvokeMethod . Диспетчер таблиц маршрутизации выполняет арбитраж всех запросов для вызова методов клиента. Диспетчер таблиц маршрутизации выполняет две функции при арбитраже между клиентами:
- Запрет второго клиента вызывать метод для клиента, отменяющего регистрацию.
- Удержание запроса "вызова" при блокировке методов и разрешение продолжения запроса при разблокировке методов.
Если клиент должен запретить другим клиентам выполнять свои методы, он может вызвать RtmBlockMethods. Диспетчер таблиц маршрутизации не разрешает обработку вызова RtmInvokeMethod , пока клиент снова не разблокирует свои методы.
Клиенты обычно блокируют методы при внесении изменений в личные данные, которыми обмениваются клиенты. Блокирующие методы являются необязательным действием. Клиент также может использовать внутренние блокировки, чтобы предотвратить вызов методов другими клиентами.
Пример кода, демонстрирующий использование этих функций, см. в разделе Получение и вызов экспортированных методов для клиента.