分类:
2008-10-13 16:34:13
// Delself.cpp: 删除正在运行的程序
//
// Coder Jozu
#include
#include
#include
#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;
}