Доработка Windows
От: baronchik  
Дата: 26.01.10 01:29
Оценка: 7 (4) -2 :))) :))) :)))
Это часть статьи, которая была в КСВ год назад, но по-моему уместнее она здесь.
-------------------------------------------------------------------------
Доработка Windows дедуктивным методом

Элементарно, Ватсон
А.Конан-Дойль «Приключения Шерлока Холмса»

Автор ни в коей мере не пытается пародировать сэра Артура Конан-Дойля, которого чтит. Просто прием подачи любого материала (от анекдотов до литературоведения) в виде диалога Холмса и Ватсона прочно вошел в нашу жизнь и иногда повышает занимательность изложения темы. Итак …

Ненастным вечером Холмс и Ватсон сидели у камина, глядя на огонь.
— Послушайте, Ватсон, мне кажется, что после того как Вы окончили курсы Микрософт с углубленным изучением Windows, Вы стали слишком мрачно смотреть на вещи. Например, сегодня Вы даже не притронулись к своему ноутбуку, который стоит на каминной полке. Вам необходимо отвлечься от грустных мыслей. Мой брат Майкрофт предложил мне решить небольшую задачу, связанную с операционной системой. Он позвонит около десяти, так что у нас есть целых полчаса.
— Что за задача, Холмс?
— Они (Холмс показал глазами куда-то в потолок) хотят соединить обычный ноутбук с неким прибором через параллельный интерфейс. Проблема в том, что когда-то написанная для этого прибора программа теперь в среде Windows-XP работает неверно: она пропускает часть информации.
— Я думаю, Холмс, это происходит из-за того, что в Windows программа не может напрямую обращаться к аппаратуре, а стандартные средства не успевают за этим прибором. Нужно разработать драйвер режима ядра.
— Да, Майкрофт тоже говорил мне что-то о режиме ядра. Но дело в том, доктор, что информация идет так быстро, что единственная возможность не пропустить ее – это полностью остановить работу всех программ и опросом читать параллельный интерфейс. К счастью, это требуется всего лишь на несколько минут, затем обычную работу можно возобновить. Брат предлагает рассмотреть возможность исправления Windows для этой цели.
— Что за странные фантазии Холмс? Исправлять операционную систему ради одной программы?
— Во-первых, Ватсон, результат работы очень важен. Во-вторых, не требуется тиражировать программу на тысячах компьютерах, да и работает она недолго. Наконец сроки. Разработка и отладка драйвера может занять большее время по сравнению с минимальными доработками имеющейся программы. Кроме этого, реализация в виде драйвера, когда все нужно остановить на несколько минут, бессмысленна, ведь никакие интерфейсы и службы Windows в этот момент просто не работают.
— Но исправление Windows — это очень трудная задача, Холмс!
— Я рассчитываю на Ваши знания, доктор. Вы же с удовольствием изучали архитектуру процессора Intel. Давайте применим наш дедуктивный метод. Начнем с главного. Нам требуется, чтобы программа прямо обращалась к портам аппаратуры и умела останавливать и вновь пускать все остальные задачи и процессы. Пока отвлечемся от операционной системы. Подумайте, Ватсон, какими командами процессора это можно сделать?
— Ну, Холмс! Э-э-э… Хотя вот, пожалуйста. В регистре флагов процессора есть флаги привилегий ввода-вывода. Если задать максимальное значение три, то можно обращаться к портам, и… Смешно, как я раньше не подумал. Ведь в этом случае становятся допустимы также и команды CLI/STI, которыми как раз и можно остановить любую другую работу, а потом опять восстановить нормальную работу. Это то, что нам и нужно!
— Вот видите, Ватсон, для решения нам нужно всего лишь установить две единички в регистре.
— Но, Холмс, даже если мы и установим их, Windows сама сломается. Ведь ее обработчики рассчитаны на то, что обращение к портам пользовательским задачам запрещено.
— Вряд ли работа Windows от этого изменится. Все обращения к аппаратуре и так идут в режиме ядра безо всяких запретов. Лучше поразмыслите, Ватсон, каким образом вообще мы могли бы устанавливать их. Прямые команды PUSHFD/POPFD, я думаю, запрещены?
— Запрещены архитектурой процессора, Холмс!
— А средствами Windows?
— Ну, тем более все запрещено. Хотя постойте-ка! В Windows пользователь может установить собственный обработчик исключения через функцию SetUnhandledExceptionFilter. Тогда появляется возможность возобновлять работу задачи с заданными значениями регистров, в том числе и с регистром флагов! Я как раз разрабатываю свой отладчик и это легко попробовать. При выходе из обработчика в задачу, я установлю командой OR FLAGS,3000h максимальное значение привилегий ввода-вывода. Сейчас… Нет, не получается, Холмс. При следующем входе в обработчик значение в регистре флагов опять минимальное.
— Это легко было предсказать, Ватсон. Если бы таким несложным способом можно было бы менять служебные флаги, любой воришка с лондонского рынка мог бы с помощью примитивной программы нарушить работу любого компьютера.
— Что же делать, Холмс?
— Надо найти место в Windows, где гасятся эти флаги, и исправить его.
— Но, Холмс! Как же мы найдем это место за несколько минут? А если и найдем, как же мы сможем вставить туда новые команды. Ведь нельзя же «раздвинуть» имеющийся код.
— А может быть, и не надо раздвигать код. Поставьте себя на место Windows. Какими бы командами Вы бы гасили и устанавливали служебные флаги?
— Ну, я бы погасил ненужные флаги командой AND, а затем установил бы нужные командой OR.
— Правильно, Ватсон, а так как флаги для всех задач одинаковы, вероятно, команды AND и OR использовали бы операнды-константы. Нам просто нужно найти эти константы и исправить одну из них.
— Но где мы будем искать Холмс? Windows состоит из тысячи файлов!
— Ну а курсы Микрософт, доктор! Какой файл отвечает за работу ядра?
— Вы снова правы, Холмс! Единственный файл, где могут быть такие команды, — это файл NTOSKRNL.EXE. Но и этот файл слишком велик для прямого просмотра. Мы будем очень долго искать нужные операнды.
— Давайте рассмотрим регистр флагов, Ватсон. Точнее, его младшую часть. Там находятся все обычные флаги, которые может менять пользователь. Причем флаг IF Windows обязательно должна установить, даже если пользователь сбросит его. Обратите внимание, что флаги не всегда идут подряд, там есть и константы, которые не меняются. Выпишем воображаемую маску разрешенных разрядов для пользователя. Флаг NT и наши искомые флаги IOPL конечно, запрещены. Что получается, Ватсон?
— У меня получился шифр, вроде пляшущих человечков, Холмс
0000110111010111
— Или 0DD7h, доктор! Это вполне редкое сочетание, друг мой. Попробуйте поискать его Вашим любимым отладчиком в файле NTOSKRNL.EXE.
— Есть, Холмс! По адресу F2C5. Сейчас я посмотрю моим отладчиком то же место в виде команд, а не кодов… Это поразительно, Холмс! Все, как Вы и предсказали!
F2C4 25D70D3E00 AND EAX,003E0DD7
F2C9 0D00020000 OR EAX,00000200
Несомненно, это именно то место, где гасятся и устанавливаются флаги. Устанавливается, кстати, действительно один флаг IF.
— Ну вот, Ватсон, задача и близка к разрешению. Вместо кода 02h по адресу F2CB надо поместить код 32h, тогда установится максимальное значение IOPL.
— Но кроме исправления этого кода, Холмс, надо исправить контрольный код самого файла. Мой отладчик умеет считать его процедурой CheckSumMappedFile. Вот, пожалуйста. Вместо кода 2160C9h по адресу 140h нужно будет записать код 2190C9h.
— Не знал этого, Ватсон. Я думаю, для различных версий Windows адреса и контрольные коды будут разными. Но сам принцип остается одинаковым.
— Но ведь это ужасно, Холмс! Надежность всей операционной системы так сильно зависит всего от двух битов… А что, если главари преступного мира Лондона…
— К сожалению, дорогой доктор, главари преступного мира используют более ужасные вещи: человеческую глупость, жадность и доверчивость. Зачем им менять биты, если можно рассылать по электронной почте письма с уверениями, что вы выиграли миллион, надо только отослать недостающие десять тысяч по указанному адресу… Но вот и звонок! Да, Майк! Нам с Ватсоном потребовалось для решения этой задачи чуть более двадцати минут. Ага, ты тоже знаешь, что нужно установить флаги IOPL. А как ты об этом догадался? А, тебе по телефону объяснил Чарльз Симони, понятно. Но у нас-то с Ватсоном не было возможности выслушать его объяснения. Тебе потребуется изменить в файле NTOSKRNL.EXE байт 02 на байт 32 по адресу F2CB и исправить код по адресу 140 с 2160C9 на 2190C9. Потребуется также искусственно создать исключение в программе, и после возврата из него, доступ к портам, я уверен, будет разрешен. Желаю успеха, Майк!
— Но как же он исправит файл, Холмс? При загрузке компьютера этот файл недоступен даже для администратора!
— Элементарно, Ватсон. Вы же знаете предусмотрительность моего брата. На каждом компьютере у него два одинаковых диска с Windows. Если запустить ее с одного диска, служебные файлы на втором становятся доступными и наоборот.
Вот видите, друг мой, дедуктивный метод опять дал положительный результат, а компьютерный мир при внимательном рассмотрении не кажется таким уж сложным и запутанным.
-----------------------------------------------------------------
(с) не знаю чье



26.01.10 13:13: Перенесено модератором из 'Низкоуровневое программирование' — Valery A. Boronin
26.01.10 14:18: В топку значит в топку. Перенесено модератором из 'Низкоуровневое программирование' — Valery A. Boronin
Re: в топку
От: TarasCo  
Дата: 26.01.10 06:31
Оценка: 1 (1) +1
Да пребудет с тобою сила
графоманство нудная херня топка
Re: Доработка Windows
От: carpenter Голландия  
Дата: 26.01.10 10:30
Оценка: -2
Здравствуйте, baronchik, Вы писали:

B>Это часть статьи, которая была в КСВ год назад, но по-моему уместнее она здесь.

B>-------------------------------------------------------------------------
B>Доработка Windows дедуктивным методом

элементарно ватсон — уменьшение кванта переключения контекста потоков , делается через реестр .
ну и еще пару ключей .
И не надо вырезать гланды через задницу и писать графоманскую статью .
Весь мир — Кремль, а люди в нем — агенты
Re[2]: Доработка Windows
От: Roman Odaisky Украина  
Дата: 26.01.10 13:40
Оценка: +3
Здравствуйте, carpenter, Вы писали:

C>элементарно ватсон — уменьшение кванта переключения контекста потоков , делается через реестр .

C>ну и еще пару ключей .
C>И не надо вырезать гланды через задницу и писать графоманскую статью .

Я когда-то слышал, будто бы для задач реального времени рекомендуется использовать — подумать только — ОС реального времени.
До последнего не верил в пирамиду Лебедева.
Re[3]: Доработка Windows
От: carpenter Голландия  
Дата: 26.01.10 16:39
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, carpenter, Вы писали:


C>>элементарно ватсон — уменьшение кванта переключения контекста потоков , делается через реестр .

C>>ну и еще пару ключей .
C>>И не надо вырезать гланды через задницу и писать графоманскую статью .

RO>Я когда-то слышал, будто бы для задач реального времени рекомендуется использовать — подумать только — ОС реального времени.


А я гдето настраивал связь по сом порту на ящиках , которые были запаяны , без сд юсб и флоппи , и утверждены аш в америке ,поэтому прыжок в право или в лево — расстрел.
И подумать только — выбора у меня другого не было , а что страшнее всего — это несколько лет в режиме 24\7 работает через адаптер на rs485 .
Так что вот не надо иронии , статья то была не о том что надобы СРВ юзать , а о ... ну сами знаете

пысы — а есть вещи еще страшнее (шоп вам спалось плохо ) — некоторые срв работают под винь се — и проги для них на басике пишутся ,
к слову — фирма весьма и весьма известная в автоматизации .
Весь мир — Кремль, а люди в нем — агенты
Re[4]: Доработка Windows
От: Nik_1 Россия  
Дата: 26.01.10 16:47
Оценка:
Здравствуйте, carpenter, Вы писали:
C>пысы — а есть вещи еще страшнее (шоп вам спалось плохо ) — некоторые срв работают под винь се
И она для этого действительно больше подходит, чем ХП.
В ВинСЕ планировщик потоков настолько примитивный, что сделать "непрерываемый поток" там несложно, и для этого даже не придется копаться в недрах оси и чтото модифицировать там
Re[5]: Доработка Windows
От: carpenter Голландия  
Дата: 26.01.10 16:59
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Здравствуйте, carpenter, Вы писали:

C>>пысы — а есть вещи еще страшнее (шоп вам спалось плохо ) — некоторые срв работают под винь се
N_>И она для этого действительно больше подходит, чем ХП.
N_>В ВинСЕ планировщик потоков настолько примитивный, что сделать "непрерываемый поток" там несложно, и для этого даже не придется копаться в недрах оси и чтото модифицировать там

а я и не спорю с вами (хотя се — всетаки софт реалтайм)
а вы знаете что для 2000 винды есть расширение делающее ее хард рт ?
хотя больше всего мне импонирует КНХ
Весь мир — Кремль, а люди в нем — агенты
Re: Доработка Windows
От: March_rabbit  
Дата: 26.01.10 17:24
Оценка: -1
Здравствуйте, baronchik, Вы писали:

B>Это часть статьи, которая была в КСВ год назад, но по-моему уместнее она здесь.

B>-------------------------------------------------------------------------
B>Доработка Windows дедуктивным методом

прикольно. хорошо написано
Re: Доработка Windows
От: Кэр  
Дата: 27.01.10 00:39
Оценка:
Здравствуйте, baronchik, Вы писали:

B>Это часть статьи, которая была в КСВ год назад, но по-моему уместнее она здесь.

B>-------------------------------------------------------------------------
B>Доработка Windows дедуктивным методом

Бла-бла-бла. А вот подпись модератора — отличная
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.