Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как восстановить возможность закрытия программы через Диспетчер задач в Windows после ошибки кода на Delphi/Pascal

Delphi , Рабочий стол , TaskBar

При написании программ на Delphi/Pascal разработчики иногда сталкиваются с необходимостью предотвратить принудительное завершение работы приложения пользователем через Диспетчер задач Windows. Для этого существует код, который изменяет списки контроля доступа (DACL) процесса, делая его защищенным от действий, направленных на его завершение.

Однако, в определенный момент работы программы, может возникнуть необходимость восстановить возможность закрытия программы через Диспетчер задач. В контексте, предоставленном пользователем, уже содержится решение данной проблемы.

Ваш исходный код:

function PreventProcessKill: Integer;
var
  hProcess: Thandle;
  EmptyDacl: TACL;
  pEmptyDacl: PACL;
  dwErr: DWORD;
begin
  hProcess := GetCurrentProcess();
  ZeroMemory(@EmptyDacl, SizeOf(TACL));
  pEmptyDacl := @EmptyDacl;
  if not InitializeAcl(EmptyDacl^, SizeOf(TACL), 2) then
    dwErr := GetLastError()
  else
    dwErr := SetSecurityInfo(hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @EmptyDacl, nil);
  Result := dwErr;
end;

Подтвержденный ответ:

Для возврата возможности закрытия программы через Диспетчер задач необходимо восстановить исходные списки контроля доступа (DACL), которые были изменены при вызове SetSecurityInfo. Чтобы это сделать, нужно сначала сохранить текущие DACL процесса, а затем, когда потребуется, применить их обратно.

Альтернативный ответ, предложенный в контексте:

Вы изменяете DACL при вызове SetSecurityInfo. Поэтому, прежде чем делать это, вызовите GetSecurityInfo, сохраните текущий DACL процесса и сделайте заметку о нем. Когда придет время, снова вызовите SetSecurityInfo, чтобы восстановить исходный DACL.

Это позволит вам отменить защиту процесса и снова позволит пользователю закрыть его через Диспетчер задач.

Важные замечания:

Необходимо понимать, что даже после применения данного кода, решительный пользователь все еще может найти способы завершения процесса. Вы просто делаете процесс менее уязвимым для случайных или неумышленных попыток его закрытия.

Пример кода для восстановления возможности закрытия программы:

function RestoreProcessKill: Integer;
var
  hProcess: Thandle;
  OriginalDacl: TACL;
  pOriginalDacl: PACL;
  SecurityDescriptor: PSecurityDescriptor;
  dwErr: DWORD;
begin
  hProcess := GetCurrentProcess();
  if not GetSecurityInfo(hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pOriginalDacl, SecurityDescriptor) then
    dwErr := GetLastError()
  else
    dwErr := SetSecurityInfo(hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pOriginalDacl, nil);
  Result := dwErr;
end;

В этом примере кода функция RestoreProcessKill восстанавливает исходные списки контроля доступа, которые были сохранены ранее с помощью GetSecurityInfo. Это делает программу доступной для закрытия через Диспетчер задач Windows.

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

Создано по материалам из источника по ссылке.

В контексте описан ситуация, когда необходимо восстановить возможность закрытия программы через Диспетчер задач Windows после того, как была изменена защита процесса для предотвращения его принудительного завершения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TaskBar ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:53:30/0.0031569004058838/0