Бывает так, что требуется выполнить свой код в контексте произвольного потока. Либо в своем потоке, но в то время когда поток выполняет чужой код. Например, сборщик мусора может хотеть перехватить управление, даже если поток крутит бесконечный цикл. Один из методов перехвата – использование функций GetThreadContext и SetThreadContext. Эти функции позволяют манипулировать контекстом потока – т.е. состоянием регистров процессора, в том числе и указателем на текущую выполняемую инструкцию. В простейшем случае перехватчик приостанавливает поток, сохраняет текущий контекст, модифицирует EIP, чтобы тот показывал на нужный код, и снова запускает поток. При обратном переключении просто восстанавливается ранее сохраненный контекст и все. Метод простой, эффективный и … неработающий.
Read more…
Обработка исключений, Thread hijacking, Windows, Windows Kernel, Wow64
Довольно интересно сравнить, как устроена консоль в Windows и Unix. Вот упрощенная схема как это работает в Unix:

Консоль в Unix
Read more…
Консоль, Unix, Windows
Представьте, что где-то в коде есть такой кусок:
BOOL Res =
ReadConsole(
GetStdHandle(STD_INPUT_HANDLE),
Buffer,
sizeof(Buffer),
&ReadChars,
NULL);
Теперь, скажем, нам в какой-то момент нужно корректно прервать вызов ReadConsole() (из другого потока). Как это сделать?
Read more…
Консоль, Программирование, Windows
Словечко «AppCompat», появившееся в моем лексиконе за время работы над Wow64, обозначает множество вещей. Чаще всего – геморрой. Иногда – великий геморрой. Происходит оно от «application compatibility» – т.е. совместимость OS с приложениями, она же – «обратная совместимость».
Read more…
совместимость, Windows, Wow64
Я смотрю, что каждое упоминание слова «MinWin» (последним отличился Марк Руссинович на PDC 2009) вызывает много вопросов, главный из которых – «что это такое и зачем оно вообще надо?» Попытаюсь ответить с меру своего понимания. Замечу, что свечку над MinWin я не держал, так что считать мои слова истиной в последней инстанции не стоит.
Read more…
MinWin, Windows
Наконец-то обновилась документация в MSDN. Теперь можно спокойно рассказать, что изменилось в Wow64 с выходом Windows 7.
- Был полностью переписан механизм перенаправления реестра (Registry Redirection).
- Была изменена структура реестра. Многие ключи, перенаправляемые ранее в Wow6432Node, теперь совместно используются 32-х и 64-х разрядными приложениями.
- Механизм синхронизации 32-х и 64-х ключей (Registry Reflection) был с корнем выкорчеван и с позором изгнан из кода Windows.
- В документацию было внесено множество дополнений и исправлений.
Read more…
Windows, Windows 7, Wow64
Recent Comments