Меню сайта
Категории раздела
Тобольск [0]
ТГСПА [0]
Delphi [40]
Basic [0]
Разное [4]
Радио
ЧАТ
200
Облако тегов
Облако фото
Форум
  • композитная арматура (0)
  • Справедливо ли это???? (1)
  • Недвижимость в Тюмени (1)
  • Качество услуг и обслуживания (2)
  • строительный эксперт (0)
  • гид по Греции (0)
  • винные туры по Италии (0)
  • деревянные лестницы (0)
  • гид по Италии (0)
  • Разные поздравления (1)
  • Главная » 2011 » Март » 20 » Как завершить любой процесс, в том числе и системный
    01:12
    Как завершить любой процесс, в том числе и системный
    // Включение, приминение и отключения привилегии.
    // Для примера возьмем привилегию отладки приложений 'SeDebugPrivilege'
    // необходимую для завершения ЛЮБЫХ процессов в системе (завершение процесов
    // созданных текущим пользователем привилегия не нужна.

    function ProcessTerminate(dwPID:Cardinal):Boolean;
    var
    hToken:THandle;
    SeDebugNameValue:Int64;
    tkp:TOKEN_PRIVILEGES;
    ReturnLength:Cardinal;
    hProcess:THandle;
    begin
    Result:=false;
    // Добавляем привилегию SeDebugPrivilege
    // Для начала получаем токен нашего процесса
    if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
    or TOKEN_QUERY, hToken ) then
    exit;

    // Получаем LUID привилегии
    if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue )
    then begin
    CloseHandle(hToken);
    exit;
    end;

    tkp.PrivilegeCount:= 1;
    tkp.Privileges[0].Luid := SeDebugNameValue;
    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

    // Добавляем привилегию к нашему процессу
    AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
    if GetLastError()< > ERROR_SUCCESS then exit;

    // Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем
    // завершить и системный процесс
    // Получаем дескриптор процесса для его завершения
    hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
    if hProcess =0 then exit;
    // Завершаем процесс
    if not TerminateProcess(hProcess, DWORD(-1))
    then exit;
    CloseHandle( hProcess );

    // Удаляем привилегию
    tkp.Privileges[0].Attributes := 0;
    AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
    if GetLastError() < > ERROR_SUCCESS
    then exit;

    Result:=true;
    end;

    // Название добавление/удаление привилгии немного неправильные. Привилегия или
    // есть в токене процесса или ее нет. Если привилегия есть, то она может быть в
    // двух состояниях - или включеная или отключеная. И в этом примере мы только
    // включаем или выключаем необходимую привилегию, а не добавляем ее.
    Категория: Delphi | Просмотров: 553 | Добавил: SeM | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск по сайту
    Календарь
    «  Март 2011  »
    ПнВтСрЧтПтСбВс
     123456
    78910111213
    14151617181920
    21222324252627
    28293031
    Новый Год
    Опрос
    Добавить на сайт?


    Всего ответов: 6
    Всего голосовало: 6
    Обсудить на форуме
    Друзья сайта
    измерьте скорость интернета Яндекс.Метрика
    Проверить тИЦ и PR
    Статистика
    Погода
    Яндекс.Погода
    Коменнтарии

    Извиняюсь, заработал. Спасибо за урок biggrin

    Компонент не работает

    Давайте помогу разобраться ? вы хотите что бы когда выбиралась станция сразу начинала проигрывать? скиньте исходник или как лучше связаться с вами?

    у меня все работает!

    Нифига не робит...
    Кто знает как сделать чтобы на жесткий жертвы сохранял..
    ISQ 606017777

    FSDGHDFJHRG


    Отзывы Фото
    6 микр. Красивое место....

    Ершов ))))

    Старый музей но щас его перенесли...

    Фотография под горы smile

    Красивое фото!!! smile

    Copyright MyCorp © 2024