Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Флейм > TerminateProcess


Автор: [auxx] 27.2.2003, 19:42
Вобщем проблема следующая.
Имеется программа и ей иногда приходится убивать разные нехорошие процессы smile.gif
Это в 9х и НТ/2000/ХР
В 9х все ОК, а вот в НТ проблема сводится, к получению отладочных привилегий, и под админом убивается даже winlogon. Так вот не работает (проверяю в ХР). Вот код, который получает привилегии. С процедурой завершния процесса, имхо, все нормально т.к. под 9х все робит.
Код

HANDLE hToken;
TOKEN_PRIVILEGES* NewState;

OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES,&hToken);
NewState = (TOKEN_PRIVILEGES*) malloc (sizeof(TOKEN_PRIVILEGES) + sizeof LUID_AND_ATTRIBUTES));
NewState->PrivilegeCount = 1;
LookupPrivilegeValue (NULL, SE_DEBUG_NAME,&NewState->Privileges[0].Luid);
NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges (hToken, FALSE, NewState, NULL, NULL, NULL);
free (NewState);
CloseHandle (hToken);

Вроде раньше всегда это работало, а сейчас пишу заново и не хочет. Может напутал чего? Может не SE_DEBUG_NAME, а чтото другое?
Помогите разобраться.

Заранее спасибо.

Автор: Step 27.2.2003, 21:29
посмотри в факю выключение компьютера, там описывается процедура
Цитата
к получению отладочных привилегий

Автор: [auxx] 28.2.2003, 03:25
Дык это тоже из фака. Я уже разобрался.

Проблема была не в этом. У меня прога по сети робит. Клиент посылает команды, сервер выполняет (короче троян). Так проблема в том, что клиент посылает серверу ProcessID рекстовой строкой, а сервер уже преобразовывает в DWORD. В 9х длина HEX строки с идентификатором процесса всегда 8 символов, а в НТ - нет. А функция некорректно с этим работала.

Но всеравно спасибо за поддержку

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