Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Не работает terminateprocess


Автор: KuKHyT 17.1.2012, 13:10
Собственно не работает на "ХРюше" terminateprocess .
На другом компьютере - все отлично работает (на нем windows 7).
А на ХР - никак.

Код такой:

Код

    #include "stdafx.h"
    #include "conio.h"
        #include <windows.h>
    #include <iostream>
    #include <Tlhelp32.h>
    #include <fstream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    int date[6];

int KillProcByPid(DWORD pid) //функция "убивает" процесс по его PID
{
DWORD ExitCode;
HANDLE hp;
bool ret = true;

if(pid)
        {
        hp = OpenProcess(PROCESS_ALL_ACCESS, true, pid);
        if (hp)
                {
                GetExitCodeProcess(hp, &ExitCode);
                ret = TerminateProcess(hp, ExitCode);
                }
        else
                {
                return false;
                }
        }
else {return false;}
CloseHandle(hp);
return ret;
}

DWORD PIDByName(WCHAR * AProcessName) // функция возвращает PID процесса по его имени
{
  HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 ProcessEntry;
  DWORD pid;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(pHandle, &ProcessEntry);
  while (Loop)
    {
      if (wcsstr(ProcessEntry.szExeFile, AProcessName))
      {
                  pid = ProcessEntry.th32ProcessID;
                  CloseHandle(pHandle);
                  return pid;
      }
      Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
int l=0;
DWORD pid;
pid = PIDByName(L"mspaint.exe");
l=KillProcByPid(pid);
};}


Помогите, пожалуйста!
Заранее спасибо! ;)

Автор: GremlinProg 17.1.2012, 13:21
SeDebugPrivilege включено?
http://www.delphisources.ru/pages/faq/base/terminate_process.html

Автор: KuKHyT 17.1.2012, 13:49
Эм... В делфи не шарю. Как в С++ перевести этот код?

Автор: GremlinProg 17.1.2012, 13:59
Цитата(KuKHyT @  17.1.2012,  15:49 Найти цитируемый пост)
Эм... В делфи не шарю

от делфи там только паскаль )

ну смотри тогда, как включить привилегию: http://support.microsoft.com/kb/131065/en-us
конкретно: SetPrivilege

Автор: KuKHyT 17.1.2012, 14:31
WM_CLOSE через sendmassage тоже не работает :(
Тоже дело в привилегиях?

Добавлено через 7 минут и 49 секунд
Попытался разобрать в коде и адаптировать его под свою программу. Нифига не вышло. Пожалуйста, скиньте мне сюда тупо код, который установит привилегии для команды terminateprocess?

Автор: GremlinProg 18.1.2012, 07:44
Цитата(KuKHyT @  17.1.2012,  16:31 Найти цитируемый пост)
WM_CLOSE через sendmassage тоже не работает :(

в API нет такой функции
Цитата(KuKHyT @  17.1.2012,  16:31 Найти цитируемый пост)
Тоже дело в привилегиях?

никогда о таком не слышал

что значит не работает?

Добавлено через 11 минут и 44 секунды
Цитата(KuKHyT @  17.1.2012,  16:31 Найти цитируемый пост)
скиньте мне сюда тупо код, который установит привилегии для команды terminateprocess?

скопируй из примера функцию SetPrivilege
и вызови ее:
Код

...
::OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken );
SetPrivilege( hToken, SE_DEBUG_NAME, TRUE );
hProcess = ::OpenProcess( ... );
SetPrivilege( hToken, SE_DEBUG_NAME, FALSE );
::TerminateProcess(hProcess, ... );
::CloseHandle( hToken );
::CloseHandle( hProcess );
...

в примере же все есть, см. функцию main
Цитата(KuKHyT @  17.1.2012,  15:49 Найти цитируемый пост)
В делфи не шарю

c C/C++ тоже проблемы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)