Как выяснил, существует три флажка - признака того, что поток отлаживается. Один - в TEB (точнее, там указатель на этот флажок), это PEB.BeingDebugged. Еще два уже в нулевом кольце, это KPCR.ActiveDebug и KTHREAD.ActiveDebug. Основной вопрос (чтобы ответить самому, нужно перелопатить ядро) - зачем их три? На моей системе у процесса Winlogon.exe выставлен флаг KTHREAD.ActiveDebug, хотя никто его не отлаживает! Почему? Кроме того, при этом выставленном флаге менеджер сервисов (который Int 2E) при выполнении какой-то функции Winlogon'ом сбрасывает отладочные регистры DRx. Есть ли этому какое-то разумное объяснение???
Что-то мне кажется, если флаг выставлен, то к процессу нельзя подрубится отладчиком, может они для Winlogon используют инверсированое значение? Проверь с gflags.exe (или где-то в реестре) сменить значение [debug WINLOGON] (по умолчанию отключено)
Это нормально, хотелось проверить (сайс у меня не стоит) , есть ли связь KTHREAD.ActiveDebug у WINLOGON с флагом [debug WINLOGON]
сайса у меня тоже нет, но я из драйвера это определил, что у Винлогона поле KTHREAD.ActiveDebug равно 1, хотя флажок и не выставлен.
солгал, не 1 там, а 8F, при чем и в KTHREAD.ActiveDebug и в KPCR.ActiveDebug. Выставил флажок - система не грузится, Винлогон при запуске выдает синий экран... сейчас буду систему переустанавливать
ого выбери последнюю удачную конфигурацию или под NTFS есть утилиты перезаписать из winnt\repair файл system в каталог system32\config или recovery console вернуть значение реестра [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager] "GlobalFlag"=dword:00000000
Можно попробовать из под ДОС ручками изменить файл system, "GlobalFlag"=dword:04000000 на "GlobalFlag"=dword:00000000 Код (Text): до 0001A810 45 78 63 6C 75 64 65 46 72 6F 6D 4B 6E 6F 77 6E ExcludeFromKnown 0001A820 44 6C 6C 73 00 00 00 00 D8 FF FF FF 76 6B 0A 00 Dlls........vk.. 0001A830 04 00 00 80 [b]00 00 00 04 [/b]04 00 00 00 01 00 00 00 ................ 0001A840 47 6C 6F 62 61 6C 46 6C 61 67 00 00 00 00 00 00 GlobalFlag...... 0001A850 C8 FF FF FF 76 6B 1E 00 04 00 00 80 00 00 00 00 ....vk.......... 0001A860 04 00 00 00 01 00 00 00 48 65 61 70 44 65 43 6F ........HeapDeCo 0001A870 6D 6D 69 74 46 72 65 65 42 6C 6F 63 6B 54 68 72 mmitFreeBlockThr после 0001A810 45 78 63 6C 75 64 65 46 72 6F 6D 4B 6E 6F 77 6E ExcludeFromKnown 0001A820 44 6C 6C 73 00 00 00 00 D8 FF FF FF 76 6B 0A 00 Dlls........vk.. 0001A830 04 00 00 80 [b]00 00 00 00[/b] 04 00 00 00 01 00 00 00 ................ 0001A840 47 6C 6F 62 61 6C 46 6C 61 67 00 00 00 00 00 00 GlobalFlag...... 0001A850 C8 FF FF FF 76 6B 1E 00 04 00 00 80 00 00 00 00 ....vk.......... 0001A860 04 00 00 00 01 00 00 00 48 65 61 70 44 65 43 6F ........HeapDeCo 0001A870 6D 6D 69 74 46 72 65 65 42 6C 6F 63 6B 54 68 72 mmitFreeBlockThr
Ура!!! Сработало! Правда, у меня в ХР по другому смещению флажок хранился, но главное - сработало! Странно, что у файла реестра нет контрольной суммы Но с флажком однозначно не получается, придется искать машину с win2000. Спасибо за мысль исправить реестр ручками!