Управление процессами (низкоуровневый API task_api.h)

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

Основные возможности API:

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

Библиотека libkos также предоставляет высокоуровневый API для управления процессами. Рекомендуется использовать именно этот API. Низкоуровневый API следует использовать, если недостаточно возможностей высокоуровневого API.

Создание и запуск процесса

Для создания и запуска процесса требуются следующие функции API:

Эти функции предназначены для использования библиотекой libkos. Разработчику решения для создания и запуска процессов нужно использовать функции API task.h. При этом для многих функций API task_api.h, которые предназначены для применения разработчиком решения, входным параметром является дескриптор процесса. Чтобы получить дескриптор процесса, нужно вызвать функцию KosTaskGetHandle() из API task.h. Дескриптор процесса можно передать другому процессу через IPC.

Функция KnTaskVmReserveForElf() предназначена не только для использования библиотекой libkos, но и для применения разработчиком решения. Эта функция резервирует регион виртуальной памяти для загрузки ELF-образа. Через входные параметры task и elfDescr принимает дескриптор процесса и указатель на объект, описывающий ELF-образ, соответственно. (Объект, описывающий ELF-образ, создается функцией KnElfOpen() из API elf_api.h.) Через выходной параметр relocBase передает смещение загрузки ELF-образа. Если ELF-файл имеет тип DYN, передает случайное смещение, для ELF-файла другого типа передает нулевое смещение. Смещение загрузки ELF-образа является входным параметром функций KosTaskLoadSegments(), KosTaskInitFromSegEx() из API task.h, а также функции KnElfCreateVmSegEx() из API elf_api.h. Случайное смещение загрузки ELF-образа является элементом поддержки рандомизации размещения адресного пространства процесса. Рандомизация размещения адресного пространства (англ. Address Space Layout Randomization, ASLR) – это размещение структур данных (ELF-образа, динамических библиотек, стека и кучи) в памяти процесса по случайным адресам с целью усложнения эксплуатации уязвимостей, которые связаны с заранее известной злоумышленнику структурой адресного пространства процесса.

Перед запуском процесс получает данные от своего родительского процесса через страницу статических соединений. Страница статических соединений (англ. Static Connection Page, SCP) – набор структур, содержащих данные для статического создания IPC-каналов, параметры запуска и переменные окружения программы. Родительский процесс записывать данные в SCP дочернего процесса вызовом функции KnTaskSetEnv(). Дочерний процесс при запуске считывает данные из SCP вызовом функции KnTaskGetEnv(), а затем удаляет SCP вызовом функции KnTaskFreeEnv(). Функции KnTaskGetEnv() и KnTaskFreeEnv(), как и функция KnTaskSetEnv(), предназначены для использования библиотекой libkos.

По умолчанию начальный поток процесса является стандартным потоком исполнения. (О классах планирования потоков исполнения см. "Управление потоками исполнения (низкоуровневый API thread_api.h)".) Чтобы получить приоритет начального потока процесса, нужно вызвать функцию KnTaskGetInitialThreadPriority(). Чтобы изменить приоритет начального потока процесса, нужно вызвать функцию KnTaskSetInitialThreadPriority(). Чтобы изменить класс планирования и/или приоритет начального потока процесса, нужно вызвать функцию KnTaskSetInitialPolicy(). Все три функции можно использовать после установки точки входа в программу, а также после запуска процесса. Точку входа в программу устанавливают все функции создания процесса из API task.h, кроме KosTaskCreate(). Если процесс создан функцией KosTaskCreate(), точка входа будет установлена после вызова функции KosTaskLoadSegments().

Завершение процесса

Завершение процесса включает в себя:

Процесс завершается по следующим причинам:

Коды завершения процессов определяются разработчиком решения. Эти коды нужно указывать в параметре status функции KnTaskExit(). Если процесс завершился в результате завершения всех его потоков, то кодом завершения этого процесса будет код завершения его начального потока. Чтобы получить код завершения процесса, который завершился по собственной инициативе, нужно вызвать функцию KnTaskGetExitCode().

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

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

Если процесс создан одной из функций API task.h с указанием флага KOS_TASK_FLAG_DUMPABLE, то в результате необработанного исключения этот процесс не завершится, а перейдет в "замороженное" состояние. "Замороженное" состояние процесса – это такое состояние процесса, при котором исполнение его потоков завершилось в результате необработанного исключения, но ресурсы не освободились, чтобы можно было получить сведения об этом процессе. Чтобы получить контекст потока исполнения, входящего в процесс, который находится в "замороженном" состоянии, нужно вызвать функцию KnTaskGetThreadContext(). Чтобы получить сведения о регионе виртуальной памяти, принадлежащем процессу, который находится в "замороженном" состоянии, нужно вызвать функцию KnTaskGetNextVmRegion(). Эти сведения включают такую информацию, как базовый адрес и размер региона виртуальной памяти, права доступа к нему. Перед переходом процесса в "замороженное" состояние выполняется вывод данных обратной трассировки стека (сведений о стеке вызовов) для потока исполнения, в котором возникло необработанное исключение. Чтобы завершить процесс, который находится в "замороженном" состоянии, нужно вызвать функцию KnTaskTerminateAfterFreezing().

Чтобы объект ядра, который описывает процесс, был удален после завершения этого процесса, нужно до или после завершения этого процесса закрыть или отозвать каждый его дескриптор во всех процессах, которые владеют этими дескрипторами.

Обработка исключений

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

Функция обработки исключений вызывается при возникновении исключения в любом потоке процесса. В случае успешной обработки исключения эта функция возвращает значение, отличное от ноля, в противном случае она возвращает ноль. Входным параметром функции обработки исключений является структура, содержащая сведения об исключении. Тип этой структуры определен в заголовочном файле sysroot-*-kos/include/thread/tcbpage.h из состава KasperskyOS SDK.

Если функции обработки исключений, зарегистрированной на уровне процесса, не удалось успешно обработать исключение, будет вызвана функция обработки исключений, зарегистрированная на уровне потока исполнения, в котором возникло это исключение. (Об обработке исключений на уровне потоков исполнения см. "Управление потоками исполнения (низкоуровневый API thread_api.h)".)

Получение сведений о процессе

Чтобы получить идентификатор процесса (PID), нужно вызвать функцию KnTaskGetId() или KnTaskGetIdByHandle(). Функция KnTaskGetId() позволяет получить PID вызывающего процесса. Функция KnTaskGetIdByHandle() позволяет получить PID процесса по его дескриптору.

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

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

Передача дескрипторов дочернему процессу

Родительский процесс может передавать дескрипторы дочернему процессу, который еще не запущен. (Общие сведения о передаче дескрипторов приведены в разделе "Передача дескрипторов".) Передать дескриптор дочернему процессу позволяет функция KnTaskTransferResource(). Эта функция предназначена для использования библиотекой libkos. Разработчику решения нужно использовать функцию KosTaskTransferResource() из API task.h, которая не только передает дескриптор, но и копирует его в SCP дочернего процесса, чтобы дочерний процесс мог найти переданный дескриптор вызовом функции KosTaskLookupResource() из API task.h.

Резервирование памяти в дочернем процессе

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

Получение адреса GSI

Общая системная информация (англ. Global System Information, GSI) – структура, содержащая системные сведения, такие как число отсчетов таймера с момента запуска ядра, число отсчетов таймера в секунду, число процессоров (вычислительных ядер) в активном состоянии, данные о процессорном кеше. Тип структуры определен в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK. Получить адрес GSI позволяет функция KnTaskGetGsi(). Эта функция предназначена для использования библиотекой libc.

Получение адреса PCB

Блок управления процессом (англ. Process Control Block, PCB) – структура, содержащая сведения о процессе, которые используются ядром для управления этим процессом. Тип структуры определен в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK. Получить адрес PCB позволяет функция KnTaskGetPcb(). Эта функция предназначена для использования библиотекой libc.

Получение адресов и размеров таблицы символов .symtab и таблицы строк .strtab

Получить адреса и размеры таблицы символов .symtab и таблицы строк .strtab, загруженных в память процесса, позволяет функция KnTaskGetElfSyms(). Эта функция предназначена для механизма, который выводит данные обратной трассировки стека, работая в пользовательском режиме (не в режиме ядра).

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

Функции task_api.h

Функция

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

KnTaskCreate()

Назначение

Создает процесс.

Параметры

  • [in] name – указатель на имя процесса.
  • [in] eiid – указатель на имя класса процесса.
  • [in,optional] path – указатель на путь к исполняемому файлу или RTL_NULL, если не требуется задавать путь к исполняемому файлу. Функция не использует заданный путь для обращения к исполняемому файлу, а только сохраняет в качестве метаданных созданного процесса.
  • [in,optional] stackSize – размер стека потока исполнения, используемый по умолчанию при создании потоков процесса, в байтах. Если указать 0, то по умолчанию стек будет иметь размер 1 МБ.
  • [in] priority – приоритет начального потока исполнения. Тип параметра определен в заголовочном файле sysroot-*-kos/include/coresrv/thread/thread_api.h из состава KasperskyOS SDK.
  • [out] outHandle – указатель на дескриптор процесса.

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

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

KnTaskCreateEx()

Назначение

Создает процесс.

Параметры

  • [in] name – указатель на имя процесса.
  • [in] eiid – указатель на имя класса процесса.
  • [in,optional] path – указатель на путь к исполняемому файлу или RTL_NULL, если не требуется задавать путь к исполняемому файлу. Функция не использует заданный путь для обращения к исполняемому файлу, а только сохраняет в качестве метаданных созданного процесса.
  • [in,optional] stackSize – размер стека потока исполнения, используемый по умолчанию при создании потоков процесса, в байтах. Если указать 0, то по умолчанию стек будет иметь размер 1 МБ.
  • [in] priority – приоритет начального потока исполнения. Тип параметра определен в заголовочном файле sysroot-*-kos/include/coresrv/thread/thread_api.h из состава KasperskyOS SDK.
  • [in] flags – флаги, задающие параметры создания процесса.
  • [out] outHandle – указатель на дескриптор процесса.

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

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

Дополнительные сведения

В параметре flags можно указать следующие флаги:

  • TaskExceptionTerminatesTask – процесс завершается в результате необработанного исключения. Этот флаг нельзя указывать совместно с другими флагами, кроме флага TaskEmpty.
  • TaskExceptionFreezesTask – процесс переходит в "замороженное" состояние в результате необработанного исключения. Этот флаг нельзя указывать совместно с другими флагами, кроме флага TaskEmpty.
  • TaskExceptionTerminatesSystem – аппаратная платформа выключается или перезагружается в результате необработанного исключения в процессе. Этот флаг нельзя указывать совместно с другими флагами, кроме флага TaskEmpty. Флаг TaskExceptionTerminatesSystem может быть недоступен для использования в зависимости от конфигурации ядра KasperskyOS. В случае доступности этого флага конфигурация ядра также задает вариант реакции на необработанное исключение в процессе: выключение или перезагрузка.
  • TaskEmpty – создание "пустого" процесса. Этот флаг должен быть обязательно указан.

KnTaskGetGsi()

Назначение

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

Параметры

Нет.

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

Указатель на GSI. Тип данных для хранения GSI определен в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK.

KnTaskGetPcb()

Назначение

Позволяет получить адрес блока управления процессом (PCB) для вызывающего процесса.

Параметры

Нет.

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

Указатель на PCB. Тип данных для хранения PCB определен в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK.

KnTaskGetEnv()

Назначение

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

Параметры

  • [out] envSize – указатель на размер SCP в байтах.

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

Указатель на SCP или RTL_NULL, если у процесса нет SCP.

KnTaskSetEnv()

Назначение

Записывает данные в SCP процесса.

Параметры

  • [in] task – дескриптор процесса.
  • [in] env – указатель на буфер с данными для записи в SCP.
  • [in] envSize – размер данных для записи в SCP в байтах.

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

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

KnTaskFreeEnv()

Назначение

Удаляет SCP вызывающего процесса.

Параметры

Нет.

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

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

KnTaskResume()

Назначение

Запускает процесс.

Параметры

  • [in] task – дескриптор процесса.

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

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

KnTaskExit()

Назначение

Завершает вызывающий процесс.

Параметры

  • [in] status – код завершения процесса.

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

Код ошибки.

Дополнительные сведения

Не завершает процесс, если в нем есть потоки исполнения, привязанные к прерываниям.

KnTaskTerminate()

Назначение

Завершает процесс.

Параметры

  • [in] task – дескриптор процесса.

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

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

KnTaskGetExitStatus()

Назначение

Позволяет получить сведения о причине завершения процесса.

Параметры

  • [in] task – дескриптор завершившегося процесса.
  • [out] status – указатель на значение, отражающее причину завершения процесса. Тип данных для хранения этого значения определен в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK.

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

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

Дополнительные сведения

Через параметры status можно получить следующие значения:

  • TaskExitUnexpected – процесс завершился аварийно.
  • TaskExitNormal – процесс завершился по собственной инициативе.
  • TaskExitTerminated – процесс завершился по внешнему запросу.

KnTaskGetExceptionInfo()

Назначение

Позволяет получить сведения о необработанном исключении, которое привело к аварийному завершению процесса.

Параметры

  • [in] task – дескриптор аварийно завершившегося процесса.
  • [out] excType – указатель на код исключения, который неспецифичен для любой процессорной архитектуры. Тип данных для хранения этого кода определен в заголовочном файле sysroot-*-kos/include/hal/exc_codes.h из состава KasperskyOS SDK.
  • [out] excNo – указатель на код исключения, который специфичен для используемой процессорной архитектуры. Тип данных для хранения этого кода определен в заголовочном файле sysroot-*-kos/include/hal/exc_codes.h из состава KasperskyOS SDK.
  • [out] exceptionContext – указатель на структуру, содержащую контекст потока исполнения, в котором возникло исключение. Тип структуры определен в заголовочном файле sysroot-*-kos/include/hal/*/frame.h из состава KasperskyOS SDK.

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

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

KnTaskGetThreadContext()

Назначение

Позволяет получить контекст потока исполнения, входящего в процесс, который находится в "замороженном" состоянии.

Параметры

  • [in] task – дескриптор процесса, который находится в "замороженном" состоянии.
  • [in] index – индекс потока исполнения. Используется для перечисления потоков исполнения. Нумерация начинается с нуля. Нулевой индекс имеет поток исполнения, в котором возникло необработанное исключение.
  • [out] context – указатель на структуру, содержащую идентификатор (TID) и контекст потока исполнения. Тип структуры определен в заголовочном файле sysroot-*-kos/include/thread/context.h из состава KasperskyOS SDK.

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

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

KnTaskGetNextVmRegion()

Назначение

Позволяет получить сведения о регионе виртуальной памяти, принадлежащем процессу, который находится в "замороженном" состоянии.

Параметры

  • [in] task – дескриптор процесса, который находится в "замороженном" состоянии.
  • [in,optional] after – адрес, после которого размещен регион виртуальной памяти, или RTL_NULL, если нужно получить сведения о регионе виртуальной памяти, который размещен первым.
  • [out] next – указатель на базовый адрес региона виртуальной памяти.
  • [out] size – указатель на размер региона виртуальной памяти в байтах.
  • [out] flags – указатель на флаги, отражающие параметры региона виртуальной памяти. Флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.
  • [out,optional] outHandle – указатель на дескриптор буфера MDL, отображенного на регион виртуальной памяти. Функция создает буфер MDL из физической памяти, отображенной на регион виртуальной памяти (даже если уже существует буфер MDL, который отображен на этот регион виртуальной памяти). Если указать RTL_NULL, буфер MDL не будет создан.

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

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

KnTaskTerminateAfterFreezing()

Назначение

Завершает процесс, который находится в "замороженном" состоянии.

Параметры

  • [in] task – дескриптор процесса, который находится в "замороженном" состоянии.

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

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

KnTaskGetExitCode()

Назначение

Позволяет получить код завершения процесса, который завершился по собственной инициативе.

Параметры

  • [in] task – дескриптор завершившегося процесса.
  • [out] exitCode – указатель на код завершения процесса.

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

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

KnTaskGetId()

Назначение

Позволяет получить идентификатор процесса (PID) для вызывающего процесса.

Параметры

Нет.

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

Идентификатор процесса. Тип идентификатора определен в заголовочном файле sysroot-*-kos/include/task/pidtype.h из KasperskyOS SDK.

KnTaskGetName()

Назначение

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

Параметры

  • [out] name – указатель на буфер для сохранения имени процесса.
  • [in] msize – размер буфера для сохранения имени процесса в байтах.

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

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

KnTaskGetPath()

Назначение

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

Параметры

  • [out] path – указатель на буфер для сохранения пути к исполняемому файлу. Если путь к исполняемому файлу не задан при создании процесса, то в буфере будет сохранена пустая строка.
  • [in] msize – размер буфера для сохранения пути к исполняемому файлу в байтах.

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

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

KnTaskGetInitialThreadPriority()

Назначение

Позволяет получить приоритет начального потока процесса.

Параметры

  • [in] task – дескриптор процесса.
  • [out] priority – указатель на приоритет начального потока процесса. Тип данных для хранения приоритета потока исполнения определен в заголовочном файле sysroot-*-kos/include/coresrv/thread/thread_api.h из состава KasperskyOS SDK.

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

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

KnTaskSetInitialThreadPriority()

Назначение

Задает приоритет начального потока процесса.

Параметры

  • [in] task – дескриптор процесса.
  • [in] priority – приоритет начального потока процесса. Тип параметра определен в заголовочном файле sysroot-*-kos/include/coresrv/thread/thread_api.h из состава KasperskyOS SDK.

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

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

KnTaskSetExceptionHandler()

Назначение

Регистрирует функцию обработки исключений для вызывающего процесса.

Параметры

  • [in,optional] handler – идентификатор функции обработки исключений или RTL_NULL, чтобы дерегистрировать предыдущую зарегистрированную функцию без регистрации новой. Тип параметра определен в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK.

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

Идентификатор предыдущей зарегистрированной функции обработки исключений или RTL_NULL при ее отсутствии. Тип возвращаемого значения определен в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK.

KnTaskLoadSeg()

Назначение

Загружает сегмент ELF-образа в память процесса.

Параметры

  • [in] h – дескриптор процесса.
  • [in] seg – указатель на структуру, описывающую загружаемый сегмент ELF-образа. Если задать поле loadAddr этой структуры равным 0, то адрес загрузки сегмента будет выбран автоматически. Тип структуры определен в заголовочном файле sysroot-*-kos/include/coresrv/vmm/vmm_types.h из состава KasperskyOS SDK.
  • [out] actual – указатель на адрес загрузки сегмента ELF-образа.

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

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

KnTaskVmReserve()

Назначение

Резервирует регион виртуальной памяти в процессе.

Параметры

  • [in] task – дескриптор процесса.
  • [in,optional] hint – странично выровненный желаемый базовый адрес региона виртуальной памяти или RTL_NULL, чтобы этот адрес был выбран автоматически.
  • [in] size – размер региона виртуальной памяти в байтах.
  • [in] flags – флаги, задающие параметры региона виртуальной памяти. Флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.
  • [out] addr – указатель на базовый адрес зарезервированного региона виртуальной памяти.

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

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

Дополнительные сведения

В параметре flags можно указать следующие флаги:

  • VMM_FLAG_LOCKED – фиксация региона виртуальной памяти с выделением всего требуемого объема физической памяти. При вызове функции KnTaskVmReserve() с этим флагом фиксация не выполняется. Этот флаг имеет эффект при последующих действиях с зарезервированным регионом виртуальной памяти, которые связаны с его фиксацией.
  • VMM_FLAG_READ, VMM_FLAG_WRITE, VMM_FLAG_EXECUTE и VMM_FLAG_RWX_MASK – флаги, задающие права доступа к региону виртуальной памяти.
  • VMM_FLAG_LOW_GUARD, VMM_FLAG_HIGH_GUARD – добавление охранной страницы в начало и конец региона виртуальной памяти соответственно. Размер охранной страницы не включается в размер региона виртуальной памяти.

Допустимые комбинации флагов, задающих права доступа к региону виртуальной памяти:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

KnTaskVmReserveForElf()

Назначение

Резервирует регион виртуальной памяти в процессе для загрузки ELF-образа.

Параметры

  • [in] task – дескриптор процесса.
  • [in] elfDescr – указатель на объект, описывающий ELF-образ. Тип данных для хранения объекта определен в заголовочном файле sysroot-*-kos/include/coresrv/elf/elf_api.h из состава KasperskyOS SDK.
  • [out] relocBase – указатель на смещение загрузки ELF-образа в байтах.

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

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

KnTaskVmFree()

Назначение

Освобождает регион виртуальной памяти, зарезервированный вызовом функции KnTaskVmReserve().

Параметры

  • [in] task – дескриптор процесса.
  • [in] base – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах.

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

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

KnTaskSetInitialState()

Назначение

Задает точку входа в программу и смещение загрузки ELF-образа.

Параметры

  • [in] h – дескриптор процесса.
  • [in] state – указатель на структуру, содержащую адрес точки входа в программу и смещение загрузки ELF-образа в байтах.

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

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

KnTaskLoadElfSyms()

Назначение

Загружает таблицу символов .symtab и таблицу строк .strtab в память процесса.

Параметры

  • [in] h – дескриптор процесса.
  • [in] symTabSeg – указатель на структуру, описывающую загружаемый сегмент ELF-образа с таблицей символов .symtab. Тип структуры определен в заголовочном файле sysroot-*-kos/include/coresrv/vmm/vmm_types.h из состава KasperskyOS SDK.
  • [in] symTabSize – размер таблицы символов .symtab в байтах.
  • [in] strTabSeg – указатель на структуру, описывающую загружаемый сегмент ELF-образа с таблицей строк .strtab. Тип структуры определен в заголовочном файле sysroot-*-kos/include/coresrv/vmm/vmm_types.h из состава KasperskyOS SDK.
  • [in] strTabSize – размер таблицы строк .strtab в байтах.

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

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

KnTaskSetInitialPolicy()

Назначение

Задает класс планирования и приоритет начального потока процесса.

Параметры

  • [in] task – дескриптор процесса.
  • [in] policy – класс планирования начального потока процесса. Тип параметра определен в заголовочном файле sysroot-*-kos/include/thread/tidtype.h из состава KasperskyOS SDK.
  • [in] priority – приоритет начального потока процесса. Тип параметра определен в заголовочном файле sysroot-*-kos/include/coresrv/thread/thread_api.h из состава KasperskyOS SDK.
  • [in,optional] param – указатель на параметры класса планирования начального потока или RTL_NULL. Тип данных для хранения этих параметров определен в заголовочном файле sysroot-*-kos/include/coresrv/thread/thread_api.h из состава KasperskyOS SDK.

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

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

Дополнительные сведения

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

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

KnTaskReseedAslr()

Назначение

Задает начальное значение генератора случайных чисел для поддержки ASLR в заданном процессе.

Параметры

  • [in] task – дескриптор процесса.
  • [in] seed – указатель на буфер с начальным значением генератора случайных чисел.
  • [in] seedSize – размер буфера с начальным значением генератора случайных чисел (в байтах).

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

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

KnTaskGetElfSyms()

Назначение

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

Параметры

  • [out] relocBase – указатель на смещение загрузки ELF-образа в байтах. Смещение загрузки ELF-образа нужно сложить с адресом символа из таблицы символов .symtab, чтобы получить адрес этого символа в памяти процесса.
  • [out] syms – указатель на адрес таблицы символов .symtab.
  • [out] symsCnt – указатель на размер таблицы символов .symtab в байтах.
  • [out] strs – указатель на адрес таблицы строк .strtab.
  • [out] strsCnt – указатель на размер таблицы строк .strtab в байтах.

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

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

Дополнительные сведения

Если таблица символов .symtab и таблица строк .strtab не загружены в память процесса вызовом функции KnTaskLoadElfSyms(), то функция KnTaskGetElfSyms() возвращает rcOk (при отсутствии других ошибок). В этом случае полученные адреса таблиц имеют значения RTL_NULL, а полученные размеры таблиц имеют нулевые значения.

KnTaskGetIdByHandle()

Назначение

Позволяет получить идентификатор процесса (PID).

Параметры

  • [in] task – дескриптор процесса.
  • [out] taskId – указатель на идентификатор процесса. Тип идентификатора определен в заголовочном файле sysroot-*-kos/include/task/pidtype.h из KasperskyOS SDK.

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

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

KnTaskPanic()

Назначение

Инициирует возникновение исключения, которое не может быть обработано и приводит к завершению вызывающего процесса.

Параметры

Нет.

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

Нет.

KnTaskTransferResource()

Назначение

Передает дескриптор процессу, который еще не запущен.

Параметры

  • [in] task – дескриптор процесса.
  • [in] srcHandle – передаваемый дескриптор.
  • [in] srcBadge – дескриптор объекта контекста передачи ресурса.
  • [in] dstRights – маска прав потомка передаваемого дескриптора.
  • [out] outDstHandle – указатель на потомка переданного дескриптора (из пространства дескрипторов процесса, который получил дескриптор).

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

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

В начало