Получение IPC-дескрипторов и идентификаторов служб для использования статически созданных IPC-каналов (sl-static.h)

API определен в заголовочном файле sysroot-*-kos/include/coresrv/sl/sl-static.h из состава KasperskyOS SDK.

API позволяет серверам получать слушающие дескрипторы, а клиентам получать клиентские IPC-дескрипторы и идентификаторы служб (RIIDs) для использования статически созданных IPC-каналов. (Об использовании клиентских и серверных IPC-дескрипторов, а также идентификаторов служб (RIIDs) см. "Инициализация IPC-транспорта для межпроцессного взаимодействия и управление обработкой IPC-запросов (transport-kos.h, transport-kos-dispatch.h)".)

Закрытие IPC-дескриптора, полученного с использованием API, приведет к недоступности IPC-канала. Если IPC-дескриптор был закрыт, то получить его повторно и восстановить доступ к IPC-каналу невозможно.

Сведения о функциях API приведены в таблицах ниже.

Использование API на стороне сервера

Чтобы получить слушающий дескриптор по имени статически созданного IPC-канала, связанного с сервером, нужно вызвать функцию SLStaticResolveHandle().

Чтобы получить имена и слушающие дескрипторы для всех статически созданных IPC-каналов, связанных с сервером, нужно вызвать функцию SLStaticGetServerChannels() или SLStaticAllocateAndGetServerChannels(). Вторая создает буфер для выходных данных. Чтобы удалить этот буфер, нужно вызвать функцию SLStaticFreeServerChannels().

Использование API на стороне клиента

Чтобы получить клиентский IPC-дескриптор по имени статически созданного IPC-канала, связанного с клиентом, нужно вызвать функцию SLStaticResolveHandle().

Чтобы получить идентификатор службы (RIID) по квалифицированному имени службы, предоставляемой через связанный с клиентом статически созданный IPC-канал, нужно вызвать функцию SLStaticResolveRiid(). (О квалифицированном имени службы см. "Привязка методов моделей безопасности к событиям безопасности".)

Чтобы получить сведения о службах, предоставляемых серверами, соединенными статически созданными IPC-каналами с клиентом, нужно вызвать функцию SLStaticGetEndpoints() или SLStaticAllocateAndGetEndpoints(). Эти сведения включают имена серверов, имена служб (из EDL-описаний, CDL-описаний и квалифицированные) и идентификаторы служб (RIIDs). Можно задать следующие критерии фильтрации служб:

Функция SLStaticAllocateAndGetEndpoints() создает буфер для выходных данных. Чтобы удалить этот буфер, нужно вызвать функцию SLStaticFreeEndpoints().

Получение имени процесса

API дополнительно включает функцию SLStaticSelfUniqId(), которая позволяет получить имя вызывающего процесса. Эта функция предназначена для использования библиотекой libkos.

Сведения о функциях API

Функции sl-static.h

Функция

Сведения о функции

SLStaticResolveHandle()

Назначение

Позволяет получить IPC-дескриптор по имени статически созданного IPC-канала, связанного с вызывающим клиентом или сервером.

Параметры

  • [in] channelName – указатель на имя статически созданного IPC-канала.
  • [in] type – значение, задающее, какой IPC-дескриптор требуется получить: клиентский (на стороне клиента) или слушающий (на стороне сервера).

Возвращаемые значения

В случае успеха возвращает IPC-дескриптор, иначе возвращает INVALID_HANDLE.

SLStaticResolveRiid()

Назначение

Позволяет получить идентификатор службы (RIID) по квалифицированному имени службы, предоставляемой через статически созданный IPC-канал, связанный с вызывающим клиентом.

Параметры

  • [in] handle – клиентский IPC-дескриптор статически созданного IPC-канала.
  • [in] name – указатель на квалифицированное имя службы.

Возвращаемые значения

В случае успеха возвращает идентификатор службы (RIID), иначе возвращает INVALID_RIID. Тип возвращаемого значения определен в заголовочном файле sysroot-*-kos/include/nk/types.h из состава KasperskyOS SDK.

SLStaticSelfUniqId()

Назначение

Позволяет получить имя вызывающего процесса.

Параметры

Нет.

Возвращаемые значения

В случае успеха возвращает указатель на имя вызывающего процесса, иначе возвращает RTL_NULL.

SLStaticGetServerChannels()

Назначение

Позволяет получить имена и слушающие дескрипторы для всех статически созданных IPC-каналов, связанных с вызывающим сервером.

Параметры

  • [in] maxChannelsCount – число элементов в массиве, заданном через параметр channels.
  • [out] channels – указатель на массив структур для сохранения имен и слушающих дескрипторов для статически созданных IPC-каналов.
  • [out] channelsCount – указатель на фактическое число статически созданных IPC-каналов, связанных с вызывающим сервером.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Если значение, полученное через параметр channelsCount, превышает значение, заданное через параметр maxChannelsCount, возвращает rcBufferTooSmall.

SLStaticAllocateAndGetServerChannels()

Назначение

Создает массив и сохраняет в этом массиве имена и слушающие дескрипторы для всех статически созданных IPC-каналов, связанных с вызывающим сервером.

Параметры

  • [out] outChannels – указатель на адрес массива структур с именами и слушающими дескрипторами для статически созданных IPC-каналов.
  • [out] channelsCount – указатель на число статически созданных IPC-каналов, связанных с вызывающим сервером.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

SLStaticFreeServerChannels()

Назначение

Удаляет массив, созданный вызовом функции SLStaticAllocateAndGetServerChannels().

Параметры

  • [in] channels – указатель на массив, созданный вызовом функции SLStaticAllocateAndGetServerChannels().

Возвращаемые значения

Нет.

SLStaticGetComponents()

Назначение

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

Параметры

  • [in] componentType – указатель на имя компонента в соответствии с CDL-описанием.
  • [in] maxCount – число элементов в массиве, заданном через параметр components.
  • [out] components – указатель на массив структур для сохранения имен серверов и имен экземпляров компонента (из EDL-описаний, CDL-описаний и квалифицированных).
  • [out] componentsCount – указатель на фактическое число экземпляров компонента, которые реализованы в серверах, соединенных статически созданными IPC-каналами с вызывающим клиентом.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Если значение, полученное через параметр componentsCount, превышает значение, заданное через параметр maxCount, возвращает rcBufferTooSmall.

SLStaticGetEndpoints()

Назначение

Позволяет получить сведения о службах, предоставляемых серверами, соединенными статически созданными IPC-каналами с вызывающим клиентом.

Параметры

  • [in,optional] serverName – указатель на имя сервера или RTL_NULL, если не требуется задавать сервер с конкретным именем.
  • [in,optional] componentPath – указатель на квалифицированное имя экземпляра компонента или RTL_NULL, если не требуется задавать конкретный экземпляр компонента.
  • [in,optional] endpointType – указатель на имя интерфейса служб в соответствии с IDL-описанием или RTL_NULL, если не требуется задавать конкретный интерфейс служб.
  • [in] recursive – булевое значение, которое задает, нужно ли получать сведения о службах, предоставляемых вложенными экземплярами компонентов (rtl_true – да, rtl_false – нет).
  • [in] maxCount – число элементов в массиве, заданном через параметр endpoints.
  • [out] endpoints – указатель на массив структур для сохранения имен серверов, имен служб (из EDL-описаний, CDL-описаний и квалифицированных) и идентификаторов служб (RIIDs).
  • [out] endpointsCount – указатель на фактическое число служб, которые предоставляются серверами, соединенными статически созданными IPC-каналами с вызывающим клиентом, и соответствуют критериям фильтрации, заданным через параметры serverName, componentPath, endpointType и recursive.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Если значение, полученное через параметр endpointsCount, превышает значение, заданное через параметр maxCount, возвращает rcBufferTooSmall.

SLStaticAllocateAndGetEndpoints()

Назначение

Создает массив и сохраняет в этом массиве сведения о службах, предоставляемых серверами, соединенными статически созданными IPC-каналами с вызывающим клиентом.

Параметры

  • [in,optional] serverName – указатель на имя сервера или RTL_NULL, если не требуется задавать сервер с конкретным именем.
  • [in,optional] componentPath – указатель на квалифицированное имя экземпляра компонента или RTL_NULL, если не требуется задавать конкретный экземпляр компонента.
  • [in,optional] endpointType – указатель на имя интерфейса служб в соответствии с IDL-описанием или RTL_NULL, если не требуется задавать конкретный интерфейс служб.
  • [in] recursive – булевое значение, которое задает, нужно ли получать сведения о службах, предоставляемых вложенными экземплярами компонентов (rtl_true – да, rtl_false – нет).
  • [out] outEndpoints – указатель на адрес массива структур с именами серверов, именами служб (из EDL-описаний, CDL-описаний и квалифицированными) и идентификаторами служб (RIIDs).
  • [out] outEndpointsCount – указатель на число служб, которые предоставляются серверами, соединенными статически созданными IPC-каналами с вызывающим клиентом, и соответствуют критериям фильтрации, заданным через параметры serverName, componentPath, endpointType и recursive.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

SLStaticFreeEndpoints()

Назначение

Удаляет массив, созданный вызовом функции SLStaticAllocateAndGetEndpoints().

Параметры

  • [in] endpoints – указатель на массив, созданный вызовом функции SLStaticAllocateAndGetEndpoints().

Возвращаемые значения

Нет.

В начало