API определен в заголовочном файле sysroot-*-kos/include/kos/objhandles.h из состава KasperskyOS SDK.
API позволяет создавать таблицы числовых идентификаторов, связанных с объектами KosObject(об объектах KosObject см. "Использование объектов KosObject (objects.h)"). Использование такой таблицы позволяет проверить, является ли идентификатор действительным, перед его преобразованием в указатель на объект KosObject. Например, был создан объект KosObject, и указатель на этот объект был преобразован в числовой идентификатор, который затем был поврежден. Для выполнения операций с объектом KosObject этот идентификатор должен быть преобразован в указатель. Перед этим преобразованием выполнится поиск идентификатора в таблице, в результате чего с большой вероятностью будет обнаружено, что идентификатор недействительный, и будет получена ошибка. Если бы в этом примере для идентификации объекта KosObject использовался напрямую указатель, то повреждение этого указателя могло бы привести к неопределенным последствиям, возможно без получения ошибки.
Сведения о функциях API приведены в таблице ниже.
Создание таблицы идентификаторов объектов
Чтобы создать таблицу идентификаторов объектов, нужно вызвать функцию KosCreateObjHandleTable(). Функция создает таблицу, содержащую то число идентификаторов, которое задано в параметре initialCount. Если при последующем использовании таблицы это число окажется недостаточным, будут автоматически добавлены дополнительные идентификаторы. Максимальное число идентификаторов (с учетом добавляемых после создания таблицы) задается в параметре maxCount.
Связывание объекта с идентификатором в таблице
Чтобы связать объект с идентификатором в таблице, нужно вызвать функцию KosCreateObjHandle(). Функция инкрементирует счетчик ссылок на объект.
Получение указателя на объект по идентификатору в таблице
Чтобы получить указатель на объект по идентификатору в таблице, нужно вызвать функцию KosRefObjectByObjHandle(). Функция инкрементирует счетчик ссылок на объект. Если полученный указатель на объект больше не требуется, нужно декрементировать счетчик ссылок на объект вызовом функции KosPutObject() из API objects.h.
Удаление связи объекта с идентификатором в таблице
Чтобы удалить связь объекта с идентификатором в таблице, нужно вызвать функцию KosCloseObjHandle(). Функция декрементирует счетчик ссылок на объект, чтобы сбалансировать инкрементирование, выполненное при вызове функции KosCreateObjHandle().
Обход объектов, связанных с идентификаторами в таблице
Чтобы выполнить обход объектов, связанных с идентификаторами в таблице, нужно вызвать функцию KosWalkObjHandleTable(). Через параметр callback нужно задать callback-функцию, которая вызывается для каждого объекта при обходе и получает указатели на объект и данные, переданные функции KosWalkObjHandleTable() через параметр context. Callback-функция не должна вызывать другие функции API. Если callback-функция возвращает значение с флагом KOS_OBJECT_WALK_FINISH, то функция KosWalkObjHandleTable() прекращает обход. Если callback-функция возвращает значение с флагом KOS_OBJECT_WALK_REMOVE_OBJECT, то функция KosWalkObjHandleTable() декрементирует счетчик ссылок на соответствующий объект. (Флаги определены в заголовочном файле sysroot-*-kos/include/kos/objects.h из состава KasperskyOS SDK.)
Удаление таблицы идентификаторов объектов
Чтобы удалить таблицу идентификаторов объектов, нужно вызвать функцию KosDestroyObjHandleTable(). Перед удалением таблицы функция выполняет действия с объектами, связанными с идентификаторами в таблице. Если в параметре callback указано значение RTL_NULL, то функция KosDestroyObjHandleTable() декрементирует счетчик ссылок на каждый из объектов. Если через параметр callback задана callback-функция, то функция KosDestroyObjHandleTable() вызывает эту callback-функцию для каждого объекта при обходе идентично функции KosWalkObjHandleTable().
Сведения о функциях API
Функции objhandles.h
Функция |
Сведения о функции |
|---|---|
|
Назначение Создает таблицу идентификаторов объектов. Параметры
Возвращаемые значения В случае успеха возвращает Если в параметре Если недостаточно памяти для выполнения требуемых операций, возвращает |
|
Назначение Связывает объект с идентификатором в таблице. Параметры
Возвращаемые значения В случае успеха возвращает Если в любом параметре указано значение Если недостаточно памяти для выполнения требуемых операций, возвращает |
|
Назначение Позволяет получить указатель на объект по идентификатору в таблице. Параметры
Возвращаемые значения В случае успеха возвращает Если в параметре Если в параметре |
|
Назначение Удаляет связь объекта с идентификатором в таблице. Параметры
Возвращаемые значения В случае успеха возвращает Если в параметре Если в параметре |
|
Назначение Выполняет обход объектов, связанных с идентификаторами в таблице, и вызывает заданную функцию для каждого объекта при обходе. Параметры
Возвращаемые значения В случае успеха возвращает Если в параметре |
|
Назначение Удаляет таблицу идентификаторов объектов, а также опционально выполняет обход объектов, связанных с идентификаторами в таблице, и вызывает заданную функцию для каждого объекта при обходе. Параметры
Возвращаемые значения В случае успеха возвращает Если в параметре Если в параметре |