2016-06-08 1 views
0

Comme dans le sujet, je voudrais savoir comment "allumer" ETW ou WPP pour Windows pilote particulier. Prenons pour exemple un vdrvroot.sys. Quand nous démontons ce pilote nous voyons au début de la fonction couple DriverEntry appelle:Comment activer ETW/WPP pour un pilote particulier?

McGenEventRegister(); 
WppLoadTracingSupport() 
WppInitKm() 

qui tourne sur la fonctionnalité de suivi. Pour ETW dans McGenEventRegister Je vois l'enregistrement du fournisseur suivant:

result = EtwRegister(
    &VDRVROOT_PROVIDER_ID, 
    McGenControlCallbackV2, 
    &VDRVROOT_PROVIDER_ID_Context, 
    &Microsoft_Windows_VDRVROOTHandle); 

où VDRVROOT_PROVIDER_ID est égal à 900448e4-b685-DD11-ad8b-0800200c9a66. J'ai essayé de connecter les journaux éventuels faire:

tracelog.exe -start MyTrace -guid #900448e4-b685-dd11-ad8b-0800200c9a66 
(...) //some actions here 
tracelog.exe -start MyTrace 

et consulter le fichier journal via TraceView. Rien n'est pris mais dans ce pilote EtwWrite est appelé seulement dans un endroit que je n'ai probablement pas déclenché avec mes actions. La question est de savoir si je peux activer les mécanismes de suivi mentionnés sans inverser le pilote;)?

Répondre

0

Je ne suis pas sûr de ce que vous obtiendrez pour le GUID que vous montrez. Je vois E4480490-85B6-11DD-AD8B-0800200C9A66 comme le GUID pour VDRVROOT_PROVIDER_ID. Je ne suis pas sûr à quoi sert le GUID 900448E4. Notez également que TraceView affichera uniquement les événements WPP (écrits via TraceMessage ou TraceMessageVa), et non les événements ETW basés sur le manifeste. Notez également que les événements WPP requièrent l'accès à un fichier PDB ou TMF, sinon TraceView ne pourra pas les décoder. (Vous pourrez décoder automatiquement les événements basés sur des manifestes tant que le manifeste correct a été enregistré sur votre système.)

Vous pouvez essayer de décoder le fichier ETL en utilisant tracerpt, car il prend en charge plus de types d'encodages d'événements ETW.

En général, ETW ne fournit pas un très bon moyen de dire "comment obtenir des événements d'un pilote particulier". Vous pouvez utiliser tracelog pour lister tous les GUID actifs de tous les fournisseurs actifs du système, et vous pouvez utiliser tracelog pour lister tous les manifestes enregistrés, mais il n'y a pas moyen de dire "quels fournisseurs ont été activés par ce particulier". DLL ". Une DLL peut activer plusieurs GUID de fournisseur (peut-être un pour les événements basés sur les manifestes et un autre pour les événements basés sur WPP), ou peut-être plusieurs DLL partagent tous le même manifeste afin qu'ils utilisent tous le même GUID de fournisseur. Et même si vous avez le GUID correct pour un pilote, si le pilote utilise simplement WPP (ce qui est commun), vous ne pouvez pas décoder les événements sans accéder au fichier TMF ou PDB.

+0

Merci d'avoir répondu. Je vais ajouter seulement que vous pouvez obtenir la liste des fournisseurs disponibles en utilisant fournisseurs de requêtes logman – user3305379