gpt4 book ai didi

c++ - 进程名称比较

转载 作者:行者123 更新时间:2023-11-28 00:42:14 25 4
gpt4 key购买 nike

我编写过滤系统并使用Winsock2 LSP。在 WSPConnect 中,我需要将进程的可执行文件名与硬编码的 Unicode 字符串进行比较。我这样做:

LPWSTR moduleName = {0};
GetModuleFileNameEx (GetCurrentProcess(),0,moduleName,_MAX_FNAME );

LPWSTR mn = L"redirect.exe";
if (lstrcmp (moduleName, mn) == 0){ ...some code there...}

我做错了什么?

最佳答案

  1. 你应该比较“不区分大小写”:lstrcmpi

  2. 您需要传递一个正确的字符数组...

  3. 此外,您应该始终检查函数调用的结果值!

  4. 此外,如果您明确使用 wchar_t => GetModuleFileNameExW,则不应使用 TCHAR 版本的 GetModuleFileNameEx!

  5. 您还应该使用方法 GetModuleFileNameW如果你想得到当前进程的名称!这样更靠谱!

  6. 另外,您应该使用 MAX_PATH 而不是 _MAX_FNAME,因为该方法也可能返回完整路径!

  7. 还要确保您的字符串正确以 NUL 结尾!

  8. 另外您必须知道返回的路径可能包含完整路径,因此与进程名称的比较永远不会匹配...

  9. 另外你必须知道路径可能包含短文件名! (不是你的情况,因为名称不超过 8 个字符;但如果你将它与“MyExecutable.exe”进行比较,你还必须与短文件名进行比较;参见 GetShortPathName

代码部分现在应该是这样的:

WCHAR moduleName[MAX_PATH+1];
if (GetModuleFileNameW (NULL, moduleName, MAX_PATH) != 0)
{
moduleName[MAX_PATH] = 0;
LPWSTR mn = L"redirect.exe";
int len = lstrlen(moduleName);
int lenmn = lstrlen(mn);
if (len > lenmn)
{
if (lstrcmpi (&moduleName[len-lenmn], mn) == 0){ ...some code there...}
}
}

关于c++ - 进程名称比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18224170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com