VC禁止在任务管理器中结束本进程
发布时间:2018年1月28日 作者:未知 查看次数:1075
VC禁止在任务管理器中结束本进程(原来是结束任务管理器窗口) 自:https://www.cnblogs.com/findumars/p/5928687.html 一提到进程保护特别是在Windows下,没有最安全,只有更安全。下面的代码是在用户层,截获任务管理器的本进程名(Test.exe)被选中时的消息,以防止用任务管理器结束掉进程(当然你用其他进程工具当然可以结束掉咯!)。主要是要学习这里面的方法、熟悉几个结构体、几个API而矣: 1、LVITEM Specifies or receives the attributes of a list-view item. This structure has been updated to support a new mask value (LVIF_INDENT) that enables item indenting. This structure supersedes the LV_ITEM structure. (我这水平的英文也能凑合着看吧,相信你更没问题!)
2、FindWindow与FindWindowEx
3、上面的结构体与API熟悉后,再看看这个函数吧!
void FuckWindowsManager() { HWND hwnd; int iItem=0; LVITEM lvitem, *plvitem; char ItemBuf[512],*pItem; DWORD PID; HANDLE hProcess; // 查找任务管理器ListView窗口句柄 hwnd=FindWindow("#32770",_T("Windows 任务管理器")); hwnd=FindWindowEx(hwnd,0,"#32770",0); hwnd=FindWindowEx(hwnd,0,"SysListView32",0); // Windows任务管理器尚未启动则返回 if (!hwnd) return; else { // 没有指定目标进程则返回 iItem=SendMessage(hwnd,LVM_GETNEXTITEM,-1,LVNI_SELECTED); if (iItem==-1) return; else { GetWindowThreadProcessId(hwnd, &PID); // 获取进程句柄操作失败则返回 hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID); if (!hProcess) return; else { plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE); pItem=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE); // 无法分配内存则返回 if ((!plvitem)||(!pItem)) return; else { lvitem.cchTextMax=512; //lvitem.iSubItem=1;//PID lvitem.iSubItem=0; //ProcessName lvitem.pszText=pItem; WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL); SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem); ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL); // 比较字符串,将Test.exe改成你的进程映像名即可 if(str.CompareNoCase(_T("Test.exe")) == 0) { HWND hWnd=FindWindow(NULL,_T("Windows 任务管理器")); SendMessage(hWnd,WM_DESTROY,0,0); Sleep(10); MessageBox(NULL,_T("禁止关闭系统关键进程!"),_T("提示"),MB_ICONERROR | MB_OK); } } } } } //释放内存 CloseHandle(hwnd); CloseHandle(hProcess); VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE); VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE); } ============================= 搜索任务管理器窗口,查找选定的项目是不是自身进程名,是则关闭掉任务管理器窗口。
|
|
|