2017-07-23 7 views
3

J'ai un WA pour vérifier ce qu'est le fsid local dans le contexte kext, simplement en lisant l'état du fichier local prédéfini.Vérification du fsid du système de fichiers local fsid de l'extension du noyau osx (kext)

static inline uint64_t get_fsid(const vfs_context_t ctx, const vnode_t vp) { 
    struct vnode_attr vap; 
    VATTR_INIT(&vap); 
    VATTR_WANTED(&vap, va_fsid); 
    vnode_getattr(vp, &vap, ctx); 
    return (uint64_t)vap.va_fsid; 
} 

une autre option consiste à calculer la fsid de l'espace utilisateur et de transmettre cette information au conducteur (en utilisant getmntinfo)

Cependant, je préfère obtenir ces données à partir directement à partir de l'espace du noyau sans compter sur une les fichiers existaient actuellement. Existe-t-il un indicateur de performance clé pour prendre en charge cette demande?

+0

Qu'entendez-vous par "WA"? – pmdj

+0

@pmdj, je n'étais pas sûr qu'il y ait un KPI correct pour observer les informations de montage ... merci pour votre réponse précise! – Zohar81

Répondre

1

Vous pouvez itérer sur tous les points de montage dans le système en utilisant la fonction

int vfs_iterate(int, int (*)(struct mount *, void *), void *); 

Pour chaque objet mount, vous pouvez vérifier son fsid en utilisant

struct vfsstatfs * vfs_statfs(mount_t); 

vfsstatfs a un champ f_fsid.

Les deux fonctions et la structure sont déclarées et documentées dans <sys/mount.h>. Les fonctions sont exportées dans le KPI BSD.