1

Windows でプロセス メモリ情報を取得しようとしており、Microsoft ドキュメントに従っていますが、このコードを取得しましたが、機能していないようです。印刷に成功したはずですが、何も印刷されません。私のデバッグは、hProcess = nullが原因であると教えてくれますが、その理由はわかりません。これが私の現在のコードです

#include <windows.h>
#include <stdio.h>
#include <psapi.h>
#include<iostream>

using namespace std;

int main()
{
    DWORD aProcesses[1024], cbNeeded, cProcesses;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    {
        return 1;
    }

    cProcesses = cbNeeded / sizeof(DWORD);

    for (int i = 0; i < cProcesses; i++ )
    {
    int processID = aProcesses[i];
    HANDLE hProcess;
    PROCESS_MEMORY_COUNTERS pmc;
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );

    if (NULL == hProcess)
        return 2;

    if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
    {
        cout<<"SUCCEEDED";
    }

    CloseHandle( hProcess );
    }

    return 0;
}
4

1 に答える 1

1

特定の (特権システム) プロセスのメモリを読み取る権限がない可能性があります。GetLastErrorから NULL ハンドルが返されるかどうかを確認しますOpenProcess

一般に、API が「通常」機能する場合でも、Win32 エラー状態をチェックして処理することをお勧めします。

于 2013-02-26T15:29:37.337 に答える