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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2013, 03:35   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Не могу нормально отсоединиться от процесса.

Хук на WNDPROC
Когда закрваю свою приложение, выполняю UnhookWindowsHookEx(HookHandle)
Проц, в котором была длл виснет и перезапускается (речь про експлорер)
В чём может быть причина?

Спасибо
TwiX вне форума Ответить с цитированием
Старый 12.06.2013, 03:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

проверяли как отхукалось?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.06.2013, 07:47   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Хук ставится нормально, даже работает нормально) А вот при снятии ескполрер перезагружается
TwiX вне форума Ответить с цитированием
Старый 12.06.2013, 09:48   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Hook процедура делает чтото не так - покажите код...
waleri вне форума Ответить с цитированием
Старый 12.06.2013, 09:52   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Код:
function KeyHook(CODE, WParam, LParam: DWORD): DWORD; stdcall;
//var
//  h: HWND;
//  m: ^CWPSTRUCT;
begin
  if CODE=HC_ACTION then
  begin
    //m := Pointer(lParam);

  end;

  Result:=CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure SetHook(pid: Cardinal); stdcall; export;
begin
  if HookHandle=0 then
   HookHandle:=SetWindowsHookEx(WH_CALLWNDPROC, @KeyHook, hInstance, pid);
  if HookHandle=0 then
  begin
    ShowMessage('Couldnt set up hook. Error: '+IntToStr(GetLastError));
  end;
end;

procedure DelHook; stdcall; export;
begin

  if HookHandle <> 0 then
  begin
    UnhookWindowsHookEx(HookHandle);
    HookHandle:=0;
  end;
end;


begin
  DllProc := @DllMain;
  DllProc(DLL_PROCESS_ATTACH) ;


end.
DllMain ничего не делает. Win8, 64bit
TwiX вне форума Ответить с цитированием
Старый 18.06.2013, 17:07   #6
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Ап .
TwiX вне форума Ответить с цитированием
Старый 18.06.2013, 18:37   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Хук после расхукивания может всё ещё выполняться Я бы начал с запуска под отладчиком (или Find Error) и sleep после UnhookWindowsHookEx.
пыщь
JTG вне форума Ответить с цитированием
Старый 18.06.2013, 19:38   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Процесс может выполняться, в нескольких режимах:
1) Параллельный
2) Приоритетный
3) Привелигированный .
Параллельный - для него выделяется квант времени процессора, вне не зависимости от того, чем процесс занят.
Приоритетный - Кванты времени для него выделяются, но он будет выполняться до окончания очередного цикла.
Привелигерованный - процесс, для которого все прерывания - по-барабану. Он будет выполняться до тех пор, пока не закончится.

Возможно Вы свой процесс, инсталлировали, как привелигеровонный, поэтому он и не закрывается. Знаю это, только теоретически. Серьёзных исследований на этот счёт не проводил. Относитесь к этому как к ИМХО.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 18.06.2013 в 19:43.
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.06.2013, 20:17   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Чушь какая. Процесс, для которого все прерывания по барабану, — это процесс в режиме ядра, который выполнил инструкцию cli.
пыщь
JTG вне форума Ответить с цитированием
Старый 18.06.2013, 21:15   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Чушь какая. Процесс, для которого все прерывания по барабану, — это процесс в режиме ядра, который выполнил инструкцию cli.
То, что это процесс ядра - соглаcен, но cli-очистка, не согласен. Переходом по адресу 0х0100, давно пользовались?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все ли нормально с версткой сайта? FACE OFF Помощь студентам 0 27.11.2010 23:11
Запуск процесса в потоке, завершение процесса в указааноое время, Дайте совет Человек_Борща Общие вопросы Delphi 3 29.08.2010 12:58
Генерация нормально распределенной сл.вел. Jarik Microsoft Office Excel 2 27.06.2009 23:59
Не могу нормально дорбавить звук snake-as Мультимедиа в Delphi 5 29.11.2007 10:48