Ваша винда не работает как хотелось бы? Все советы из поисковика перепробовали установили Linux, а оно всё равно не работает? Вы реверс-инженер или кто вообще, ну в самом деле!? Применим свои навыки владения отладчиком, поможем Шиндовс нормально (по мере её сил) работать!
На написание данной статьи меня подтолкнула злость. Злость на поделие от индусских говнокодеров под названием Windows, на то, что гугол выдаёт мне абсолютно нерабочие решения столетней давности. И вот, когда даже обновление до 11-й винды (с сохранением всех настроек и программ), а потом ещё и установка её же поверх себя не помогли, я решил, что нужно подойти с другой стороны - не как пользователь, а как реверс-инженер.
Суть проблемы
Как видно на картинке моя собственная система решила ограничить меня в возможностях конфигурирования параметров дисплея. Если вы попробуете загуглить данную строчку, вам выдадут тонну вариантов, среди которых: включение полной телеметрии, переустановка драйверов видеокарты, установка их в режиме совместимости с Windows 8 (!!!), перезапуск службы Windows Update, прикладывание горчичников к системному блоку... Как, ну скажите, как это должно вообще помогать? Очевидно, что оно и не помогло.
Источник проблемы
Я, если честно, без понятия. Не так давно винда мне стала предлагать опциональное обновление для моей AMD Radeon видеокарты, после установки которого центр управления Radeon Software взял и перестал видеть графическое устройство. Переустановка драйверов, множество ребутов вроде бы помогли, но, если бы всё закончилось хорошо, статьи бы не было.
Решение проблемы
Имея за плечами, какой-никакой опыт реверс-инжиниринга, я подумал: а почему не попробовать решить данную проблему иначе? Открыть отладчик, найти виновника, выяснить, что для него является триггером на выдачу сего сообщения, и изменить условие на противоположное (конечно, надежда на реестр).
В качестве отладчика я вооружился x64dbg. Процесс, который выводит окно настроек также быстро нашёлся:
Аттачусь к нему. Далее перехожу на вкладку Symbols, и загружаю pdb-файлы для процесса и всех загруженных в него DLL-ок. После этого присматриваюсь к их списку:
Обнаруживается эта интересная DLL, а заодно ещё и парочка других кандидатов на поиск в них причины моей проблемы:
Я решил пройтись по экспортам этих трёх библиотек и поискать что-нибудь со словами enable/disable:
Лишь в одной DLL-ке settings_handlers_pcdisplay.dll
находятся интересные на мой взгляд функции: IsDisabledByGroupPolicy
, IsDisabledByPolicy
. Ставлю на них бряки, и пробую отобразить меню с той надписью про администратора:
Присмотревшись к имеющемуся коду, я вижу вызов одной странной функции:
Гугление данной функции приводит меня к данной странице, с которой есть ссылка на перечисление RESTRICTIONS, где, в свою очередь, находится значение 0x4000007B
:
Так, погодите-ка! Кажется, я уже видел очень похожую строку в реестре, в разделе Policies (там я ранее как раз искал какой-нибудь параметр, который и мог приводить к проблеме):
Кто её туда записал я не знаю. Но, я уже догадывался, что удаление этого аргумента решит мою проблему:
Так и есть, всё заработало (после перезапуска процесса systemsettings.exe
).
Выводы
Пора уже решать проблемы своей операционной системы самостоятельно! Особенно, если отладчики для вас софт не чуждый.
Всем спасибо.
Автор: Владимир