Подскажите пожалуйста что означают, для чего нужны следующие параметры реестра и можно ли вместо "ServiceDll" прописать свою DLLку (ключ [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Themes] взят просто для наглядности) [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Themes\Parameters] "ServiceDll"="%SystemRoot%\System32\shsvcs.dll" "ServiceMain"="ThemeServiceMain"
Если просто прописать вместо 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 в моей библиотеке при загрузке ее таким образом в процесс и вообще какую литературу стоит почитать для ознакомления с работой системных процессов?
linkmaze Я, конечно, не спец, но из DllMain вроде не рекомендуется вызывать что-либо, кроме самых примитивных функций. В том числе не рекомендуется также вызывать и MessageBox. Попробуйте оставить в DllMain только return TRUE.
Имхо, проблема в том что MessageBox блокирующая функция, т.е. ожидает ответа пользователя. Попробовать заменить на запись в файл или Beep. Насчёт лит-ры: http://gzip.rsdn.ru/summary/704.xml
roman_pro Так запись в файл или Beep экспортируются kernel32. Разумеется, что с ними проблем не должно быть.
Спасибо за ссылку. Заменил MessageBox на CreateFile -- все работает. Выходит пока MessageBox ждет реакции пользователя весь процесс SVCHOST или один из его потоков будет в состоянии ожидания и пока я не нажму кнопку ОК или не закрою окно поток не будет выполняться. Посмотрел в ProcessExplorer`е при запуске или остановке сервиса хостом которого является SVCHOST соответственно кол-во потоков в SVCHOST увеличивается или уменьшается как правило на один. Выходит система для каждого сервиса создает новый поток но почему тогда система зависает если использовать в коде библиотеки MessageBox?
linkmaze Дело скорее всего не в коде библиотеки и не в MessageBox. Почитайте в MSDN про DllMain. Там четко написано, когда может произойти зависание.