如何获得正在 OS X 上读取文件的通知?
How can I get notifications that a file is being read on OS X?
我有一个可以在 Windows 上运行的软件。该软件有两个组件:在内核模式下工作的文件系统 minifilter 驱动程序和与驱动程序对话的用户模式组件。驱动程序接收有关 IO 中断请求的通知,例如 IRP_MJ_READ
. A sample application that does this can be found on github。这适用于 Windows.
支持的任何用户和大多数文件系统
我需要为 OS X(仅限桌面和服务器)开发类似的软件。我看过的东西:
- FSEvent
- Kernel Queues
- 系统调用tableAPIhooking/hijacking
- kprobe
- fanotify
我的保留意见是:FSEvents 的性能可能不是很好,因为我需要监视根 /
文件夹和任何已安装的设备。我对内核队列和系统调用的了解非常有限 API 劫持可能使移植到不同的 OS X 版本变得非常困难,并可能导致与 AV 或 OS 保护(例如 PaX 加固)的冲突).
问题: OS 上的任何用户正在读取根目录 /
中任何(递归)文件夹中的文件时,我如何得到通知X?
使用内核扩展 Kernel Authorization provides the File Operation Scope,允许您监控所有 vnode 的 KAUTH_FILEOP_OPEN
操作。
KAUTH_FILEOP_OPEN
操作将在访问所有文件之前调用,从而允许您监控文件访问。
如果您想要更细粒度的操作,VNode scope 提供了更大的操作集,包括 KAUTH_VNODE_READ_DATA
,但请注意,此范围可能非常嘈杂,会触发大量任何时候的动作。
可以在 Singh 的 Mac OS X Internals
中找到此类内核扩展的示例代码
FSEvents 的性能没有问题;如果您使用 Spotlight and/or 时间机器,它已经 运行 在您的系统上。如果有更有效的方法从头开始重新实现它,我会感到非常惊讶。因此,如果它在其他方面都满足您的要求,我会接受它。
我有一个可以在 Windows 上运行的软件。该软件有两个组件:在内核模式下工作的文件系统 minifilter 驱动程序和与驱动程序对话的用户模式组件。驱动程序接收有关 IO 中断请求的通知,例如 IRP_MJ_READ
. A sample application that does this can be found on github。这适用于 Windows.
我需要为 OS X(仅限桌面和服务器)开发类似的软件。我看过的东西:
- FSEvent
- Kernel Queues
- 系统调用tableAPIhooking/hijacking
- kprobe
- fanotify
我的保留意见是:FSEvents 的性能可能不是很好,因为我需要监视根 /
文件夹和任何已安装的设备。我对内核队列和系统调用的了解非常有限 API 劫持可能使移植到不同的 OS X 版本变得非常困难,并可能导致与 AV 或 OS 保护(例如 PaX 加固)的冲突).
问题: OS 上的任何用户正在读取根目录 /
中任何(递归)文件夹中的文件时,我如何得到通知X?
使用内核扩展 Kernel Authorization provides the File Operation Scope,允许您监控所有 vnode 的 KAUTH_FILEOP_OPEN
操作。
KAUTH_FILEOP_OPEN
操作将在访问所有文件之前调用,从而允许您监控文件访问。
如果您想要更细粒度的操作,VNode scope 提供了更大的操作集,包括 KAUTH_VNODE_READ_DATA
,但请注意,此范围可能非常嘈杂,会触发大量任何时候的动作。
可以在 Singh 的 Mac OS X Internals
中找到此类内核扩展的示例代码FSEvents 的性能没有问题;如果您使用 Spotlight and/or 时间机器,它已经 运行 在您的系统上。如果有更有效的方法从头开始重新实现它,我会感到非常惊讶。因此,如果它在其他方面都满足您的要求,我会接受它。