2009-10-28 11 views
6

Je voudrais afficher une liste de processus (Windows, C++) et combien ils lisent et écrivent à partir du disque en Ko/sec. Le moniteur de ressources de Windows 7 a la capacité que je devrais être capable de faire la même chose.Obtenir par programme les statistiques du disque io par processus sur Windows?

Cependant, je n'ai pas pu trouver un appel API pertinent ou trouver quelque chose dans les compteurs perfmon. Quelqu'un pourrait-il me pointer dans la direction?

+0

Je pense que le suivi des événements (ETW) est la seule façon de procéder ... Mais les exemples ETW décents sont très rares. – dutchmega

Répondre

11

Vous pouvez appeler le GetProcessIoCounters pour obtenir des données d'E/S disque globales par processus - vous devrez suivre les deltas et les convertir en temps par vous-même.

Cette API indique le nombre total d'opérations d'E/S ainsi que le nombre total d'octets.

+0

Si cela ne vous permet pas d'y parvenir, vous devrez peut-être creuser et écrire une requête WMI. – opello

+4

Est-ce que GetProcessIoCounters() ne vous donne pas toutes les opérations d'E/S, y compris le réseau? – dutchmega

+0

est-ce une fonction de pilote io? –

3

WMI peut le faire, à condition que vous le classez périodiquement pour obtenir des statistiques différentielles pour une tranche de temps "récente". This post présente une solution particulièrement mixte, avec VBScript en lisant les informations de WMI et Perl présentant continuellement les informations dans une console Windows. Malgré le mélange de langues étrange, je pense qu'il est un bon exemple de la façon d'obtenir le type d'informations dont vous avez besoin (il devrait être tout à fait possible de tout recoder en C++, bien sûr).

+3

Encore une fois, le total des opérations E/S (identique à GetProcessIoCounters()) – dutchmega