2015-11-05 6 views
3

J'ai un logiciel qui fonctionne sous Windows. Le logiciel a deux composants: un pilote de minifiltre de système de fichiers qui fonctionne en mode noyau et un composant en mode utilisateur qui communique avec le pilote. Le pilote reçoit des notifications sur les demandes d'interruption d'E/S, telles que IRP_MJ_READ. Un exemple d'application qui fait cela peut être trouvé sur github. Cela fonctionne pour tous les utilisateurs et la plupart des systèmes de fichiers pris en charge par Windows.Comment puis-je recevoir des notifications sur la lecture d'un fichier sous OS X?

Je dois développer un logiciel similaire pour OS X (bureau et serveur uniquement). Ce que je regardé:

Mes réservations sont: FSEvents peuvent ne pas être très performant , comme je dois surveiller le dossier racine / un d tous les appareils montés. J'ai une compréhension très limitée des files d'attente du noyau et des syscalls Le détournement de l'API peut rendre très difficile le portage vers différentes versions d'OS X et peut provoquer des conflits avec la protection AV ou OS (comme le durcissement PaX).

Question: comment puis-je obtenir des notifications qu'un fichier dans un dossier (récursive) dans la racine / est lu par tout utilisateur sur OS X?

+0

une autre question pour vous: avez-vous l'intention que votre application soit mise en bac à sable ou disponible sur l'App Store Mac? –

+0

Je ne sais pas, ce qui est plus facile et tout ce qui me permettra de le faire. Je pense que les AVs sont disponibles dans le magasin et que le sandbox ne me permettra probablement pas de faire les choses que je dois faire. – oleksii

Répondre

4

Avec une extension de noyau, Kernel Authorization fournit le File Operation Scope, vous permettant de surveiller l'action KAUTH_FILEOP_OPEN pour tous les vnodes.

L'action KAUTH_FILEOP_OPEN sera appelée avant l'accès à tous les fichiers, vous permettant ainsi de surveiller l'accès aux fichiers.

Si vous voulez une plus grande granularité des actions, le VNode scope fournit un ensemble plus large d'actions, y compris KAUTH_VNODE_READ_DATA, mais sachez que ce champ peut être très bruyant, ce qui déclenche un très grand nombre d'actions à un moment donné.

Exemple de code pour une telle extension du noyau se trouve dans Singh Mac OS X Internals

1

Il n'y a rien de mal avec les performances de FSEvents; Si vous utilisez Spotlight et/ou Time Machine, il fonctionne déjà sur votre système. Je serais très surpris s'il y avait un moyen plus efficace de le réimplémenter à partir de zéro. Donc, si cela répond à vos exigences de toutes les façons, j'irais avec ça.

+0

FSEvents ne me fournit pas d'ID de processus (ou de nom de processus) et d'identifiant de sécurité d'utilisateur (ou de nom d'utilisateur). Exemple Je suis après: Bob lit un fichier dans/tmp/banana avec l'application bananareader.jar à 7h50. Je pense que les événements FS ne peuvent me fournir avec le fichier/tmp/banana a été lu à 7h50. – oleksii