C++ 进程名称的比较
我编写过滤系统并使用C++ 进程名称的比较,c++,winapi,winsock,C++,Winapi,Winsock,我编写过滤系统并使用Winsock2 LSP。 在WSPConnect中,我需要将进程的可执行文件名与已编码的Unicode字符串进行比较。 我有: 我做错了什么 您应该比较“不区分大小写”: 您需要传递一个正确的字符数组 此外,您应该始终检查函数调用的结果值 此外,如果您明确使用wchar\u t=>GetModuleFileNameExW,则不应使用TCHAR版本的GetModuleFileNameEx 如果您想获取当前进程的名称,也应该使用该方法!这更可靠 另外,您应该使用MAX_PATH
Winsock2 LSP
。
在WSPConnect
中,我需要将进程的可执行文件名与已编码的Unicode字符串进行比较。
我有:
我做错了什么
wchar\u t
=>GetModuleFileNameExW
,则不应使用TCHAR版本的GetModuleFileNameEx
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...}
}
}
wchar\u t
=>GetModuleFileNameExW
,则不应使用TCHAR版本的GetModuleFileNameEx
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...}
}
}
您需要声明存储空间,仅仅一个指针是不够的
LPWSTR moduleName = {0};
GetModuleFileNameEx (GetCurrentProcess(),0,moduleName,_MAX_FNAME );
应该是
TCHAR moduleName[_MAX_PATH];
GetModuleFileNameEx(GetCurrentProcess(), 0, moduleName, _countof(moduleName));
并且使用不区分大小写的lstrcmpi()您需要声明存储空间,仅仅一个指针是不够的
LPWSTR moduleName = {0};
GetModuleFileNameEx (GetCurrentProcess(),0,moduleName,_MAX_FNAME );
应该是
TCHAR moduleName[_MAX_PATH];
GetModuleFileNameEx(GetCurrentProcess(), 0, moduleName, _countof(moduleName));
使用不区分大小写的
lstrcmpi()
出了什么问题?得到了什么结果?TCHAR
和WCHAR
冲突?@rajraj,我猜第2行是空指针访问。出了什么问题?得到了什么结果?TCHAR
和WCHAR
冲突?@rajraj,我猜第2行是空指针访问。