|
|
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Привет всем! Столкнулся с паранормальными явлениями Что делать не знаю. У меня все работает, у пользователя при мне работает, а когда пользователь подольше поработает, начинает вылетать. Написал filetest.dll для контроля за процессами запускаемыми из моей проги (отслеживается открытие общих файлов для избежания их монопольного открытия у меня). Моя прога написана на Visual FoxPro 6.0SP5, DLL win32-проект MSVC6SP5 Функционал вкратце такой: 1. Родительская (моя) прога подгружает filetest.dll и инициализирует 2. При инициализации создается именованная область памяти (CreateFileMapping()) куда помешается pid и имена контролируемых файлов 3. В родительском процессе dll перехватывает вызовы CreateProcess(), LoadLibrary(), LoadLibraryEx() При вызове CreateProcess(), происходит создание процесса с флагом CREATE_SUSPENDED, затем в этот процесс внедряется эта же dll (через CreateRemoteThread()), после этого запускается дочерний процесс (ResumeThread()) 4. В дочернем процессе происходит перехват CreateProcess(), LoadLibrary(), LoadLibraryEx(), CreateFile(), CloseHandle() При инициализации в дочернем процессе подцепляется именованная область памяти только для чтения OpenFileMapping(FILE_MAP_READ, FALSE, pcszName), и при открытии файла CreateFile(), если он подпадает под список контролируемых, его хэндл запоминается в массив. Проблема такая - все работает, но через какое-то время (довольно большое, несколько часов), при очередном вызове дочерней проги (любой, а их несколько) происходит исключение при загрузке dll (far'ом смотрю в модулях процесса нет filetest.dll) Все закрываешь, заново открываешь, опять работает. У меня есть такое подозрение, что как-то портится блок разделяемой памяти в родительском процессе, т.к. дочерние процессы открывают его с режиме только на чтение. Написал прогу, которая выводит содержимое этого блока - в моменты вылетов содержимое нормальное. Все что-только можно окружил обработкой исключений, включая DllMain(): Код: plaintext 1. 2. 3. 4. 5. В общем - не знаю как это все безобразие отладить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2007, 10:23 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima TУ меня все работает, у пользователя при мне работает, а когда пользователь подольше поработает, начинает вылетать.постой рядом с пользователем подольше. Попробуй вести лог. Dima Tпроисходит исключениеи какое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2007, 16:50 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
maXmo Dima TУ меня все работает, у пользователя при мне работает, а когда пользователь подольше поработает, начинает вылетать.постой рядом с пользователем подольше. Попробуй вести лог. Dima Tпроисходит исключениеи какое? Рядом не стоял, но как только начинало вылетать - radmin`ом цеплялся, смотрел - родительская прога нормально работает, при попытке запустить дочерний процесс "программа выполнила недопустимую операцию, позвоните куда надо ...", причем в дочернем, родительский продолжает работать. В журнале событий "Приложение": Application ErrorОшибка приложения child.exe, версия 0.0.0.0, модуль kernel32.dll, версия 5.1.2600.2180, адрес 0x00082f9c Сообщение одинаковое на разных дочерних exe. Как бы узнать что по адресу 0x00082f9c находится. Лог буду делать, постепенно вычислять строку, других мыслей пока нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 08:20 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
на чём пишешь? На С/winapi? Overlapped чтение/запись в файл делаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 11:14 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
блин… насколько я помню, винда не говорит «просто ошибка». Она указывает причину, типа «память недоступна для записи». По крайней мере, когда у меня возникала ошибка в kernel32.dll, я всегда видел, что это за ошибка. Попробуй скомпилить прогу на с++, перехватить исключение и слить в лог стектрейс. Можно открыть ещё что-нибудь и сливать туда перехватываемые вызовы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 11:23 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
maXmoблин… насколько я помню, винда не говорит «просто ошибка». Она указывает причину, типа «память недоступна для записи». По крайней мере, когда у меня возникала ошибка в kernel32.dll, я всегда видел, что это за ошибка. Попробуй скомпилить прогу на с++, перехватить исключение и слить в лог стектрейс. Можно открыть ещё что-нибудь и сливать туда перехватываемые вызовы. Честно говоря внимательно не читал, смотрел журнал событий. Сегодня уже все было и прога сегодня не нужна, следующий раз завтра, если сообщение о вылете выскочит, обещали не трогать и мне показать, скриншоты покажу. Прога (dll) написана на MSVC6SP5 проект Win32 Dinamic Link Library. Я так понимаю это С++ Родительская прога (моя), которая подгружает dll - Visual FoxPro 6 SP5 Дочерние проги (чужие) - дельфи и что-то еще. Я подозреваю что сглючивает на этапе загрузки dll в дочерний процесс, т.к. в момент исключения этой dll еще нет в списке модулей процесса, а когда стартует все нормально, то она там есть. Но на момент исключения другие модули есть, хотя процесс еще в состоянии SUSPENDED, т.е., как я понимаю, остальные модули подгружены при загрузке моей dll Пока добавлю протоколирование всех шагов в dllmain(), может хоть что-то прояснится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 12:13 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima TКак бы узнать что по адресу 0x00082f9c находится.согласно моей kernel32.dll это внутренняя функция, так что без стека не разобрать. Можно ещё дочерний процесс запускать в режиме дебуга, тогда процесс-дебаггер будет получать уведомления обо всех исключениях. Dima TДочерние проги (чужие) - дельфи и что-то еще.то есть менять их ты не можешь? Кстати, заметь, происходит ли исключение до того, как ты начинаешь внедрять свою длл или уже в процессе. То есть веди ещё лог действий родительского процесса при запуске дочернего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 12:58 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima TПрога (dll) написана на MSVC6SP5 проект Win32 Dinamic Link Library. Я так понимаю это С++в с++ можно воспользоваться обычными для с++ try, catch и с++ными исключениями и попытаться выжать из них максимум информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 13:01 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
maXmoв с++ можно воспользоваться обычными для с++ try, catch и с++ными исключениями и попытаться выжать из них максимум информации. Я в коде исключения совсем не использую. Только для перехвата ошибок типа обращения к несуществующей памяти. Эти ошибки протоколируются. Код: plaintext 1. 2. 3. 4. В логе пусто. Пробовал принудительно писать по нулевому указателю - перехватывается, в лог пишется. Добавил записи в лог по каждой команде dllmain() и по всем перехватываемым функциям, и контроль целостности общего блока памяти по CRC. Обновлю, может завтра более конкретные симптомы будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 13:41 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Препаршиво такие вещи отлаживать. Пара вопросов - как перхватываем? И начиная с определённого момента все проги падают, или через раз глючит. Самое простое, что в таких случаях можно сделать - понавтыкать вывод отладочных сообщений, где только можно, и мониторить их. Благо с пользователем рядом находитесь. Хотя судя по тому, что через несколько часов баги появляются - что-то где-то переполняется, хотя почему дочерний процес при этом падает, а не родительский не очень ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2007, 14:10 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Вчера вечером сам гонял у клиента, глюки стали через раз, причем без какой-то периодичности. Вылет происходит до начала работы DllMain(), т.е. в момент исключения нез записи в лог, хотя первая строка DllMain() - запись в лог. На своем компе повторить то же не удается, все работает Что касается сообщения об ошибке - XP почему-то не дает описание типа "запись/чтение", выскакивает предложение отправить отчет в MS, в подробностях отчета инфа о загруженных модулях (в буфер обмена не копируется, а скриншотов пришлось бы штук 20 сделать) и сообщение Подпись ошибки:AppName: start.exe AppVer: 5.3.1.40 ModName: kernel32.dll ModVer: 5.1.2600.2180 Offset: 00082f9cОбщий блок памяти не причем - CRC не меняется, да и не доходит до его использования. Как я понимаю загрузка DLL происходит в такой последовательности: 1. Подгружаются требуемые системные библиотеки 2. Создаются глобальные переменные, для объектов отрабатывают конструкторы 3. Выполняется DllMain() Код такой (однотипные места поубирал): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 08:43 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Косяк похоже надо искать где-то на этапе внедрения dll, происходит это так: в родительском процессе перехватывается CreateProcessA() создается дочерний процесс с флагом CREATE_SUSPENDED затем через CreateRemoteThread() запускается LoadLibraryA() для моей dll. Код такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 08:56 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Кажется нашел косяк. Внедрение строится на предположении что kernel32.dll всегда грузится по одному и тому же адресу и адрес LoadLibraryA() во всех процессах одинаковый. Адрес LoadLibraryA() 0x7c882f9c, т.е. 7C800000 адрес модуля kernel32.dll, и смещение 00082f9c про которое в исключении и пишется. Вот список модулей у вылетевшего процесса Far processinfo Base Size Path (version info is not displayed) 00400000 1F000 C:\Child\child.exe 7C900000 B1000 C:\WINDOWS\system32\ntdll.dll 7C800000 F6000 C:\WINDOWS\system32\kernel32.dll 77D30000 90000 C:\WINDOWS\system32\user32.dll 77F10000 46000 C:\WINDOWS\system32\GDI32.dll 77DC0000 AC000 C:\WINDOWS\system32\advapi32.dll 77E70000 91000 C:\WINDOWS\system32\RPCRT4.dll 77110000 8C000 C:\WINDOWS\system32\oleaut32.dll 77C00000 58000 C:\WINDOWS\system32\msvcrt.dll 774D0000 13C000 C:\WINDOWS\system32\ole32.dll 77BF0000 8000 C:\WINDOWS\system32\version.dll 699D0000 16000 C:\WINDOWS\system32\faultrep.dll 769A0000 B4000 C:\WINDOWS\system32\USERENV.dll 76330000 10000 C:\WINDOWS\system32\WINSTA.dll 5BD50000 54000 C:\WINDOWS\system32\NETAPI32.dll 76F40000 8000 C:\WINDOWS\system32\WTSAPI32.dll 77910000 F4000 C:\WINDOWS\system32\SETUPAPI.dll 77F60000 76000 C:\WINDOWS\system32\SHLWAPI.dll 77B30000 22000 C:\WINDOWS\system32\Apphelp.dll Вроде как все загружено как надо, хотя не факт что win останавливает все потоки при необработанном исключении в одном из них, возможно они дозагрузились после исключения. Только как его лечить? модуль вроде как загружен, т.к. в исключении упоминается kernel32.dll, а не безымянная память. То ли он не успевает проинициализироваться до конца, можно конечно попробовать Sleep() воткнуть перед CreateRemoteThread(), но на сколько? и хватит ли его? А если вообще третий процесс на себя процессорное время забрал? Может AVP еще свой вклад вносит. Может у клиента еще что в этот момент крутится или после активной работы своп активней идет. Если исключение происходит в точке входа в LoadLibraryA(), то параметры точно не причем? Рихтера читал про механизмы внедрения и перехвата, может что упустил, надо будет перечитать еще раз. Как-то это должно проверяться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 09:48 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Самое обидное что я уже пытался смотреть что находится по адресу 0x00082f9c в kernel32.dll с помощью утилиты depends из VS, она пишет LoadLibraryA() EntryPoint 0x00001D77, а в отладчике 0x00082f9c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 10:03 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Поставил Sleep(500) - сам гонял ни разу не сглючило, завтра посмотрю что у пользователя будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 16:33 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima TСамое обидное что я уже пытался смотреть что находится по адресу 0x00082f9c в kernel32.dll с помощью утилиты depends из VS, она пишет LoadLibraryA() EntryPoint 0x00001D77, а в отладчике 0x00082f9cну дык функции из дллки ведь через релокейшны подключаются, поэтому адреса разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 16:53 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
возьми да посмотри, какой код по адресу 0x00082f9c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 16:53 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima TВылет происходит до начала работы DllMain(), т.е. в момент исключения нез записи в лог, хотя первая строка DllMain() - запись в лог.Как именно пишешь в лог? Какими функциями? Через c-runtime или через winapi? Если первое - то опаньки. Вот это читал? MSDNWarning The entry-point function should perform only simple initialization or termination tasks. It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions), because this may create dependency loops in the DLL load order. This can result in a DLL being used before the system has executed its initialization code. Similarly, the entry-point function must not call the FreeLibrary function (or a function that calls FreeLibrary), because this can result in a DLL being used after the system has executed its termination code. It is safe to call other functions in Kernel32.dll, because this DLL is guaranteed to be loaded in the process address space when the entry-point function is called. It is common for the entry-point function to create synchronization objects such as critical sections and mutexes, and use TLS. Do not call the registry functions, because they are located in Advapi32.dll. If you are dynamically linking with the C run-time library, do not call malloc; instead, call HeapAlloc. Calling imported functions other than those located in Kernel32.dll may result in problems that are difficult to diagnose. For example, calling User, Shell, and COM functions can cause access violation errors, because some functions in their DLLs call LoadLibrary to load other system components. Conversely, calling those functions during termination can cause access violation errors because the corresponding component may already have been unloaded or uninitialized. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 17:45 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
maXmoну дык функции из дллки ведь через релокейшны подключаются, поэтому адреса разные. Я так и подумал maXmoвозьми да посмотри, какой код по адресу 0x00082f9cЭто реальная точка входа в LoadLibraryA() GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA") = 0x7c882f9c, где 0x7c800000 адрес kernel32.dll White OwlКак именно пишешь в лог? Какими функциями? Через c-runtime или через winapi? Если первое - то опаньки.Второе CreateFile(), WriteFile(). С-runtime в этой DLL старался по минимому использовать. White OwlВот это читал?Не читал. Но как я понимаю, в моем случае, операционка не всегда успевает спроецировать код kernel32.dll в адресное пространство процесса и мой внедренный поток получает точку входа в несуществующей памяти и если я обращусь по адресу в таблице импорта получу тот же результат. Вобщем эти вопросы в целом понятны. Остается непонятным главный вопрос: "Как проверить завершилась ли загрузка kernel32.dll?" Еще раз о сути проблемы (я похоже с показом исходников переборщил): Код: plaintext 1. Именно этой причиной ошибки можно объяснить, то что у себя я ее повторить не могу на том же софте, т.к. у пользователя Cel 2ГГц 256 Мб, а у меня PM 1.5 ГГц 512 Мб, т.е. у меня железо помощнее и такая ситуация не возникает. Пока поставил Sleep(500) в середину, пользователь уже трудиться, пока все нормально, подожду вечера. Только я до конца не уверен, что полсекунды хватит на все случаи, может завтра они параллельно какую-нибудь софтину запустят, которая активно процессор занимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 09:51 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
ждать можно функцией WaitForInputIdle. Посмотри ещё функцию EnumerateLoadedModules64. Кстати, не вижу, где ты закрываешь хендл дочернего процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 11:54 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima TПрога (dll) написана на MSVC6SP5 проект Win32 Dinamic Link Library. Я так понимаю это С++кстати, посмотри зависимости, не грузится ли при её запуске лишних дллей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 13:25 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
maXmoждать можно функцией WaitForInputIdle. Посмотри ещё функцию EnumerateLoadedModules64. Кстати, не вижу, где ты закрываешь хендл дочернего процесса. Если правильно понял MSDN - WaitForInputIdle() ожидает создание очереди сообщений и ее освобождение. В моем случае этого просто не дождаться, т.к. CREATE_SUSPENDED. EnumerateLoadedModules64() - сейчас поиспытываю. Хэндлы не закрываю, т.к. My_CreateProcessA() это функция-ловушка для перехвата CreateProcessA() и в родительском и в дочерних процессах, т.е. закрывает тот код, который вызвал CreateProcessA() Только я рано радовался. Закончилось все сегодня опять вылетом (как только первое исключение произошло я Radmin`ом подцепился): 1. Начало вылетать все стабильно, т.е. после первого глюка больше я не смог создать ни один дочерний процесс, пробовал из разных мест программы, в т.ч. из тех где утром работало. Стабильно kernel32.dll 0x00082f9c 2. Все закрыл, т.е. моя dll выгружена из всех процессов, запустил заново, глюки избирательно в непонятном порядке, то запустится, то нет, чаще запускалось. Похоже теория об неуспевании инициализации процесса с треском провалилась :( Думал, может вместо имени dll какая-нибудь ерунда подается в LoadLibrary(), но если подать строку с неправильным именем, то дочерний процесс работает, только моя dll не подгружается, что логично. Если NULL, то вылетает, но в ошибке не kernel32.dll 0x00082f9c, а другой адрес пишется. Похоже надо начинать диагностику сначала. Попробую все убрать в дочернем процессе, т.е. чтобы только внедрение в дочерний и никаких в нем перехватов. А там либо искать косяк в том что останется, либо поэтапно добавлять отключенное. Может кто мысль еще какую подкинет? Мне эта ситуация начинает напоминать анекдот: "Если программа выполняет мистические действия, значит вы написали что-то невероятно глупое" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:08 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima T Мне эта ситуация начинает напоминать анекдот: "Если программа выполняет мистические действия, значит вы написали что-то невероятно глупое" точно. (отслеживается открытие общих файлов для избежания их монопольного открытия у меня) Это вы неправильно выразились просто или на самом деле _ТОЛЬКО_ для этого всё это безумие??? 8-/. винда не даст вам открыть монопольно файл если он кем-то открыт. Если это фокспры глюк (вылетает там или чего) - надо просто обработать ошибку. (Напишите dll которая будет пытаться открыть монопольно и возвращать bool в фокс :-) ) зы. иными словами : НАХРЕНА ЭТО ВСЁ ? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 19:15 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Dima TНаписал filetest.dll для контроля за процессами запускаемыми из моей проги (отслеживается открытие общих файлов для избежания их монопольного открытия у меня).Кстати да, для решения ЭТОЙ задачи достаточно один раз открыть файл в режиме общего доступа и держать его открытым. Все последующие попытки открыть файл монопольно завершаться ошибкой. Перефразирую вопрос Паля: А нельзя ли эту задачу решить менее хакерскими методами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 19:35 |
|
||
|
Исключение при загрузке DLL
|
|||
|---|---|---|---|
|
#18+
Палязы. иными словами : НАХРЕНА ЭТО ВСЁ ? :-)Ладно, колюсь :) Думал сразу такой вопрос кто-нибудь задаст. На самом деле софтина работет у 500 клиентов (без dll), запускаемые проги от "дружественных" организаций, т.к. клиенты у нас общие. Некоторые повадились пиз...ть инфу у нас и у других, поэтому задачи этой dll: 1. Частичное шифрование базы фокса (некоторых dbf). Средствами фокса это сделать гораздо сложнее и работать будет медленнее, и сопровождать тяжелее. Это работает, но я пока все что с шифрованием связано из кода убрал для отладки. 2. Контроль изнутри за активностью "дружественных" прог, на предмет обращения к нашим dbf-кам, для своевременного реагирования в случае нововведений у них. 3. На сегодня один "шпиенский" процесс периодически виснет и оставляет держать открытыми монопольно наши dbf. Соответственно наша прога не может их открыть. Клиенту мы не можем (по политическим причинам) сказать "эти уроды даже инфу снять не могут по-человечески", поэтому приходится валить все комп клиента и просить перезагрузиться, что все равно дает минус в отношении к нашей проге. 4. Хочется решить задачу универсально с заделом на будущее, т.к. сегодня один гадит, завтра второй начнет. White Owl...Кстати да, для решения ЭТОЙ задачи достаточно один раз открыть файл в режиме общего доступа и держать его открытым. Все последующие попытки открыть файл монопольно завершаться ошибкой. Перефразирую вопрос Паля: А нельзя ли эту задачу решить менее хакерскими методами?Можно, только вышеописанные проблемы останутся. На сегодня косяк где-то при внедрении в дочерний процесс Кто нибудь что-то подобное делал? Можете исходниками поделиться? Я уже две недели пытаюсь косяк найти. Пока сюда постил хоть сам в чем-то разобрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 09:46 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34364361&tid=2029323]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
136ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 414ms |

| 0 / 0 |
