如何获取你的dll被注入的进程的名称

时间:2017-08-03 03:46:53

标签: c++

我有一个用C ++编写的DLL。我想要它注入它检测它注入内部的过程。即它获取进程名称。怎么可以这样做?

2 个答案:

答案 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);

使用std::filesystem

#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或任何进程配合使用。