Для регистрации модуля вы сначала выбираете положительное, 32-х Битное целое со знаком число, это будет ваш персональный дескриптор. Он будет требоваться при всех дальнейших процедурах связанных с регистрацией. Если случится так, что выбранный вами дескриптор в данный момент используется, то вам будет отказано в регистрации со значением ошибки - RSBAC_EEXIST.
rsbac_reg_syscall_entry в struct содержит все необходимые значения. Функция может быть не учтена установкой ее указателя в значение NULL. Ваш модуль позднее будет идентифицирован в сообщениях REG и proc-файлах по его имени. Текущая максимальная длина имени 30 знаков.
Значение переключателя определяет, будет ваш модуль с самого начала включен или выключен. В целях безопасности переключение работает только в том случае, если оно задействовано в конфигурации ядра.
{
rsbac_reg_handle_t handle;
char name[RSBAC_REG_NAME_LEN+1];
rsbac_reg_request_func_t * request_func;
rsbac_reg_set_attr_func_t * set_attr_func;
rsbac_reg_need_overwrite_func_t * need_overwrite_func;
rsbac_reg_write_func_t * write_func;
rsbac_reg_mount_func_t * mount_func;
rsbac_reg_umount_func_t * umount_func;
boolean switch_on; /* turned on initially? */
};
Единственная вещь, добавленная к вхождению struct это значение версии REG, которое позволит производить проверку версий для модулей поставляемых в бинарном виде. Оно должно быть всегда установлено в значение RSBAC_REG_VERSION. Функция регистрации возвратит ва положительный дескриптор или отрицательный код ошибки (для дополнительной информации смотри include/rsbac/reg.h).
( rsbac_version_t version,
struct rsbac_reg_entry_t entry);
(rsbac_reg_handle_t handle, boolean value);
(rsbac_reg_handle_t handle);
Позвольте мне намекнуть на примеры модулей - использование их, для начала, будет хорошим выбором и предохранит вас от излишнего печатания.