问题出在判断指定进程那里:LPCWSTR lpApplicationName:指向一个NULL结尾的、用来指定可执行模块的字符串,我通过改写MessageBoxW( NULL, lpApplicationName, L"拦截成功!W", MB_OK )发现输出的lpApplicationName是带路径的,如: E:\360\360Safe\360Safe.exe,这明显和我指定的360safe.exe不能比较。
于是我想把lpApplicationName截取最后几个有用字符,可是那个LPCWSTR的类型const unsigned short *又让我没法下手。
所以求高手指点:如何进行lpApplicationName和我指定abc.exe的比较?
BOOL Replace_CreateProcessW(
LPCWSTR lpApplicationName, // name of executable module
LPWSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
)
{
BOOL ret;
//在此进行判断,是不是指定的进程。
if(wcscmp(lpApplicationName,L"abc.exe")==0)
{
//直接返回false让CreateProcess失败,这样就打不开abc.exe这个进程
return FALSE;
}
//如果不是目标进程。让它正常创建,也就是调用在程序开始时保存好的原始CreateProcess指针指向的函数。
ret=Real_CreateProcessW (lpApplicationName,lpCommandLine,lpProcessAttributes,lpThreadAttributes,bInheritHandles,
dwCreationFlags,lpEnvironment,lpCurrentDirectory,lpStartupInfo,lpProcessInformation);
//把创建结果返回
return ret;
}
9 个解决方案
#1
从lpApplicationName+wcslen(lpApplicationName)往前找第一个\,然后wcscmp
但是lpApplicationName可以为0,此时从lpCommandLine找
但是lpApplicationName可以为0,此时从lpCommandLine找
#2
这个用image file execution options很好解决
#3
用wcsstr();
#4
能具体说说吗?
#5
if(wcsstr(lpApplicationName,L"360Safe.exe")==NULL)
{
return FALSE;
}
貌似不行啊!
#6
if(wcsstr(lpApplicationName,L"360Safe.exe")!=NULL)
{
return FALSE;
}
倒是有拦截,可是运行拦截的程序时会弹出:未指定的错误...
#7
因为你return 0,说明调用失败,失败原因你又没设置
用SetLastError
用SetLastError
#8
return true;反而解决了!~
#9
if(wcsstr(lpApplicationName,L"360Safe.exe")!=NULL)
{
return FALSE;
}
==NULL是没找到,!=是找到了
{
return FALSE;
}
==NULL是没找到,!=是找到了
#1
从lpApplicationName+wcslen(lpApplicationName)往前找第一个\,然后wcscmp
但是lpApplicationName可以为0,此时从lpCommandLine找
但是lpApplicationName可以为0,此时从lpCommandLine找
#2
这个用image file execution options很好解决
#3
用wcsstr();
#4
能具体说说吗?
#5
if(wcsstr(lpApplicationName,L"360Safe.exe")==NULL)
{
return FALSE;
}
貌似不行啊!
#6
if(wcsstr(lpApplicationName,L"360Safe.exe")!=NULL)
{
return FALSE;
}
倒是有拦截,可是运行拦截的程序时会弹出:未指定的错误...
#7
因为你return 0,说明调用失败,失败原因你又没设置
用SetLastError
用SetLastError
#8
return true;反而解决了!~
#9
if(wcsstr(lpApplicationName,L"360Safe.exe")!=NULL)
{
return FALSE;
}
==NULL是没找到,!=是找到了
{
return FALSE;
}
==NULL是没找到,!=是找到了