Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2008, 14:38   #11
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
Вот ещё нашол, есть недостаток, работая в цикле вызывает моргание списка в диспетчере:
Эдак проще тогда taskmgr пропатчить, а если чем-нибудь другим посмотреть? FARом хотя бы...
Цитата:
Сообщение от Alter Посмотреть сообщение
Кто ещё что скажет, есть предложения?
1) Спрятать процесс, работая в Ring3...
а) От достаточно неглупого пользователя и достаточно неглупого кода в Ring3 - НЕЛЬЗЯ
б) От кода в Ring0 - НЕЛЬЗЯ

2) Защитить процесс от уничтожения, работая в Ring3...
а) От кода в Ring3 - только на основе прав и привилегий
б) От кода в Ring0 - НЕЛЬЗЯ

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Можно обойтись и без хука. Есть ключ в реестре, который делает то-же самое - грузит dll ко всем процессам.
....которые используют user32.dll
B_N вне форума Ответить с цитированием
Старый 11.08.2009, 13:14   #12
unmazable
 
Регистрация: 13.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
Вот ещё нашол, есть недостаток, работая в цикле вызывает моргание списка в диспетчере:

Код:
Procedure FindIDel(NameExe :String);
var hTaskManager, hListView: HWND;
  vItemCount: Integer; // кол-во пунктов в списке 
  i: Integer;
  vBuffer: array[0..255] of Char; // буфер для приема данных
  vProcessId: DWORD; // идентификатор потока, который создал наш ListView
  vProcess: THandle; // дескриптор для работы с процессом
  vPointer: Pointer; // указатель на область выделенной памяти в чужом процессе
  vNumberOfBytesRead: Cardinal;
  vItem: TLVItem;
  St: String;
begin
 IF NameExe='' Then Exit;
  hTaskManager := FindWindow('#32770', 'Диспетчер задач Windows'); // сам диспетчер задач
 if hTaskManager = 0 then exit; // выход, если диспетчер не найден
  hListView := FindWindowEx(hTaskManager, 0, '#32770', ''); // первый список (приложения)
  hListView := FindWindowEx(hListView, 0, 'SysListView32', nil); // наш список (процессы)
  vItemCount := SendMessage(hListView, LVM_GETITEMCOUNT, 0, 0); // получаем кол-во пунктов в ListView
                          { Получаем идентификатор потока, который создал ListView }
  GetWindowThreadProcessId(hListView, @vProcessId);
{ открываем процесс связанный с vProcessId с правами записи/чтения памяти } 
  vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE,
                        False, vProcessId);
{ выделяем память в адресном пространстве этого процесса }
  vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT,
                           PAGE_READWRITE);
  try
for I := 0 to vItemCount - 1 do
begin // перебираем все записи
 with vItem do
 begin
  mask := LVIF_TEXT; // запрашиваем текст
  iItem := I;
  iSubItem := 0; // мы получаем данные первого столбца (!!!)
  cchTextMax := SizeOf(vBuffer);
  pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem)); // куда будет помешен результат
 end;
  WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItem),
                     vNumberOfBytesRead);
  SendMessage(hListView, LVM_GETITEM, I, lparam(vPointer));
{ считываем результат } 
  ReadProcessMemory(vProcess, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)),
                    @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);

  St := vBuffer;
{ здесь определяем, что удалять (имя нашего .exe файла) }
 if St = NameExe{ExtractFileName(Application.ExeName)} then
 SendMessage(hListView, LVM_DELETEITEM, i, 0);
end; { - for - }
  finally
   VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); // освобождаем память
   CloseHandle(vProcess) // закрываем дескриптор доступа к процессу
  end { - try - }
end;
___________________________________ ___________________
Кто ещё что скажет, есть предложения?
эмм..а как бы объявить vItem ??а то
[Error] Unit1.pas(32): Undeclared identifier: 'TLVItem'
unmazable вне форума Ответить с цитированием
Старый 11.08.2009, 22:57   #13
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
По умолчанию

Uses CommCtrl;
Alter вне форума Ответить с цитированием
Старый 12.08.2009, 00:41   #14
abyss_by
Пользователь
 
Аватар для abyss_by
 
Регистрация: 24.03.2009
Сообщений: 12
По умолчанию

Действительно, хотел чего-то добавить... но советики слава Богу
Могу дать код, ммм... короче не важно под какими правами Юзер, если завершить сервис (естественно попытка) - синий экран, как у crss.
Да, и сокрытие себя.. тут ничего общего.
abyss_by вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диспетчер задач NecRoMat Свободное общение 2 03.08.2008 16:55
диспетчер задач Istergul Общие вопросы Delphi 3 10.02.2008 00:23
Создание защищенного сервиса miae Общие вопросы Delphi 5 21.01.2008 18:54
Как запустить программу из сервиса Маркъ Общие вопросы Delphi 5 13.02.2007 00:29
как узнать путь запущенного сервиса Alar Общие вопросы Delphi 0 30.10.2006 11:18