C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как грохнуть процесс(в том числе системный)? / Процессы и потоки / Приложение

Как грохнуть процесс(в том числе системный)?

  Листинг 1
#include 
#include 
#pragma hdrstop

// fkill forces a kill -- it will attempt to enable SeDebugPrivilege
// before opening its process handles, allowing it to kill processes
// running under builtin\system (LocalSystem, to the users out there).

int main( int argc, char *argv[] );
void getDebugPriv( void );

#define isBadHandle(h) ( (h) == NULL || (h) == INVALID_HANDLE_VALUE )
#define lenof(x) ( sizeof (x) / sizeof ((x)[0]) )

const int MAXPID = 1024;

int main( int argc, char *argv[] )
{
 int pidCount, i, errors;
 char *p;
 HANDLE hProcess;
 static DWORD pid[MAXPID];

 // parse args, build PID list
 errors = pidCount = 0;

 for ( i = 1; i <argc; i ++ )
 {
  if ( pidCount == lenof( pid ) ) {
   errors ++;
   break;
  }

  pid[pidCount] = strtol( argv[i], &p, 0 );
  if ( p == argv[i] || *p )
   errors ++;
  else
   pidCount ++;
 }

 if ( errors || pidCount == 0 )
 {
  puts( "Usage: fkill pid [...]" );
  puts( "fkill tries to kill the processes specified by the PIDs. If the" );
  puts( "user has debug privileges, fkill is able to kill system processes." );
  puts( "PIDs may be decimal, octal (starts with 0), or hex (starts with 0x)." 
);
  return MAXPID + 1;
 }

 // try to acquire SeDebugPrivilege
 getDebugPriv(); //см. faq выше

 errors = 0;
 // for each PID:
 for ( i = 0; i < pidCount; i ++ )
 {
  printf( "pid %lu: ", pid[i] );

  // open process
  hProcess = OpenProcess( PROCESS_TERMINATE, FALSE, pid[i] );
  if ( isBadHandle( hProcess ) )
   printf( "OpenProcess() failed, err = %lu\n", GetLastError() );
  else
  {
   // kill process
   if ( ! TerminateProcess( hProcess, (DWORD) -1 ) )
    printf( "TerminateProcess() failed, err = %lu\n", GetLastError() );
   else
    puts( "killed." );

   // close handle
   CloseHandle( hProcess );
  }
 }

 return 0;
}