Служба процессов

Служба предназначена для управления процессами.

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

Методы службы task.Task (интерфейс kl.core.Task)

Метод

Назначение и параметры метода

Потенциальная опасность метода

Create

Назначение

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

Параметры

  • [in] name – имя процесса.
  • [in] eiid – имя класса процесса.
  • [in] path – имя исполняемого файла в ROMFS.
  • [in] stackSize – размер стека потока исполнения, используемый по умолчанию при создании потоков процесса, в байтах.
  • [in] priority – приоритет начального потока исполнения.
  • [in] flags – флаги, задающие параметры создания процесса.
  • [out] child – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует созданный процесс.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Создать процесс, который будет привилегированным с точки зрения политики безопасности решения (указав имя класса процессов с привилегиями).
  • Зарезервировать имя процесса, чтобы другой процесс с таким именем нельзя было создать.
  • Создать процесс, при возникновении необработанного исключения в котором операционная система останавливается.
  • Загрузить в память процесса код из исполняемого файла для последующего исполнения.
  • Исчерпать оперативную память, создавая множество процессов.
  • Исчерпать память ядра, создавая в ней множество объектов.

LoadSeg

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] mdl – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер MDL, содержащий сегмент ELF-образа.
  • [in] segAttr – структура, содержащая параметры загрузки сегмента ELF-образа.
  • [out] rc – код возврата.
  • [out] retaddr – базовый адрес региона виртуальной памяти процесса, куда загружен сегмент ELF-образа.

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

VmReserve

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] addr – желаемый базовый адрес региона виртуальной памяти или 0, чтобы этот адрес был выбран автоматически.
  • [in] size – размер региона виртуальной памяти в байтах.
  • [in] flags – флаги, задающие параметры региона виртуальной памяти.
  • [out] outAddr – базовый адрес зарезервированного региона виртуальной памяти.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Исчерпать память ядра, создавая в ней множество объектов.
  • Зарезервировать регионы виртуальной памяти в другом процессе, который был создан "пустым" и еще не запущен, при наличии его дескриптора. (Маска прав дескриптора должна разрешать резервирование виртуальной памяти.)

VmFree

Назначение

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

Параметры

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

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

SetEntry

Назначение

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

Параметры

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

Создает условия для запуска кода, загруженного в память процесса.

LoadElfSyms

Назначение

Загружает таблицу символов .symtab и таблицу строк .strtab из буферов MDL в память процесса, который был создан "пустым".

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] symMdl – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер MDL, содержащий таблицу символов .symtab.
  • [in] symSegAttr – структура, содержащая параметры загрузки таблицы символов .symtab.
  • [in] symSize – размер таблицы символов .symtab в байтах.
  • [in] strMdl – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер MDL, содержащий таблицу строк .strtab.
  • [in] strSegAttr – структура, содержащая параметры загрузки таблицы строк .strtab.
  • [in] strSize – размер таблицы строк .strtab в байтах.
  • [out] rc – код возврата.

Нет.

LoadElfHdr

Назначение

Записывает заголовок ELF-образа в PCB процесса, который был создан "пустым".

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] hdrData – последовательность, содержащая заголовок ELF-образа.
  • [out] rc – код возврата.

Нет.

SetEnv

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует дочерний процесс.
  • [in] env – последовательность, содержащая данные для записи в SCP.
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

FreeSelfEnv

Назначение

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

Параметры

  • [out] rc – код возврата.

Нет.

Resume

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Запустить на исполнение код, загруженный в память процесса.
  • Запустить множество ранее созданных процессов, чтобы сократить вычислительные ресурсы, доступные другим процессам (рекомендуется контролировать приоритет начального потока исполнения при вызове метода Create).

Exit

Назначение

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

Параметры

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

Нет.

Terminate

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [out] rc – код возврата.

Позволяет завершить другой процесс при наличии его дескриптора. (Маска прав дескриптора должна разрешать завершение процесса.)

GetExitInfo

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует завершившейся процесс.
  • [out] status – значение, отражающее причину завершения процесса.
  • [out] info – объединение, содержащее сведения о завершившемся процессе.
  • [out] rc – код возврата.

Нет.

GetThreadContext

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс, который находится в "замороженном" состоянии.
  • [in] index – индекс потока исполнения. Используется для перечисления потоков исполнения. Нумерация начинается с нуля. Нулевой индекс имеет поток исполнения, в котором возникло необработанное исключение.
  • [out] context – структура, содержащая идентификатор (TID) и контекст потока исполнения.
  • [out] rc – код возврата.

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

GetNextVmRegion

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс, который находится в "замороженном" состоянии.
  • [in] after – адрес, после которого размещен регион виртуальной памяти.
  • [out] next – базовый адрес региона виртуальной памяти.
  • [out] size – размер региона виртуальной памяти в байтах.
  • [out] flags – флаги, отражающие параметры региона виртуальной памяти.
  • [out] handle – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер MDL, отображенный на регион виртуальной памяти.
  • [out] rc – код возврата.

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

TerminateAfterFreezing

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс, который находится в "замороженном" состоянии.
  • [out] rc – код возврата.

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

GetName

Назначение

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

Параметры

  • [out] name – имя процесса.
  • [out] rc – код возврата.

Нет.

GetPath

Назначение

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

Параметры

  • [out] path – имя исполняемого файла.
  • [out] rc – код возврата.

Нет.

GetInitialThreadPriority

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [out] priority – приоритет начального потока исполнения.
  • [out] rc – код возврата.

Нет.

SetInitialThreadPriority

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] priority – приоритет начального потока исполнения.
  • [out] rc – код возврата.

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

Рекомендуется контролировать приоритет начального потока исполнения.

GetTasksList

Назначение

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

Параметры

  • [out] notice – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует приемник уведомлений, который настроен на получение уведомлений о завершении процессов.
  • [out] strings – последовательность, содержащая параметры процессов.
  • [out] pids – последовательность, содержащая идентификаторы процессов (PID каждого процесса).
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

SetInitialThreadSchedPolicy

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] policy – класс планирования начального потока процесса.
  • [in] priority – приоритет начального потока процесса.
  • [in] params – объединение, содержащее параметры класса планирования начального потока процесса.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Сделать начальный поток процесса потоком исполнения реального времени, который заберет все процессорное время у остальных потоков исполнения, в том числе из других процессов (рекомендуется контролировать класс планирования начального потока процесса).
  • Повысить приоритет начального потока процесса, чтобы сократить процессорное время, доступное остальным потокам исполнения, в том числе из других процессов (рекомендуется контролировать приоритет начального потока процесса).

ReseedAslr

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] seed – последовательность, содержащая начальное значение генератора случайных чисел.
  • [out] rc – код возврата.

Нет.

GetElfSyms

Назначение

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

Параметры

  • [out] relocBase – смещение загрузки ELF-образа в байтах.
  • [out] syms – адрес таблицы символов .symtab.
  • [out] symsCnt – размер таблицы символов .symtab в байтах.
  • [out] strs – адрес таблицы строк .strtab.
  • [out] strsSize – размер таблицы строк .strtab в байтах.
  • [out] rc – код возврата.

Нет.

TransferHandle

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [in] srcHandle – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Поле дескриптора содержит передаваемый дескриптор.
  • [in] srcBadge – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует объект контекста передачи ресурса.
  • [in] dstRights – маска прав потомка передаваемого дескриптора.
  • [out] dstHandle – значение потомка переданного дескриптора (из пространства дескрипторов процесса, который получил дескриптор).
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

GetPid

Назначение

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

Параметры

  • [in] task – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует процесс.
  • [out] pid – идентификатор процесса.
  • [out] rc – код возврата.

Нет.

В начало