我试图制作一个程序,该程序将遍历正在运行的进程的列表,从某个可执行文件中查找一个程序,然后写入该进程的内存。我一直沿用msdn tutorial,对其进行了更多修改以满足我的需要。我希望能够同时查看32位和64位进程。为了做到这一点,我想使用EnumProcessModulesEx。我可以从psapi.h导入EnumProcessModules,但是EnumProcessModulesEx似乎不存在?有谁知道我可以链接到它吗?
码:
#include <stdio.h>
#include <windef.h>
#include <Windows.h>
#include <psapi.h>
int main() {
DWORD processes[1024], size, amount;
if (!EnumProcesses(processes, sizeof(processes), &size)){
return 1;
}
amount = size / sizeof(DWORD);
for (int i = 0 ; i < amount ; i++){
if (processes[i] != 0){
HANDLE proc = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, processes[i]);
if (proc != NULL){
TCHAR name[MAX_PATH] = TEXT("<unknown>");
HMODULE mod;
DWORD modSize;
if (EnumProcessModules(proc, &mod, sizeof(mod), &modSize)){
GetModuleFileNameEx(proc, mod, name,
sizeof(name)/sizeof(TCHAR));
}
else {
printf("%i\n", GetLastError());
//ERROR_PARTIAL_COPY 64 Bit
}
printf("%s\n", name);
}
}
}
return 0;
}
我正在使用Clion作为我的想法,它使用cmake进行构建。
Cmake脚本:
cmake_minimum_required(VERSION 3.6)
project(Proc)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
find_library (PSAPI Psapi)
set(SOURCE_FILES main.c)
add_executable(Proc ${SOURCE_FILES})
target_link_libraries(Proc PSAPI)
最佳答案
我设法通过卸载mingw并安装了64位版本来解决此问题。我想我一定已经安装了一个非常旧的版本。