2014-04-17 4 views
0

Je veux écrire un programme qui va surveiller la mémoire dans un pilote et imprimer le contenu de la mémoire de temps en temps.Comment obtenir un pointeur vers un pilote matériel sous Windows?

Cependant, je ne trouve aucune ressource dans l'API Windows qui semble me permettre d'attraper un pointeur (Handle) à un pilote spécifique.

J'apprécierais n'importe quelle réponse de l'espace d'utilisateur OU de l'espace de noyau.

Si vous voulez savoir exactement ce que je fais, je tente de dupliquer les résultats du papier this sauf sur Windows. Après avoir acquis la capacité de surveiller un tampon dans un programme de base de la console Windows, j'ai l'intention de surveiller à partir du GPU.

[Pour mémoire:. Je suis un étudiant diplômé qui poursuit cela comme un projet d'été ... c'est la recherche des programmes malveillants éthique]

MISE A JOUR = ============ =================

Cela pourrait techniquement mieux convenir comme réponse, mais pas vraiment jusqu'à ce que j'ai une solution de travail. Mon plan d'attaque initial consiste à utiliser WinDbg pour effectuer une analyse dynamique sur le pilote du clavier lorsqu'il est chargé, afin de me faire une idée du comportement normal de chargement/déchargement. J'utilise le chapitre 10 de this book, pour guider la configuration de mon banc d'essai et une fois que je comprendrai mieux la structure du clavier et son tampon, je travaillerai en arrière pour obtenir une référence permanente à cette structure et voir comment la transmettre à la carte graphique et le surveiller avec DMA comme le document original a fait sur Linux.

+0

Je suppose que vous devrez [écrire votre propre pilote Windows] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff544283%28v=vs.85%29. aspx) qui a accès au noyau et peut y surveiller la mémoire, puis envoyer des données à votre application de surveillance. –

+0

De même, il n'y a pas d'appel pour une interface générale "vidage memor if that drivr". Donc, vous devez écrire votre propre pour chaque pilote. Méfiez-vous de tous les problèmes de concurrence. – Deduplicator

Répondre

3

Vous ne résoudrez pas ce problème en "saisissant un pointeur vers un pilote spécifique". Vous devez localiser le tampon spécifique utilisé par le pilote de clavier qui réside sur le dessus du pilote USB.

Vous devrez réellement grok le clavier et les pilotes USB pour Windows. Au moins une partie est probablement disponible si vous avez un DDK (kit de développement de pilote) [aka WDK, Windows Driver Kit]. Vous aurez certainement besoin d'un pilote graphique pour cette partie du projet.

Vous devrez également développer un mécanisme de pilote pour mapper un morceau de mémoire arbitraire (kernel) à votre pilote graphique - ce qui signifie que vous devez accéder au code source du pilote graphique. (En théorie, vous pouvez peut-être pirater dans les tables de pages, mais Windows lui-même n'a pas trop envie de logiciels avec les tables de pages, et vous devez absolument être très prudent si le système est SMP, depuis la modification les tables de pages dans un système SMP nécessitent que vous vidiez les TLB des "autres" CPU (cœurs) du système après les mises à jour). Pour moi, cela semble être un projet plutôt intéressant, mais très difficile dans un système à code source fermé comme Windows. Au moins sous Linux, le développeur a le code source à lire. Quand il s'agit de Windows, la plupart du code source pertinent est complètement indisponible (à moins que votre école ait une licence spéciale pour le code MS Source - je pense que c'est le cas).

+0

Vous m'avez donné quelques informations utiles ici, je vais utiliser WinDbg pour analyser le pilote en tant que chargé et tenter de découvrir où stocker ses données de clavier à l'exécution ...cela devrait au moins m'amener là où je peux obtenir une référence permanente à la structure en question. – avgvstvs

Questions connexes