CreateProcessNotify

Тема в разделе "WASM.BEGINNERS", создана пользователем Postscripter, 18 авг 2011.

  1. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Доброго дня. Пишу библиотеку, перехватывающую запуск процессов через CreateProcessNotify. В скомпилированном виде - больше 400 кило. Работает, проверено на XP/Vista/7... И всё бы хорошо, но вот именно на семёрке (32 бита) вдруг обнаружилось что невозможно запустить любое приложение, название которого начинается на "ADBERDR"! Я это понял когда не смог поставить Adobe reader :)

    Прекращена работа программы ADBERDR.exe,
    Имя модуля - либо моя библиотека, либо ntdll
    Код исключения - c0000005

    Если выгрузить библиотеку - всё нормально. Изменить одну букву в названии exe - всё нормально. Система пять-минут-назад-установленная, антивирус отсутствует. Но это ещё не всё. Самое интересное что код библиотеки при этом не выполняется. Вообще. Сразу после загрузки, ещё до входа в процедуру CreateProcessNotify, библиотека посылает сообщение, но в случае с ADBERDR я его не получаю. Пробовал просто стирать код, строчка за строчкой. В итоге стёр абсолютно всё и ошибка исчезла. Вес при этом уменьшился до 41 кб.

    Не могу понять - в чём фишка? Откуда эти буквы? (код не привожу, потому что до него дело не доходит, да и ObjectPascal тут не любят).
     
  2. freyr

    freyr New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2010
    Сообщения:
    95
    логично было бы предположить, что ошибка в вашем коде. но так как кода вы не даете, нужно дождатся месных телепатов для получения ответа.
     
  3. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Ой, не надо телепатов!)) Я просто думал - дело в размере. Потому как до выполнения кода дело не доходит, валится сразу, не выполнив кода ни байта.... Сейчас выложу.
     
  4. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Чёрт... начал вырезать места, которые не хотелось бы афишировать, и чтобы подсократить код - так он, гад, заработал! 0_0 Вернул всё на место - опять проблема. Поэтому выкладываю как есть...
     
  5. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Это конечно не Си, но всё равно очень надеюсь на вашу помощь... Где ещё искать системных программистов, как не здесь))

    Код (Text):
     
  6. zabej

    zabej New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2011
    Сообщения:
    14
    бугога. извините, не удержался =)
     
  7. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    главное своё дело делает. Что такого?
     
  8. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Postscripter
    За место ShowMessage вставь OutputDebugString или MessageBoxA.
     
  9. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Попробовал. Всё равно эта строка не отрабатывает, вылетает где-то раньше. Вот только где...

    Showmessage тут просто для наглядности, раньше была отправка сообщения (sendmessage).
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Delphi было бы неплохо для начала проапгрейдить. Хотя бы для того, чтобы
    Код (Text):
    1. ExtractFileDir
    2. ExtractFileDrive
    3. ExtractFileExt
    4. ExtractFileName
    5. ExtractFilePath
    заново не изобретать. Не говоря уже о том, что кодировка ANSI сейчас вообще не в моде, и правильный образ жизни требует использования Unicode. Ну и из заголовка пару-тройку явно лишних модулей вроде Forms надо бы вынести.
     
  11. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Делфи 7-й, какой уж тут юникод))) А современные версии какие-то все страшные.. И вылетали частенько без всякого предупреждения.

    Forms нужен - он создаёт окно с картинкой и тремя кнопками. К тому же, CreateMessageDialog тоже использует forms, а он тянет за собой windows, classes, messages... итого 300 кб. Variants можно убрать, да и всё, пожалуй.
     
  12. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Postscripter
    WideString, PWideChar есть UNICODE
     
  13. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    В новых, говорят, любой "просто String" - юникодный. Так что при необходимости проще будет банально перекомпилировать уже имеющийся код, чем сейчас приписывать везде wide- ...

    Да и проблема вряд ли исчезнет. Все символы из набора ADBERDR - обычная латиница, я проверял.
     
  14. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Postscripter
    Ну не знаю как вы запускаете, но у меня ваша dll показала эти мессаги:
    rundll32.exe ADBERDR.dll,CreateProcessNotify
    Тестил на Win7 SP1 x64 и x86
     
  15. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Не библиотека, а подопытный экзешник должен называться ADBERDR.

    А запускаю я через ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCertDlls

    Тогда библиотека получает уведомления о запуске приложений и может дать добро. А может и не дать. Вот как раз при запуске приложения ADBERDR.exe оно и сбоит.

    Ситуация осложняется тем, что у меня самого XP и всё работает, а чтобы проверить приходится бегать к соседу за ноутом с Win7.
     
  16. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Postscripter
    Переименнованный rundll32.exe (в ADBERDR.exe) тоже работает.
     
  17. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Вы слышали о виртуальных машинках?
     
  18. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Установочного Win7 нету.. А чтобы скачать образ нужно потратить несколько дней
     
  19. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    T800, не так запускаете! Поэтому и работает :) Это же не просто функция
     
  20. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Postscripter
    А вы вообще загруженные модули в процессе ADBERDR проверяли?