Внедрение DLL в SVCHOST

Тема в разделе "WASM.BEGINNERS", создана пользователем linkmaze, 21 ноя 2007.

  1. linkmaze

    linkmaze New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    60
    Подскажите пожалуйста что означают, для чего нужны следующие параметры реестра
    и можно ли вместо "ServiceDll" прописать свою DLLку
    (ключ [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Themes]
    взят просто для наглядности)

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Themes\Parameters]
    "ServiceDll"="%SystemRoot%\System32\shsvcs.dll"
    "ServiceMain"="ThemeServiceMain"
     
  2. linkmaze

    linkmaze New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    60
    Если просто прописать вместо serviceDll путь к свойей DLLке то после перезагрузки
    у меня выводится окно входа в систему, а далее система глухо и безответно висит
    (не работает даже CTL ALT DEL)

    исходный код DLL:

    __declspec (dllexport)int CALLBACK Function1();
    #include "stdafx.h"
    BOOL APIENTRY DllMain( HANDLE hModule,
    DWORD ul_reason_for_call,
    LPVOID lpReserved
    )
    {
    MessageBox(0,"DLL_Load","DLLMain",MB_OK);
    return TRUE;
    }
    __declspec (dllexport) int CALLBACK Function1()
    {
    MessageBox(0,"export function","exporty",MB_OK);
    return 0;
    }

    может кто нибудь подскажет из какого места в SVCHOST происходит переход
    на функцию DllMain в моей библиотеке при загрузке ее таким образом в процесс
    и вообще какую литературу стоит почитать для ознакомления с работой системных процессов?
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    linkmaze
    Я, конечно, не спец, но из DllMain вроде не рекомендуется вызывать что-либо, кроме самых примитивных функций. В том числе не рекомендуется также вызывать и MessageBox. Попробуйте оставить в DllMain только return TRUE.
     
  4. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Имхо, проблема в том что MessageBox блокирующая функция, т.е. ожидает ответа пользователя. Попробовать заменить на запись в файл или Beep.

    Насчёт лит-ры:
    http://gzip.rsdn.ru/summary/704.xml
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    roman_pro
    Так запись в файл или Beep экспортируются kernel32. Разумеется, что с ними проблем не должно быть.
     
  6. LazzY

    LazzY New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2006
    Сообщения:
    123
    я юзаю в таких случаях DbgPrint
     
  7. linkmaze

    linkmaze New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    60
    Спасибо за ссылку. Заменил MessageBox на CreateFile -- все работает.
    Выходит пока MessageBox ждет реакции пользователя
    весь процесс SVCHOST или один из его потоков будет в состоянии ожидания
    и пока я не нажму кнопку ОК или не закрою окно поток не будет выполняться.
    Посмотрел в ProcessExplorer`е при запуске или остановке сервиса хостом которого
    является SVCHOST соответственно кол-во потоков в SVCHOST увеличивается
    или уменьшается как правило на один. Выходит система для каждого сервиса
    создает новый поток но почему тогда система зависает если использовать
    в коде библиотеки MessageBox?
     
  8. CodeTao

    CodeTao Евгений

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    177
    Адрес:
    штаты
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    linkmaze
    Дело скорее всего не в коде библиотеки и не в MessageBox. Почитайте в MSDN про DllMain. Там четко написано, когда может произойти зависание.