Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу убить процес, юзер из группы админов 
:(
    Опции темы
NULL
  Дата 25.9.2003, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



не могу убить процес, даже обычный...
Код

#include <iostream.h>
#include <windows.h>
#include <TLHELP32.h>

int main(){
HANDLE hSnap;
PROCESSENTRY32 ProcEntry;

hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(!hSnap){
 cout << "can't load tool help" << endl;
 return 0;
}

char buff[20] = "r_server.exe";
//cin >> buff;

BOOL ok;

if(Process32First(hSnap, &ProcEntry)){
 if(buff == ProcEntry.szExeFile) ok = TerminateProcess(hSnap, 0);
 if(ok) cout << buff << " terminated!" << endl;
 while(Process32Next(hSnap, &ProcEntry)){
  if(buff == ProcEntry.szExeFile){
   HANDLE hProc = NULL;
   hProc = OpenProcess(SYNCHRONIZE, TRUE, ProcEntry.th32ModuleID);

   if(hProc){
    ok = FALSE;
    ok = TerminateProcess(hProc, 0);  
    CloseHandle(hProc);
   }    
  }
  if(ok) cout << buff << " terminated!" << endl;
 }
}
CloseHandle(hSnap);
return 0;
}


PM MAIL ICQ   Вверх
mr.DUDA
Дата 25.9.2003, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Во-первых, не
Код
if(buff == ProcEntry.szExeFile)

а
Код
if(strcmp(buff, ProcEntry.szExeFile)==0)


Во-вторых, в "ProcEntry.szExeFile" лежит полный путь к EXE'шке, а не сокращенный типа "r_server.exe". В-третьих, он там ещё и в верхнем регистре.

со строками аккуратней работать надо ! biggrin.gif


--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 25.9.2003, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Вот ещё баг. Открывать процесс нужно так:
Код
hProc = OpenProcess(SYNCHRONIZE, FALSE, ProcEntry.th32ProcessID);

Лучше всего переводить имена файлов в один регистр, а то половина путей - в верхнем, половина - в нижнем.


--------------------
user posted image
PM MAIL WWW   Вверх
NULL
Дата 25.9.2003, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



mr.DUDA, и регистр учел, и полный путь к проку узнал,
пишет что прок терминатед! а прок всеравно как жил так и живет...

что я еще не так сделал....

PM MAIL ICQ   Вверх
NULL
Дата 25.9.2003, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



Цитата

Лучше всего переводить имена файлов в один регистр, а то половина путей - в верхнем, половина - в нижнем.

а TerminateProcess() - понимает регистр?
если да, тада не выйдет я для примера r_admina грохаю, а так я не знаю какие процессы будут грохаться
PM MAIL ICQ   Вверх
man2002ua
Дата 25.9.2003, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Цитата
hProc = OpenProcess(SYNCHRONIZE, FALSE, ProcEntry.th32ProcessID);

?? вы процесс открываете чтобы убить или для ожидания, что кто-то его прибьет... исп. PROCESS_TERMINATE


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
NULL
Дата 25.9.2003, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



man2002ua, использовал и PROCESS_ALL_ACCESS пробовал...
чета ему еще не хватает

PM MAIL ICQ   Вверх
man2002ua
Дата 25.9.2003, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



кстати, .th32ModuleID это не processid.. исп. dwProcessID


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
NULL
Дата 25.9.2003, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



man2002ua, у меня все процессы кроме системных выключились.
может кроме dw32ProcessID еще чегото не хватает?
PM MAIL ICQ   Вверх
man2002ua
Дата 25.9.2003, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



ага, привилегии SeDebugPrivilege

а ты злодей, еще и системные косить хочешь... оставь хоть что-нить smile.gif

Это сообщение отредактировал(а) man2002ua - 25.9.2003, 16:12


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
NULL
Дата 25.9.2003, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



man2002ua, как раз они то и нужны =)
PM MAIL ICQ   Вверх
NULL
Дата 25.9.2003, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



SetDebugPrivilege - ничего по этому поводу мсдн не знает....
и я имел ввиду что все процесы выключаются даже которых я не указывал smile.gif

PM MAIL ICQ   Вверх
man2002ua
Дата 25.9.2003, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



// процедура включения привилегий - советую сохранить на будущее
BOOL SetPrivilege(
HANDLE hToken, // токен процесса
LPCTSTR Privilege, // имя привилегии
BOOL bEnablePrivilege // дальше нечего пояснять - не относится к теме статьи
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
TOKEN_PRIVILEGES tpPrevious;
DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);

// ищем идентификатор привилегии по ее имени
if(!LookupPrivilegeValue( NULL, Privilege, &luid )) return FALSE;

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = 0;

// получаем атрибуты привилегии для нашего процесса
AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
&tpPrevious,
&cbPrevious
);

if (GetLastError() != ERROR_SUCCESS) return FALSE;

tpPrevious.PrivilegeCount = 1;
tpPrevious.Privileges[0].Luid = luid;
// получив атрибуты - включаем или выключаем привилегию
if(bEnablePrivilege) {
tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
}
else {
tpPrevious.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED &
tpPrevious.Privileges[0].Attributes);
}
// изменяем привилегии токена
AdjustTokenPrivileges(
hToken,
FALSE,
&tpPrevious,
cbPrevious,
NULL,
NULL
);

if (GetLastError() != ERROR_SUCCESS) return FALSE;

return TRUE;
}


// call
if(!OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken)){
Error("Error [%ld] retreiving token!", GetLastError());
return;
}
// устанавливаем привилегию "SeDebugName"
if(!SetPrivilege(hToken, SE_DEBUG_NAME, TRUE)){
MessageBox(0,"Error settings SE_DEBUG_NAME privileges","Error",0);
}
CloseHandle(hToken);




--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
mr.DUDA
Дата 25.9.2003, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



NULL, у меня WinCommander убивался такой прогой (естессно, если путь к ней совпадал с "buff"-ом). Просто запусти в отладке и гони до строки со сравниванием
Код
if(buff == ProcEntry.szExeFile){

Когда войдет в скобку - тогда убьет процесс (точно на 100%).


--------------------
user posted image
PM MAIL WWW   Вверх
NULL
Дата 26.9.2003, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



mr.DUDA, я вычислил что путь не обязательно, а вот регистр роль играет....
man2002ua, прав не получил, ни как ты писал, ни как в факю
http://forum.vingrad.ru/index.php?act=ST&f...t=0&#entry81746

чета все из рук валится. ужас какойта.

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.