c++ - 获取进程内存信息

标签 c++ winapi

我一直在尝试在 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;
}

最佳答案

您可能没有权限读取某些(特权系统)进程的内存。如果从 OpenProcess 返回 NULL 句柄,请检查 GetLastError

一般来说,检查和处理 Win32 错误条件是一种很好的做法,即使 API“通常”适合您也是如此。

关于c++ - 获取进程内存信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078342/

相关文章:

c++ - 传递整数文字时没有隐式转换警告?

c++ - 当 for 循环的停止条件是一个单独的指针变量时,这意味着什么?

c++ - Qt QDialog 每次关闭并再次显示时都会稍微移动位置

.net - 进程返回值

c++ - 从 .dll 访问 .exe 中定义的函数的正确方法

c++ - Blackberry 10 SDK beta 2 中的 ListView 滚动问题

c++ - 在 C++ 中获取所有排列的最有效方法

c# - 捕获事件窗口更改事件时出现问题

c++ - 使用 DnsQuery 或 getaddrinfo 的正确函数是什么?

c++ - Virtual PC 内的鼠标操作