判断“普通进程”是否死亡的简单方法
本帖最后由 Tesla.Angela 于 2010-7-18 21:06 编辑我说的“普通进程”,指的是没有进程保护,能获得PROCESS_ALL_ACCESS权限句柄的进程。
用ZwResumeProcess测试,如果进程已经死亡,会得到一个负数,如果进程没有死亡,会得到零。
BOOLEAN IsProcessDead(DWORD pid)
{
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,pid);
PVOID pZwResumeProcess=GetProcAddress(LoadLibraryA("ntdll.dll"),"ZwResumeProcess");
LONG ntst=0;
__asm
{
push hProcess
call pZwResumeProcess
mov ntst,eax
}
CloseHandle(hProcess);
if (ntst==0)
return FALSE;
else
return TRUE;
}
代码没有测试过,应该是这样子吧。。。 本帖最后由 Tesla.Angela 于 2010-7-18 20:50 编辑
不知道对普通线程能不能如法炮制,感兴趣的人可以去尝试一下。
======
现在学了汇编之后,什么程序都想内嵌点汇编代码,否则心里不舒服。
其实大家在程序里使用ntdll.lib就能像调用普通api一样调用ntdll.dll里的api了。 代码着色工具在这里下载:http://www.m5home.com/bbs/thread-3939-1-1.html 回复 4# 本网站最菜的人
忽然发现有LoadLibrary没有FreeLibrary,也算是泄露吧。 {:soso_e100:} 这就是为什么汇编语言一直没有被淘汰的原因吧
页:
[1]