KasperskyOS Community Edition 1.1

Динамическое создание каналов

В этом разделе

KnCmAccept()

KnCmConnect()

KnCmDrop()

KnCmListen()

NsCreate()

NsEnumServices()

NsPublishService()

NsUnPublishService()

В начало
[Topic libkos_ns_cm]

KnCmAccept()

Функция объявлена в файле coresrv/cm/cm_api.h.

Retcode KnCmAccept(const char *client, const char *service, rtl_uint32_t rsid,

Handle listener, Handle *handle);

Функция принимает запрос клиентского процесса на создание канала, полученный ранее с помощью вызова KnCmListen(). Функция вызывается серверным процессом.

Входные параметры:

  • client – имя клиентского процесса, отправляющего запрос на создание канала;
  • service – полное квалифицированное имя службы, запрошенное клиентским процессом (например, blkdev.ata);
  • rsid – идентификатор службы;
  • listener – слушающий дескриптор; если он имеет значение INVALID_HANDLE, создается новый слушающий дескриптор, который будет использоваться в качестве серверного IPC-дескриптора создаваемого канала.

Выходной параметр handle содержит серверный IPC-дескриптор создаваемого канала.

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

В начало
[Topic kn_cm_accept]

KnCmConnect()

Функция объявлена в файле coresrv/cm/cm_api.h.

Retcode KnCmConnect(const char *server, const char *service,

rtl_uint32_t msecs, Handle *handle,

rtl_uint32_t *rsid);

Функция отправляет запрос на создание канала с серверным процессом. Функция вызывается клиентским процессом.

Входные параметры:

  • server – имя серверного процесса, предоставляющего службу;
  • service – полное квалифицированное имя службы (например, blkdev.ata);
  • msecs – время ожидания принятия запроса в миллисекундах.

Выходные параметры:

  • handle – клиентский IPC-дескриптор;
  • rsid – идентификатор службы.

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

В начало
[Topic kn_cm_connect]

KnCmDrop()

Функция объявлена в файле coresrv/cm/cm_api.h.

Retcode KnCmDrop(const char *client, const char *service);

Функция отклоняет запрос клиентского процесса на создание канала, полученный ранее с помощью вызова KnCmListen(). Функция вызывается серверным процессом.

Параметры:

  • client – имя клиентского процесса, отправляющего запрос на создание канала;
  • service – полное квалифицированное имя службы, запрошенное клиентским процессом (например, blkdev.ata).

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

В начало
[Topic kn_cm_drop]

KnCmListen()

Функция объявлена в файле coresrv/cm/cm_api.h.

Retcode KnCmListen(const char *filter, rtl_uint32_t msecs, char *client,

char *service);

Функция проверяет наличие запросов клиентских процессов на создание канала. Функция вызывается серверным процессом.

Входные параметры:

  • filter – параметр не используется;
  • msecs – время ожидания запроса в миллисекундах.

Выходные параметры:

  • client – имя клиентского процесса;
  • service – полное квалифицированное имя службы, запрошенное клиентским процессом (например, blkdev.ata).

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

В начало
[Topic kn_cm_listen]

NsCreate()

Функция объявлена в файле coresrv/ns/ns_api.h.

Retcode NsCreate(const char *name, rtl_uint32_t msecs, NsHandle *ns);

Функция осуществляет попытку подключиться к серверу имен name в течение msecs миллисекунд. Если параметр name имеет значение RTL_NULL, функция пытается подключиться к серверу имен ns (серверу имен по умолчанию).

Выходной параметр ns содержит дескриптор соединения с сервером имен.

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

В начало
[Topic ns_create]

NsEnumServices()

Функция объявлена в файле coresrv/ns/ns_api.h.

Retcode NsEnumServices(NsHandle ns, const char *type, unsigned index,

char *server, rtl_size_t serverSize,

char *service, rtl_size_t serviceSize);

Функция перечисляет службы с заданным интерфейсом, опубликованные на сервере имен.

Входные параметры:

  • ns – дескриптор соединения с сервером имен, полученный ранее с помощью вызова NsCreate();
  • type – имя интерфейса, который реализует служба (например, kl.drivers.Block);
  • index – индекс для перечисления служб;
  • serverSize – максимальный размер буфера для выходного параметра server в байтах;
  • serviceSize – максимальный размер буфера для выходного параметра service в байтах.

Выходные параметры:

  • server – имя серверного процесса, предоставляющего службу (например, kl.drivers.Ata);
  • service – полное квалифицированное имя службы (например, blkdev.ata).

Например, получить полный список серверных процессов, предоставляющих службу с интерфейсом kl.drivers.Block, можно следующим образом.

rc = NsEnumServices(ns, "kl.drivers.Block", 0, outServerName, ServerNameSize, outServiceName, ServiceNameSize);

rc = NsEnumServices(ns, "kl.drivers.Block", 1, outServerName, ServerNameSize, outServiceName, ServiceNameSize);

...

rc = NsEnumServices(ns, "kl.drivers.Block", N, outServerName, ServerNameSize, outServiceName, ServiceNameSize);

Вызовы функции с инкрементированием индекса продолжаются до тех пор, пока функция не вернет rcResourceNotFound.

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

В начало
[Topic ns_enum_services]

NsPublishService()

Функция объявлена в файле coresrv/ns/ns_api.h.

Retcode NsPublishService(NsHandle ns, const char *type, const char *server,

const char *service);

Функция публикует службу с заданным интерфейсом на сервере имен.

Параметры:

  • ns – дескриптор соединения с сервером имен, полученный ранее с помощью вызова NsCreate();
  • type – имя интерфейса, который реализует публикуемая служба (например, kl.drivers.Block);
  • server – имя серверного процесса (например, kl.drivers.Ata);
  • service – полное квалифицированное имя службы (например, blkdev.ata).

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

В начало
[Topic ns_publish_service]

NsUnPublishService()

Функция объявлена в файле coresrv/ns/ns_api.h.

Retcode NsUnPublishService( NsHandle ns, const char *type, const char *server,

const char *service);

Функция снимает с публикации службу на сервере имен.

Параметры:

  • ns – дескриптор соединения с сервером имен, полученный ранее с помощью вызова NsCreate();
  • type – имя интерфейса, который реализует публикуемая служба (например, kl.drivers.Block);
  • server – имя серверного процесса (например, kl.drivers.Ata);
  • service – полное квалифицированное имя службы (например, blkdev.ata).

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

В начало
[Topic ns_unpublish_service]