windows api
#include <iostream>#include <windows.h>
#include <psapi.h>
int main()
{
HMODULE lpmodule = {0};
DWORD nume = 0;
LPSTR lpBaseName=NULL;
int i = 0;
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS,TRUE,5456);
if (handle == NULL)
{
printf("失败");
getchar();
}
int ss = EnumProcessModules(handle, lpmodule, sizeof(lpmodule), &nume); // 遍历所有模块
while (lpmodule)
{
int s = GetModuleBaseName(handle,lpmodule,lpBaseName,sizeof(lpBaseName));//得到指定模块的名称
s = GetLastError(); //错误码 87参数错误
printf("%s\n", lpBaseName);
i++;
}
}
这个程序是遍历指定进程的模块并且打印出模块名称
程序编译没有问题就是运行结果错误 调试后发现是GetModuleBaseName这个函数失败 错误码为87 参数错误 请大神们指出错误 lpBaseName参数错误 你提供的lpBaseName是一个指针,要么你申请一块空间并指向这个块空间,要么你写成char BaseName。如果你申请空间的话,第四个参数就不能用sizeof(lpBaseName),要写你实际申请的空间大小 HMODULE lpmodule = { 0 };
DWORD nume = 0;
wchar_t basename = { 0 };
int i = 0;
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, GetCurrentProcessId());
if (handle == NULL)
{
printf("失败");
getchar();
}
int ss = EnumProcessModules(handle, lpmodule, sizeof(lpmodule), &nume); // 遍历所有模块
while (lpmodule)
{
int s = GetModuleBaseName(handle, lpmodule, basename, 1024);//得到指定模块的名称
s = GetLastError(); //错误码 87参数错误
wprintf(L"%s\n", basename);
i++;
}
因为我设置的是unicode环境 所以默认是调用宽字节,所以basename用的是wchar_t,如果你想用窄字节,就用char basename,然后在 GetModuleBaseName这里改成 GetModuleBaseNameA即可
页:
[1]