プロセスのI/O操作情報を取得するにはGetProcessIoCounters()関数を利用します。(戻る)
- プロセスのハンドルを開く(OpenProcess)
- プロセスのメモリ情報を取得(GetProcessIoCounters)
- プロセスのハンドルを閉じる(CloseHandle)
プロセスを開くときにPROCESS_QUERY_INFORMATIONアクセス権を割り当てる必要があります。
取得可能なI/O操作情報
- I/O読み取り
- I/O書き込み
- I/Oその他
- I/O読み取りバイト数
- I/O書き込みバイト数
- I/Oその他バイト数
タスクマネージャでの表現です。
プロトタイプ宣言
HANDLE OpenProcess( DWORD dwDesiredAccess, // アクセス・フラグ BOOL bInheritHandle, // ハンドルの継承オプション DWORD dwProcessId // プロセス識別子 ); BOOL CloseHandle( HANDLE hObject // オブジェクトのハンドル ); BOOL GetProcessIoCounters( HANDLE hProcess, // プロセスのハンドル PIO_COUNTERS lpIoCounters // 構造体のポインタ );
構造体
typedef struct _IO_COUNTERS { ULONGLONG ReadOperationCount; // I/O読み取り ULONGLONG WriteOperationCount; // I/O書き込み ULONGLONG OtherOperationCount; // I/Oその他 ULONGLONG ReadTransferCount; // I/O読み取りバイト数 ULONGLONG WriteTransferCount; // I/O書き込みバイト数 ULONGLONG OtherTransferCount; // I/Oその他バイト数 } IO_COUNTERS, *PIO_COUNTERS;
サンプル
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <Psapi.h> // Psapi.Lib // メイン関数 int main( int argc, char *argv[] ) { DWORD dwProcessID = GetCurrentProcessId(); HANDLE hProcess; IO_COUNTERS ioc; if ( argc > 1 ){ dwProcessID = atoi( argv[1] ); } if ( (hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID)) != NULL ){ if ( GetProcessIoCounters(hProcess,&ioc) ){ printf( TEXT("プロセスID :%lu\n"), dwProcessID ); printf( TEXT("プロセス・ハンドル :0x%p\n"), hProcess ); printf( TEXT("I/O 読み取り :%I64u\n"), ioc.ReadOperationCount ); printf( TEXT("I/O 書き込み :%I64u\n"), ioc.WriteOperationCount ); printf( TEXT("I/O その他 :%I64u\n"), ioc.OtherOperationCount ); printf( TEXT("I/O 読み取りバイト数:%I64uバイト\n"), ioc.ReadTransferCount ); printf( TEXT("I/O 書き込みバイト数:%I64uバイト\n"), ioc.WriteTransferCount ); printf( TEXT("I/O その他バイト数 :%I64uバイト\n"), ioc.OtherTransferCount ); } else{ printf( TEXT("%lu:GetProcessIoCounters()関数のエラーです。\n"), GetLastError() ); } CloseHandle( hProcess ); return 0; } printf( TEXT("%lu:OpenProcess()関数のエラーです。\n"), GetLastError() ); return 1; }
- ヘッダファイルとしてPsapi.hをインクルードします。
- インポートライブラリとしてPsapi.Libをリンクします。
関連記事
- プロセスの時間情報を取得
- プロセスのハンドル数を取得
- プロセスのメモリ情報を取得
- プロセスのメモリ・ページ情報を取得
- プロセスのI/O操作情報を取得
- プロセスのGDI/USERオブジェクトを取得
- プロセスの最大/最小ワーキングセットを取得
- プロセスのワーキングセットを最小化
- プロセスのセッションIDを取得
- プロセスの優先順位クラスを取得
※コメント投稿者のブログIDはブログ作成者のみに通知されます