Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取正在运行的进程的模块数_C++_Windows - Fatal编程技术网

C++ 获取正在运行的进程的模块数

C++ 获取正在运行的进程的模块数,c++,windows,C++,Windows,我试图通过传递进程ID来获取正在运行的进程的模块总数 这是返回进程中模块总数的函数 int size(DWORD processID) { HMODULE hMods[1024]; HANDLE hProcess; DWORD cbNeeded; // Print the process identifier. hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID); // Get

我试图通过传递进程ID来获取正在运行的进程的模块总数
这是返回进程中模块总数的函数

int size(DWORD processID)
{
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
// Print the process identifier.
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID);
// Get a list of all the modules in this process.

EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded);
int j = (cbNeeded / sizeof(HMODULE));

return j;


// Release the handle to the process.

}
这是主要的

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

    // Get the list of process identifiers.
    if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
        return 1;

    // Calculate how many process identifiers were returned.
    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the names of the modules for each process.

    for (int i = 0; i <= cProcesses; i++) {
        int a = size(aProcesses[1]);
        //std::string* g = PrintModules(aProcesses[1], a);
        cout << a << endl;
    }

    system("pause");
    return 0;
}
intmain()
{
DWORD APROCESS[1024];
德沃德;
德沃德·卡普罗塞斯;
无符号整数i;
//获取进程标识符的列表。
if(!EnumProcesses(a进程、sizeof(a进程)和cbNeeded))
返回1;
//计算返回了多少进程标识符。
cprocess=cbNeeded/sizeof(DWORD);
//打印每个进程的模块名称。

对于(int i=0;i使用EnumProcessModule的标准方法,输出参数是数组的大小(以字节为单位):

lpcbNeeded=在lphModule数组中存储所有模块句柄所需的字节数。

将其除以元素类型(HMODULE)的大小,将得到模块的数量

int GetNumberOfModules(DWORD processID)
{
HMODULE-hMods[1024];
处理hProcess;
德沃德;
无符号整数i;
//打印进程标识符。
printf(“\n进程ID:%u\n”,进程ID);
//掌握这个过程。
hproces=OpenProcess(进程\查询\信息|
进程_VM _READ,
FALSE,processID);
if(NULL==hProcess)
返回1;
//获取此过程中所有模块的列表。
if(EnumProcessModule(需要HPProcess、hMods、sizeof(hMods)和CBF))
{
//通过将数组大小除以元素大小返回模块数
返回cbNeeded/sizeof(HMODULE);
}
//释放进程的句柄。
CloseHandle(hProcess);
返回0;
}

您是否检查了
EnumProcessModules
返回的值?您如何知道它没有失败?当我调试它时,函数返回负值,但在输出中有所不同如果我在返回模块名称的函数中运行此函数,则它工作正常,但如果我分离这些行,则它不工作中存在一个off by one错误e> i
int-PrintModules(DWORD-processID){HMODULE-hMods[1024];HANDLE-hProcess;DWORD-cbNeeded;unsigned-int-i;printf(“\n进程ID:%u\n”,processID);hProcess=OpenProcess(进程查询信息|进程虚拟机读取,FALSE,processID);if(NULL==hProcess)返回1;if(EnumProcessModules(hProcess,hMods,sizeof(hMods),&cbNeeded)){长j=(cbNeeded/sizeof(HMODULE));cout