Выполнение системных вызовов (syscalls.h)

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

API позволяет выполнять системные вызовы Call(), Recv() и Reply() для отправки и получения IPC-сообщений.

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

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

Для передачи функциям API указателей на буферы с фиксированной частью и ареной IPC-сообщений используется заголовок IPC-сообщений, тип которого определен в заголовочном файле sysroot-*-kos/include/ipc/if_rend.h из состава KasperskyOS SDK. Перед вызовами функций API заголовки IPC-сообщений нужно связать с буферами, содержащими фиксированную часть и арену IPC-сообщений. Для этого нужно использовать функции PackInMsg() и PackOutMsg(), объявленные в заголовочном файле sysroot-*-kos/include/services/rtl/nk_msg.h из состава KasperskyOS SDK.

Функции Call(), CallEx(), Recv() и RecvEx() блокируют исполнение вызывающего потока, ожидая завершения системных вызовов. Функции CallEx() и RecvEx() позволяют задать время ожидания завершения системного вызова, по истечении которого незавершенный системный вызов прерывается, и поток, ожидающий его завершения, возобновляет исполнение. Также системный вызов прерывается, если при его выполнении возникла ошибка (например, из-за завершения серверного процесса). Завершение потока исполнения извне тоже прерывает системный вызов, завершения которого ожидает этот поток. Системный вызов, выполняемый функцией CallEx() или RecvEx(), можно прервать (например, для корректного завершения процесса) с использованием API ipc_api.h.

Если системный вызов был прерван с использованием API ipc_api.h, то функции CallEx() и RecvEx() возвращают код ошибки rcIpcInterrupt. Если отправка IPC-сообщения запрещена механизмами безопасности (модулем безопасности Kaspersky Security Module или механизмом безопасности на основе мандатных ссылок, реализуемым ядром KasperskyOS), то функции Call(), CallEx() и Reply() возвращают код ошибки rcSecurityDisallow.

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

Функции syscalls.h

Функция

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

Call()

Назначение

Выполняет системный вызов Call() с неограниченным временем ожидания его завершения.

Параметры

  • [in] handle – клиентский IPC-дескриптор.
  • [in] msgOut – указатель на заголовок IPC-запросов.
  • [in,out] msgIn – указатель на заголовок IPC-ответов.

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

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

CallEx()

Назначение

Выполняет системный вызов Call() с заданным временем ожидания его завершения и возможностью прервать его выполнение.

Параметры

  • [in] handle – клиентский IPC-дескриптор.
  • [in] msgOut – указатель на заголовок IPC-запросов.
  • [in,out] msgIn – указатель на заголовок IPC-ответов.
  • [in] mdelay – время ожидания завершения системного вызова Call() в миллисекундах или INFINITE_TIMEOUT, чтобы задать неограниченное время ожидания.
  • [in,optional] syncHandle – дескриптор объекта синхронизации IPC или INVALID_HANDLE, если прерывание системного вызова Call() не требуется.

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

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

Reply()

Назначение

Выполняет системный вызов Reply().

Параметры

  • [in] handle – серверный IPC-дескриптор.
  • [in] msgOut – указатель на заголовок IPC-ответов.

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

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

Recv()

Назначение

Выполняет системный вызов Recv() с неограниченным временем ожидания его завершения.

Параметры

  • [in] handle – серверный IPC-дескриптор.
  • [in,out] msgIn – указатель на заголовок IPC-запросов.

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

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

RecvEx()

Назначение

Выполняет системный вызов Recv() с заданным временем ожидания его завершения и возможностью прервать его выполнение.

Параметры

  • [in] handle – серверный IPC-дескриптор.
  • [in,out] msgIn – указатель на заголовок IPC-ответов.
  • [in] mdelay – время ожидания завершения системного вызова Recv() в миллисекундах или INFINITE_TIMEOUT, чтобы задать неограниченное время ожидания.
  • [in,optional] syncHandle – дескриптор объекта синхронизации IPC или INVALID_HANDLE, если прерывание системного вызова Recv() не требуется.

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

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

В начало