我正在尝试获取文件打开/写入/创建操作,我已经尝试过fslogger,它只能获取文件创建/删除....等操作,无法进行打开/关闭操作, 然后我写了一个驱动程序来做它,我可以进行打开/关闭操作,但无法进行创建操作,更重要的是,它太乱了! 例如,如果我打开一个文件并对其进行修改然后将其关闭,那么驱动程序会进行大量的打开/写入操作。我无法确定哪一个是由用户打开/关闭操作引起的。 关于这个的任何提示? 感谢。
答案 0 :(得分: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 here和KQueue here的更多信息。它没有出色的记录,但是这两者之间有足够的信息可以解决你需要做的事情。