Задача следующая: Необходимо чтобы программа загружалась при старте Windows, но при этом не отображалась ни в ветке реестра HKEY_USERS\Default\Software\Microsoft\Windows\CurrentVersion\Run ни в msconfig Вобщем, для решения этой задачи, было принято решение написать DLL, которая будет загружаться с Windows с единственной функцией - вызов программы. Исходный код получившейся DLL вот: Code: library Run; uses windows; procedure RunIt(); var St: TStartupinfo; Pr: TProcessInformation; begin ZeroMemory(@St, SizeOf(St)); St.cb := SizeOf(St); St.lpDesktop := PChar('winsta0\default'); CreateProcess(nil, 'C:\Program Files\EMPMon\ansd.exe', nil, nil, false, 0, nil, nil, St, Pr); end; exports RunIt; begin end. Далее, для записи этой DLL в автозагрузку запускаю Reg файл в кодом: Code: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\Run] "Asynchronous"=dword:00000001 "Impersonate"=dword:00000000 "DllName"=C:\Program Files\EMPMon\TheDLL.dll "Logon"="RunIt" Но проблема в том, что при загрузке Windows - программа не загружается, я не знаю в чем дело, толи DLL не подгружается, толи процедура вызова в самой DLL неправильная..... Вобщем, ребят, если кто-то в курсе - подскажите, где ошибка? Что здесь не так? Буду очень благодарен.. Запарился уже с этой проблемой. P.S. Тестирую на Windows 7 P.P.S Никакие вирусы, трояны и прочую хрень я не пишу, задачу на работе поручил шеф, для мониторинга интернет-активности сотрудников.
Следуя логике: написать простой DLL для теста, например вывод MessageBox, если сработает - дело в вашей библиотеке, если нет...
Я так понимаю если перехватывать ZwEnumerateValueKey - можно скрыть значение в реестре, но при просмотре автозагрузки через, например, msconfig - всё будет как на ладони..
я сказал как пример.каждая программа может использовать другие ф-ции,суть в одном-перехватить то что тебе надо
Ну перехваты, хуки и тому подобное - это уже дерби, а вот интересно, почему не работает описанный в начале темы метод с DLL? Не думал что будет проблема с этим, по сути всё просто - DLL загружается при старте Windows и запускает нужный EXE... Но почему этого не происходит? Вот что странно. Тестил DLL на вывод сообщения showmessage - результат тот же, ничего не происходит. Вопрос тогда в другом, почему функции в DLL не выполняются в автозапуске....? Что может быть причиной и в какую сторону копать...
Копать в сторону различий в разрядности библиотеки и винлогона. Ну или в сторону несоответствия имени экспортируемой функции с тем что тебе там твой паскаль набилдил. Ну или, да, перехвати что-нибудь совершенно по*** что и как, главное перехвати это крепко, бро, как тебя уже поучили несколькими постами выше! Но, кроме шуток, если совершенно не копать, то все же самым правильным решением для читателей статей эмси рема было бы прочитать вот здесь , все таки уже давно не winХР, да и эмси уже совсем не те что раньше.
Потомучто эта ветка реестра неработает начиная с Висты, грузи dll в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows AppInit_DLLs Есть ещё и для ехе места, без отбражения в мсконфиг.
Оказалось, метод с автозагрузкой DLL исправно работает только на WinXP, но на Windows 7 он не работает. Нашел и реализовал более простой способ автозагрузки для Windows7 в обход msconfig. Тему можно считать закрытой.