TerminateProcess

Тема в разделе "WASM.BEGINNERS", создана пользователем svas, 20 ноя 2006.

  1. svas

    svas New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    39
    Какой хендл нужно использовать в функции TerminateProcess и как его получить?
     
  2. cembo

    cembo New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    17
    Вот от сюда и берётся: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_information_str.asp

    то есть hProcess в структуре PROCESS_INFORMATION
     
  3. svas

    svas New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    39
    В смысле как мне убить чужой процесс? Например explorer?
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    CreateToolhelp32Snapshot
    Process32First
    OpenProcess
    TerminateProcess
    CloseHandle
    Process32Next
    CloseHandle
     
  5. svas

    svas New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    39
    Почему-то не работает.
    Код (Text):
    1. char *szExName = "explorer.exe"
    2. HANDLE hSnap;
    3. hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    4. PROCESSENTRY32 proc;
    5. if (Process32First(hSnap, &proc))
    6. {
    7.  while (Process32Next(hSnap, &proc))
    8. {
    9.          if (strcmp(csExName,proc.szExeFile))
    10.          {
    11.         HANDLE ProcessHandle=NULL;
    12.         ProcessHandle = OpenProcess(SYNCHRONIZE,TRUE, proc.th32ProcessID);
    13.         if (ProcessHandle!=NULL)
    14.         {
    15.             TerminateProcess(ProcessHandle,0);
    16.             CloseHandle(ProcessHandle);
    17.         }
    18.     }
    19. }
    20. }
    21. CloseHandle(hSnap);
     
  6. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    НО!
    Если стоит файер, просо так убить процесс он тебе не даст! :))

    Второе.
    Если нет соответствующих привелегий, некоторые процессы (системные) ты даже не откроешь(хотя откроешь, но только на чтение).

    Третье.
    У меня валяется функция "int:GetPIDbyImageName(lpImageName);"
    Если нужна, могу скинуть.
     
  7. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Код (Text):
    1. if (strcmp(csExName,proc.szExeFile))
    2.          {
    3.         HANDLE ProcessHandle=NULL;
    4.         ProcessHandle = OpenProcess(SYNCHRONIZE,TRUE, proc.th32ProcessID);
    5.         if (ProcessHandle!=NULL)
    Код (Text):
    1. if (strcmp(csExName,proc.szExeFile) == 0)
    2.          {
    3.         HANDLE ProcessHandle=NULL;
    4.         ProcessHandle = OpenProcess(PROCESS_TERMINATE,TRUE, proc.th32ProcessID);
    5.         if (ProcessHandle!=NULL)
     
  8. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Вообще, поюзай NtQuerySystemInformation (Набей в поисковике, результат гарантирован). Ты получишь огромный массив инфы, начиная от нужных Handle и кончая различными данными, которые можешь увидеть в стандартном TaskManager. А без админских пивилегий, никто никогда завершить системный или админский процесс не даст.
    Кстати, в .NET есть специальный класс TProcess (обертка для всё той же NtQuerySystemInformation) для получения инфы о процесах, в который также включены такие фишки как зарубить, закрыть, получить инфу о модулях и т.д.