我有一个用C ++编写的DLL。我想要它注入它检测它注入内部的过程。即它获取进程名称。怎么可以这样做?
答案 0 :(得分:4)
您可以使用GetModuleFileName()
。
将hModule
参数设置为NULL来调用它将为您提供用于创建过程的文件的名称。
由于您的DLL在加载DLL的进程的上下文中运行,因此它应该为您提供适当的文件名。
答案 1 :(得分:0)
要从GetModuleFileName()返回的路径中获取文件名,有两种方法:
使用char数组和_splitpath()
HMODULE hExe = GetModuleHandle(NULL);
char fullPath[MAX_PATH]{ 0 };
char fname[MAX_PATH] = { 0 };
char ext[MAX_PATH] = { 0 };
char procName[MAX_PATH] = { 0 };
GetModuleFileName(hExe, fullPath, MAX_PATH);
_splitpath(fullPath, 0, 0, fname, ext);
strcpy(procName, fname);
strcat(procName, ext);
#include <filesystem>
namespace fs = std::experimental::filesystem;
HMODULE hExe = GetModuleHandle(NULL);
WCHAR fullPath[MAX_PATH]{ 0 };
GetModuleFileName(hExe, fullPath, MAX_PATH);
fs::path path(fullPath);
fs::path filename = path.filename();
两者都可以很好地与注入的DLL或任何进程配合使用。