API определен в заголовочном файле sysroot-*-kos/include/coresrv/dcm/groups/subscr.h из состава KasperskyOS SDK.
API позволяет клиентам получать уведомления о публикации и отмене публикации групп служб. С позиции клиента группа служб представляет собой набор служб одного сервера, уведомления о публикации и отмене публикации которых можно получать, используя один DCM-дескриптор. При этом действует ограничение о том, что сервер не может предоставлять несколько служб с одинаковым интерфейсом. Несколько серверов могут предоставлять одинаковые группы служб, требуемые клиенту. Сервер может предоставлять несколько групп служб, требуемых клиенту. Множества служб из разных групп, требуемых клиенту, могут пересекаться.
Сведения о функциях API приведены в таблице ниже.
Создание DCM-дескриптора, позволяющего получать уведомления о публикации и отмене публикации групп служб
Чтобы создать DCM-дескриптор, позволяющий получать уведомления о публикации и отмене публикации групп служб с заданными интерфейсами, нужно вызвать функцию DcmSetGroupSubscription(). Через параметр endpointTypes нужно задать имена интерфейсов группируемых служб. В параметре endpointsCount нужно указать число группируемых служб, равное числу интерфейсов, заданных через параметр endpointTypes. (Уведомления будут содержать сведения о том числе служб, которое равно числу интерфейсов, так как действует ограничение, что каждому интерфейсу соответствует отдельная и единственная служба.)
После вызова функции DcmSetGroupSubscription() начинает формироваться очередь уведомлений, в которую также попадут уведомления о публикации групп служб, которые были опубликованы до вызова этой функции и соответствуют критериям фильтрации.
Получение уведомлений о публикации и отмене публикации групп служб
Чтобы извлечь уведомление о публикации или отмене публикации группы служб из очереди этих уведомлений, нужно вызвать функцию DcmReadGroupPubQueue(). В параметре subscrHandle функции DcmReadGroupPubQueue() нужно указать DCM-дескриптор, полученный вызовом функции DcmSetGroupSubscription(). В параметре maxCount функции DcmReadGroupPubQueue() нужно указать число элементов в массиве, заданном через параметр outEndpoints. Значение этого параметра должно быть не меньше числа служб в группе. Значение, полученное через параметр outPubStatus функции DcmReadGroupPubQueue(), отражает, что группа служб опубликована, или публикация группы служб отменена. Уведомление о публикации группы служб появляется в очереди только в том случае, если сервер публикует все службы группы (сразу или по отдельности). Если сервер публикует только часть требуемых клиенту служб, то уведомление о публикации группы служб не появляется. Уведомление об отмене публикации группы служб появляется в очереди только в том случае, если ранее было извлечено уведомление о публикации этой группы служб. Публикация группы служб может быть отменена сервером либо в результате завершения сервера.
Используя имена интерфейсов и квалифицированные имена служб, полученные в результате вызова функции DcmSetGroupSubscription(), нужно создать DCM-дескрипторы, которые позволяют выполнить запросы на создание IPC-каналов с сервером для использования требуемых служб. Чтобы создать эти дескрипторы нужно использовать функцию DcmCreateConnection() из базового API dcm_api.h. Затем нужно выполнить запросы на создание IPC-каналов с сервером, используя функцию DcmConnectToEndpoint() из базового API dcm_api.h.
Закрытие DCM-дескриптора, позволяющего получать уведомления о публикации и отмене публикации групп служб
Если больше не требуется получать уведомления о публикации и отмене публикации группы служб с заданными интерфейсами, то DCM-дескриптор, созданный вызовом функции DcmSetGroupSubscription(), нужно закрыть вызовом функции DcmCloseGroupSubscrHandle().
Прерывание блокирующих вызовов функций
Чтобы прервать блокирующий вызов функции DcmReadGroupPubQueue() из другого потока исполнения, нужно вызвать функцию DcmInterruptGroupSubscrBlockingCall().
Отслеживание событий
Используя функции DcmSubscribeToGroupSubscrEvent() и DcmUnsubscribeFromGroupSubscrEvent() совместно с функциями из API notice_api.h, можно получать уведомления о том, что произошли следующие события:
DCM_PUBLICATION_CHANGED, DCM-дескриптор, полученный вызовом функции DcmSetGroupSubscription());DcmReadGroupPubQueue() (флаг маски событий DCM_BLOCKING_CALL_INTERRUPTED, DCM-дескриптор, полученный вызовом функции DcmSetGroupSubscription()).Функции DcmSubscribeToGroupSubscrEvent() и DcmUnsubscribeFromGroupSubscrEvent() позволяют настроить приемник уведомлений, соответственно добавляя и удаляя отслеживаемые объекты, идентифицируемые DCM-дескрипторами. Функция DcmSubscribeToGroupSubscrEvent() задает для записей вида "ресурс – маска событий" идентификатор DCM_EVENT_ID. Флаги маски событий и идентификатор записи вида "ресурс – маска событий" DCM_EVENT_ID определены в заголовочном файле sysroot-*-kos/include/coresrv/dcm/dcm_api.h из состава KasperskyOS SDK.
Сведения о функциях API
Функции subscr.h
Функция |
Сведения о функции |
|---|---|
|
Назначение Создает DCM-дескриптор, позволяющий получать уведомления о публикации и отмене публикации групп служб с заданными интерфейсами. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Извлекает уведомление о публикации или отмене публикации группы служб из очереди этих уведомлений. Параметры
Возвращаемые значения В случае успеха возвращает Если блокирующий вызов был прерван вызовом функции Дополнительные сведения Неблокирующий вызов, если в параметре |
|
Назначение Прерывает блокирующий вызов функции Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Закрывает DCM-дескриптор, полученный вызовом функции Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Настраивает приемник уведомлений, чтобы он получал уведомления о событиях, связанных с объектом, идентифицируемым заданным DCM-дескриптором. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Настраивает приемник уведомлений, чтобы он не получал уведомления о событиях, связанных с объектом, идентифицируемым заданным DCM-дескриптором. Параметры
Возвращаемые значения В случае успеха возвращает |