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.

      (我这水平的英文也能凑合着看吧,相信你更没问题!)


typedef struct _LVITEM {    
    UINT mask;    
    int iItem;    
    int iSubItem;    
    UINT state;    
    UINT stateMask;    
    LPTSTR pszText;    
    int cchTextMax;    
    int iImage;    
    LPARAM lParam;   
#if (_WIN32_IE >= 0x0300)   
    int iIndent;   
#endif   
#if (_WIN32_IE >= 0x560)   
    int iGroupId;   
    UINT cColumns; // tile view columns   
    PUINT puColumns;   
#endif   
} LVITEM, *LPLVITEM;

2、FindWindow与FindWindowEx


// 查找任务管理器ListView窗口句柄   
HWND    hwnd;   
hwnd=FindWindow("#32770",_T("Windows 任务管理器"));   
hwnd=FindWindowEx(hwnd,0,"#32770",0);   
hwnd=FindWindowEx(hwnd,0,"SysListView32",0);   

// Windows任务管理器尚未启动则返回   
if (!hwnd)     
    return; 

3、上面的结构体与API熟悉后,再看看这个函数吧!


/************************************************************************/     
/* 函数说明:禁止在任务管理器中结束本进程                                         
/* 参    数:无                                     
/* 返 回 值:void      
/* By:Koma   2009.07.27 23:50                                  
/************************************************************************/ 

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);

}


=============================

搜索任务管理器窗口,查找选定的项目是不是自身进程名,是则关闭掉任务管理器窗口。




版权所有!www.sieye.cn
E.Mail:sieye@sohu.com QQ:66697110