2013-07-07 8 views
2

Я работаю над Kext, который должен иметь доступ к полю struct proc->p_pid. Проблема в том, что структура определена только в источниках XNU, поэтому я столкнулся с ошибкой incomplete definition of type 'struct proc' во время компиляции.XNU incudes in Kext

С моей точки зрения, включение заголовков XNU в мой собственный проект - это плохое пахнущее решение, но каков альтернативный способ? Скопировать и вставить структуру в мой собственный код?

ответ

5

Для этого вы должны использовать proc_pid(proc_t). Структура должна быть непрозрачной, поскольку, если она изменяется между версиями ядра, ваш код может получить доступ к неправильному смещению.

Я бы включил определения структур, если я делаю что-то нелепое, иначе я бы поискал функциональный интерфейс.

+0

К сожалению, я не могу использовать 'proc_pid()', поскольку у меня уже есть указатель на proc внутри обработчика 'mac_rex_policy_gettask' (это платформа TrustedBSD), также мне не нужен текущий PID, мне нужен предоставленный PID. –

+1

'proc_pid' принимает' proc_t' как параметр, то есть вы можете использовать указатель, который у вас уже есть, - извинения, если ответ был немного неоднозначным. Я добавлю параметр proc_t для ввода текстового имени. ('typedef struct proc * proc_t' в kernel_types.h) – Petesh

 Смежные вопросы

  • Нет связанных вопросов^_^