程序自删除的一种实现方式
2016-03-04 14:41
369 查看
/********************************************************************************** * 程序描述: 本程序为Windows7环境下,程序自删除的一种实现方式 * 运行环境: Win7 * 开发环境: VS2012 * 调用接口函数库类型: Windows API,标准C库函数 * 程序原理: Windows加载程序后,进程无法删除进程映像,利用进程优先级, 父进程结束,子进程删除父进程映像后结束,实现自删除 ***********************************************************************************/ #include <stdio.h> #include <string.h> #include<windows.h> #include<ShlObj.h> #include <tchar.h> VOID DelItself() { SHELLEXECUTEINFO stShellDel; TCHAR szBat[MAX_PATH]; //获取文件路径名 TCHAR szFileName[MAX_PATH],szComspec[MAX_PATH]; if((GetModuleFileName(0,szFileName,MAX_PATH)!=0) && (GetShortPathName(szFileName,szFileName,MAX_PATH)!=0) && (GetEnvironmentVariable(L"COMSPEC",szComspec,MAX_PATH)!=0)) { lstrcpy(szBat,L"/c del "); lstrcat(szBat, szFileName); lstrcat(szBat, L" > nul"); stShellDel.cbSize = sizeof(stShellDel); //命令窗口进程句柄,ShellExecuteEx函数执行时设置。 stShellDel.hwnd = 0; stShellDel.lpVerb = L"Open"; stShellDel.lpFile = szComspec; stShellDel.lpParameters = szBat; stShellDel.lpDirectory = NULL; stShellDel.nShow = SW_HIDE; //设置为SellExecuteEx函数结束后进程退出。 stShellDel.fMask = SEE_MASK_NOCLOSEPROCESS; //创建执行命令窗口进程。 if(ShellExecuteEx(&stShellDel)) { //设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出。 SetPriorityClass(stShellDel.hProcess,IDLE_PRIORITY_CLASS); //设置本程序进程的执行级别为实时执行,这保证本程序能立即获取CPU执行权,快速退出。 SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); //通知Windows资源管理器,本程序文件已经被删除。 SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, szFileName, 0); ExitProcess(0); } } } int _tmain(int argc, _TCHAR* argv[]) { DelItself(); return 0; }
相关文章推荐
- Xcode官方直接下载地址(离线下载)
- leetcode - Create Maximum Number
- Android——文件管理
- IOS学习 Notification 用通知传值
- libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
- Oracle AWR 介绍
- Android Socket
- sqlserver计算表使用大小sql
- PHP 命名空间加载的理解
- 浮动元素居中
- 在jsp页面判断如果有信息就提示,否则不提示
- [LeetCode]79. Word Search
- Software-Building-HOWTO_3
- java中String byte HexString的转换
- nodejs常用npm包
- 学习Linux决心书
- reahat下tora的安装
- Ext.grid.CheckboxSelectionModel()勾选不上
- xcode报错 library not found for -lAFNetworking
- Java动态代理(JDKProxy与CGlibProxy)