Archive

Posts Tagged ‘Windows Kernel’

РИТ++ 2011: Сетевая подсистема Windows глазами разработчика.

April 26th, 2011 5 comments

Слайды моего доклада на РИТ++ 2011: Сетевая подсистема Windows глазами разработчика. Спасибо за внимание. ;-)

MD5: 9d095bbc517f564758ec98ca779fadd4
SHA1: 46bebb8991f5b977ffcf978f277eb82b3cc08140

PDF версия: Сетевая подсистема Windows глазами разработчика.

MD5: 74676d09b0fdf5fc87182eb814b9d997
SHA1: 8bd1aa1f3db39ac5fab1ede4bbb4b43a9a91e11e

РИТ++, секция «RootConf».

April 2nd, 2011 4 comments

Меня пригласили выступить на конференции РИТ++ 2011, которая пройдет в Москве в конце апреля. Предварительная тема доклада: «Сетевая подсистема Windows глазами разработчика. Краткий, неполный и, в основном, неверный обзор. :-) » Я собираюсь рассказать о том, как работает ядерная часть сетевой подсистемы, как данные попадают в user mode и что с ними происходит по пути. Заходите на огонёк.

NDIS, !ndiskd и DML.

February 6th, 2011 11 comments

На работе понадобилось написать драйвер для сетевой карты. Я этого раньше никогда не делал и вообще с NDIS дела не имел. А тут такая возможность! Делюсь впечатлениями.

В общем и целом NDIS мне понравился. Интерфейсы довольно логичны, хотя и многочисленны. Взаимосвязь между разными компонентами в большинстве случаев после недолгой медитации становится довольно очевидной. Все структуры снабжены заголовком с сигнатурой, версией и размером, что, помимо заботы об обратной совместимости, означает меньше проблем с отладкой. При необходимости нужную структуру можно просто найти в памяти.

Read more…

«Угон» потоков.

May 4th, 2010 13 comments

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

Read more…

За последние две-три недели узнал много нового…

March 27th, 2008 4 comments

За последние две-три недели узнал много нового про архитектуру amd64. Во-первых, я наткнулся сначала на документ, а затем на аналогичный раздел в MSDN, где толково описаны не только соглашения о вызовах (этого добра везде навалом), но и дано детальное описание того, как должен выглядеть стек функции, как происходит раскрутка стека, что такое и зачем нужны пролог и эпилог функции. Полезный документ, особенно если нужно разобраться как работает stack unwinder.

Read more…