自删除程序源代码
来源: 网络 // http://blog.vckbase.com/jozu/archive/2006/02/10/1097.html#17627 // // Delself.cpp: 删除正在运行的程序 // // Coder Jozu
#include <windows.h> #include <tchar.h> #include <shlobj.h>
#pragma comment(lib, "Shell32.lib")
#define ERROR_RET 1 #define ERROR_SUC 0
#define COMSPEC TEXT("COMSPEC") #define ARGS_PREX TEXT(" /c del ") #define ARGS_ERR_REDIR TEXT(" >NUL")
int main(int argc, char** argv) { TCHAR szModuleName[MAX_PATH] = { 0 }; TCHAR szCommand[MAX_PATH] = { 0 }; TCHAR szParams[MAX_PATH] = { 0 }; STARTUPINFO si = { sizeof(STARTUPINFO) }; PROCESS_INFORMATION pi; if(!GetModuleFileName(NULL, szModuleName, MAX_PATH)) return ERROR_RET; if(!GetShortPathName(szModuleName, szModuleName, MAX_PATH)) return ERROR_RET; if(!GetEnvironmentVariable(COMSPEC, szCommand, MAX_PATH)) return ERROR_RET; _tcscat(szCommand, ARGS_PREX); _tcscat(szCommand, szModuleName); _tcscat(szCommand, ARGS_ERR_REDIR); if(SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)) { if(SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)) { // if(CreateProcess(NULL, szCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { SetPriorityClass(pi.hProcess, IDLE_PRIORITY_CLASS); SetProcessPriorityBoost(pi.hProcess, TRUE); SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, szModuleName, NULL); return TRUE; } } else { SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); } } return ERROR_RET; }
刺客-长白 发表于 2006-03-13 15:11 | 编辑 | 引用(0)
|