Я пытаюсь выполнить операцию открытия / записи / создания файла, я пробовал fslogger, который может выполнять только создание / удаление файла .... и другие операции, не могу выполнить операцию открытия / закрытия, затем я написал драйвер для этого, Я могу запустить операцию открытия / закрытия, но не могу запустить операцию создания, более того, это слишком беспорядочно! например, если я открываю файл и изменяю его, а затем закрываю его, драйвер получает много операций открытия / записи ... Я не могу сказать, какая из них действительно вызвана операцией открытия / закрытия пользователя ... любые подсказки об этом? Благодарю.
как отслеживать работу на платформе Mac
Ответы (1)
Лучшим выбором будет система KAuth. Вы устанавливаете свой обработчик kauth (как расширение ядра) и получаете различные коды обратного вызова, когда кто-то пытается создать, открыть или закрыть файл. Это включает в себя обратный вызов на критическом пути открытия файлов, поэтому все, что вы делаете, должно быть быстрым!
Цитировать:
KAUTH_SCOPE_FILEOP определяет следующие действия.
- KAUTH_FILEOP_OPEN
- KAUTH_FILEOP_CLOSE
- KAUTH_FILEOP_CLOSE_MODIFIED
- KAUTH_FILEOP_RENAME
- KAUTH_FILEOP_EXCHANGE
- KAUTH_FILEOP_LINK
- KAUTH_FILEOP_EXEC
https://developer.apple.com/library/mac/technotes/tn2127/_index.html
Если вы пишете kext, у вас возникает вопрос, как вернуть эту информацию в пользовательское пространство. FWIW Я использовал Kqueue, но вы можете добиться успеха с другим методом (дайте мне знать в комментариях, если вы это сделаете!).
Подробнее о Kauth здесь и KQueue здесь. Это плохо документировано, но между этими двумя есть достаточно информации, чтобы понять, что вам нужно делать.