2009-02-04 8 views
2

Je développe une extension de noyau OS X (kext) qui sera utilisée comme pilote de kit d'E/S. Ce pilote, cependant, sera strictement "virtuel"; il n'interfèrera avec aucun matériel.Accès aux objets de classe de catalogue d'E/S

OS X conserve un catalogue (catalogue d'E/S) de tous les pilotes chargés dans le noyau. Il conserve également un registre (Registre d'E/S) contenant les pilotes de catalogue d'E/S qui ont été associés à un périphérique matériel et qui contrôlent actuellement le matériel.

Étant donné que mon pilote ne dépend pas du matériel et ne correspond pas, il est uniquement chargé dans le catalogue d'E/S et non enregistré dans le registre d'E/S. Cela provoque un problème, car l'API pour obtenir des objets de pilote d'E/S est limitée aux pilotes qui sont enregistrés dans le Registre d'E/S et n'accède pas aux objets dans le catalogue d'E/S. J'ai essayé matching to my driver using the recommended APIs, cependant, comme je l'ai déjà mentionné, ces API n'exposent pas les entrées du catalogue d'E/S.

Mon but ultime est d'obtenir une référence à mon driver afin de transfer in data with the "setProperties" method. Si tout le reste échoue, je can use a combination of syscall, copyin and copyout pour transférer les données dans et hors du pilote, mais je ne suis pas intéressé par cette solution pour le moment. En bref: existe-t-il un moyen d'obtenir une référence à un pilote figurant dans le catalogue d'E/S mais et non dans le registre d'E/S?

Mise à jour: Observer ce que je veux dire, regardez les deux captures d'écran suivantes de IORegistryExplorer:

Le pilote enregistré est facilement accessible through the API , mais le pilote non enregistré ne correspondra pas en utilisant IOServiceGetMatchingServices (...). Comment obtenir une référence à un pilote chargé qui n'est pas enregistré?

Pour plus d'informations, consultez:

Répondre

0

Vous pouvez obtenir votre pilote pour charger sans avoir un morceau de matériel. Vous voulez probablement faire quelque chose comme "IOResourceMatching" contre "IOKit" ou "IOBSD". Cela entraînera un appariement passif sur votre pilote lorsque ces ressources seront disponibles.

+0

J'ai mis à jour la question pour répondre à votre réponse. Le pilote se charge correctement, mais il ne sera pas enregistré dans le registre d'E/S. Le plist contient déjà une entrée pour "IOResourceMatch" pour correspondre avec "IOKit" exactement comme le pilote Dont_Steal_Mac_OS_X. – mpiche

Questions connexes