Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[расковырял] надо будет поковырять будет под дебагом 19.12.06 21:45 Число просмотров: 22925
Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 19.12.06 23:36 Количество правок: 5
|
Но чтото мне подсказывает что это был какой то быстрокривохак для замены пути NT-style выводимого MessageBox'м каким то сервисом на win32, причем в коде win32k.sys, а сам сервис ковырять никто не хотел почемуто :)
[РАСКОВЫРЯЛ жуя апельсину] обошелся сырцами винды :)
Функция GetHardErrorText
Первое что поразило - длина функции почти 700 строк Сшного кода :))
Коммент:
* This function figures out the message box title, text and flags.
* We want to do this up front so we can log this error when the hard error is
* raised. Previously we used to log it after the user had dismissed the message
* box -- but that was not when the error occurred (DCR Bug 107590)
Функция занимается тем что находит в тексте месаг бокса строчки типа "{EXCEPTION}" и если таковые есть - чтото еще оттуда выдирает и пишет в системный лог. Прямо из MessageBox'а! Воистину мега-криво-хак :)
} else if ((asLocal.Length > 4) && !_strnicmp(asLocal.Buffer, "\\??\\", 4)) {
strcpy( asLocal.Buffer, asLocal.Buffer+4 );// когда strcpy не было сильно заоптимизированным это наверно работало :))))
asLocal.Length -= 4;
А у MB_SERVICE_NOTIFICATION ноги растут потому что дебрях винды MB_SERVICE_NOTIFICATION месагбокс с эмулируется через NtRaiseHardError :))
Помнится NT убивал нижеследующий код. Вот что называется перенесли кривоподелие user32 в ядро...
HMENU hMenu = CreatePopupMenu();
HMENU hMenu1 = CreatePopupMenu();
AppendMenu(hMenu1,MF_STRING, 1, "1");
AppendMenu(hMenu1,MF_STRING, 2, "2");
AppendMenu(hMenu1,MF_STRING, 3, "3");
InsertMenu(hMenu,1,MF_POPUP|MF_STRING,(UINT)hMenu1,"1");
InsertMenu(hMenu,2,MF_POPUP|MF_STRING,(UINT)hMenu1,"2");
InsertMenu(hMenu,3,MF_POPUP|MF_STRING,(UINT)hMenu1,"3");
InsertMenu(hMenu,4,MF_POPUP|MF_STRING,(UINT)hMenu1,"4");
InsertMenu(hMenu,5,MF_POPUP|MF_STRING,(UINT)hMenu1,"5");
InsertMenu(hMenu,6,MF_POPUP|MF_STRING,(UINT)hMenu1,"6");
|
|
|