Модераторы: 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   Вверх
man2002ua
Дата 26.9.2003, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ты под гостем?


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


Шустрый
*


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

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



man2002ua, права не резаны админ. таскман убивает сис процессы =(((

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


Опытный
**


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

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



Приведи еще раз код


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


Шустрый
*


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

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



вот так выглядит мой код сейчас
когда пытаюсь получить право на дебаг он перестает убивать кале лиьо процессы вобще
Код

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

//BOOL SetPrivilege(HANDLE hToken, LPCTSTR Privilege, BOOL bEnablePrivilege);
BOOL SetPriv(HANDLE hProc);

int main(){
HANDLE hSnap;
PROCESSENTRY32 ProcEntry;

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

BOOL ok;
char buff[20] = "hh.exe";//killing msdn

if(Process32First(hSnap, &ProcEntry)){
 if(strcmp(buff, ProcEntry.szExeFile) == 0) ok = TerminateProcess(hSnap, 0);
 if(ok) cout << buff << " terminated!" << endl;
 HANDLE hProc = NULL;
 while(Process32Next(hSnap, &ProcEntry)){
  if(strcmp(buff, ProcEntry.szExeFile) == 0){
   
   hProc = OpenProcess(PROCESS_TERMINATE, TRUE, ProcEntry.th32ProcessID);
   ///SetPrivilege(hProc, "SeRemoteShutdownPrivilege", TRUE);
   if(!SetPriv(hProc)){
    cout << "SetPrivelege failed!" << endl;
    return 0;
   }
   if(hProc){
    ok = FALSE;    
    ok = TerminateProcess(hProc, 0);
    CloseHandle(hProc);
   }    
  }
  if(ok) cout << buff << " terminated!" << endl;
 }
 
}
CloseHandle(hSnap);
return 0;
}

/*BOOL SetPrivilege(HANDLE hToken,
     LPCTSTR Privilege,
     BOOL bEnablePrivilege){
TOKEN_PRIVILEGES tp;
LUID luid;
TOKEN_PRIVILEGES tpPrevious;
DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);

if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &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;
}*/

BOOL SetPriv(HANDLE hProc){
LUID luid;
TOKEN_PRIVILEGES tp;
HANDLE hToken;

if(!OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)) return FALSE;
if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)){
 CloseHandle(hToken);
 return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
return AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
}

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


Опытный
**


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

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



Ты привилегии назначаешь процессу, к-й грохаешь smile.gif)) ну насмешил, молодец smile.gif) Своему, вообще-то, надо назначить их, чтобы иметь права грохать их.
if(!SetPriv(GetCurrentProcess())){ ...

А что обозначает конструкция
if(strcmp(buff, ProcEntry.szExeFile) == 0) ok = TerminateProcess(hSnap, 0); // hSnap это же дескриптор образа и все...



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


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


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


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

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



И ещё раз обращаю внимание, что "hh.exe" не пройдет - нужен полный путь к грохаемой EXE'шке, либо сравнение по маске или strncmp.


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


Шустрый
*


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

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



mr.DUDA, ну я ж впринципе strncmp и юзаю.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 29.9.2003, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата
mr.DUDA, ну я ж впринципе strncmp и юзаю

Вот твой код
Код
if(strcmp(buff, ProcEntry.szExeFile) == 0)

сравнивает строки полностью. Если в "ProcEntry.szExeFile" будет что-то вроде "c:\Program Files\Common Files\Microsoft Shared\Help\hh.exe", а ты сравнишь с "hh.exe", который в "buff" лежит - что мы получим ? Что строки не равны.

ЗЫ, а ещё такую офигительную прогу написал... не мог уже со строками разобраться smile.gif


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


Шустрый
*


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

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



[QUOTE]ЗЫ, а ещё такую офигительную прогу написал... не мог уже со строками разобраться [CODE]
лесно, лесно smile.gif
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0719 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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