<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7877770959383811154</id><updated>2012-01-17T22:09:55.324-08:00</updated><category term='WFP'/><category term='Одесса'/><category term='processes'/><category term='Дни разработчиков'/><category term='Vista'/><category term='wdk'/><category term='Microsoft'/><category term='ndis'/><category term='drivers'/><category term='for fun'/><category term='debugging'/><category term='vmware'/><category term='Visual Studio 2005'/><category term='windows'/><category term='network'/><category term='osdev'/><category term='winamp'/><title type='text'>Блог Александра Лотоцкого</title><subtitle type='html'>Блог посвящен системному программированию. Да и вообще всякой лабуде, представшей моему вниманию.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-3701124236924375760</id><published>2008-12-27T03:49:00.000-08:00</published><updated>2008-12-27T04:08:05.346-08:00</updated><title type='text'>My Firefox Extensions</title><content type='html'>Как почитатель комфортного минимализма (только что придумал термин :) ) люблю использовать возможности расширения предоставляемые программами, при этом совершенно не приемлю всякие там супермегапаки, содержащие в себе много ненужного. &lt;br /&gt;&lt;br /&gt;Гораздо интереснее настроить такие вещи как браузер или, к примеру, миранда самому. &lt;br /&gt;Вот Firefox. Сразу после инсталяции добавляю в него набор extensions делающие его, с моей точки зрения, чрезвычайно приятным:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/220"&gt;FlashGot&lt;/a&gt;&lt;/span&gt; - позволяет скачивать файлы, фильмы, галереи.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://westbyte.com/dm/index.phtml?page=download"&gt;Download Master&lt;/a&gt;&lt;/span&gt; - удобней чем FlashGot для скачивания файлов, но намного лучше выключить родную безобразную интеграция от Download Master и использовать связку FlashGot-&gt;Download Master&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/722"&gt;NoScript&lt;/a&gt;&lt;/span&gt; - позволяет блокировать скрипты на веб ресурсах. Чрезвычайно полезно с точки зрения секьюрности, не так ли ? &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1433"&gt;Extended Statusbar&lt;/a&gt;&lt;/span&gt; - показывает всякую полезненькую информацию вроде скорости загрузки страницы, загруженное количество и т.п..&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5447"&gt;Tab Kit&lt;/a&gt;&lt;/span&gt; - табы в фаервоксе становятся ещё приятнее: разноцветненькие, в несколько рядов, можно закрывать все табы и справа и слева.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1865"&gt;Adblock Plus&lt;/a&gt;&lt;/span&gt; - скажем нет рекламе.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/6647"&gt;HttpFox&lt;/a&gt;&lt;/span&gt; - недавно открыл для себя. Порой интересно глянуть что там у нас бегает по хттп.&lt;br /&gt;&lt;br /&gt;Похоже это все установленные у меня расширение для лиса, если понравится ещё что то - непременно занесу в список )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-3701124236924375760?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/3701124236924375760/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=3701124236924375760' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/3701124236924375760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/3701124236924375760'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/12/my-firefox-extensions.html' title='My Firefox Extensions'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-2292834045290845340</id><published>2008-12-18T11:44:00.001-08:00</published><updated>2008-12-18T14:42:46.300-08:00</updated><title type='text'>Инжект loopback пакетов в WFP</title><content type='html'>Тут возникла задача генерировать входящие TCP пакеты. Для этого имеет смысл использовать FwpsInjectTransportReceiveAsync0, при этом NET_BUFFER должен указывать на IP заголовок. &lt;br /&gt;&lt;br /&gt;И вот я все бился в тщетных попытках так же заинжектить и loopback пакеты. &lt;br /&gt;Но делается несколько иначе, а именно с использованием FwpsInjectNetworkSendAsync0 (ключевое слово send :) )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-2292834045290845340?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/2292834045290845340/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=2292834045290845340' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/2292834045290845340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/2292834045290845340'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/12/loopback-wfp.html' title='Инжект loopback пакетов в WFP'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-1666325850719184112</id><published>2008-12-01T12:19:00.000-08:00</published><updated>2008-12-01T12:42:17.619-08:00</updated><title type='text'>Установка TDI устройств-фильтров вне DriverEntry</title><content type='html'>Как известно, самый удобный сценарий для установки TDI фильтра это загрузка драйвера в группе "TDI" и навешивание устройства при загрузке.&lt;br /&gt;В этом случае наш фильтр будет на месте до создания каких либо соединений с протоколом.&lt;br /&gt;&lt;br /&gt;Но что если мы хотим загрузиться раньше tcpip, и, при этом, не пропустить момент создания соединений с протоколом?&lt;br /&gt;&lt;br /&gt;Тут нам поможет &lt;a href="http://msdn.microsoft.com/en-us/library/ms801249.aspx"&gt;TdiRegisterPnPHandlers&lt;/a&gt;. Причем стоит использовать не &lt;a href="http://msdn.microsoft.com/en-us/library/ms801680.aspx"&gt;BindingHandler&lt;/a&gt; callback ( ибо когда он вызывается с параметром TDI_PNP_OP_PROVIDERREADY, коварный system уже успевает создать соединение), а &lt;a href="http://msdn.microsoft.com/en-us/library/ms801689.aspx"&gt;ClientPnPAddNetAddress&lt;/a&gt;. &lt;br /&gt;Скажем, для tcpip можно смело навешивать фильтр на устройства при добавлении первого IP адреса.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-1666325850719184112?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/1666325850719184112/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=1666325850719184112' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1666325850719184112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1666325850719184112'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/12/tdi-driverentry.html' title='Установка TDI устройств-фильтров вне DriverEntry'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-1183805672568423737</id><published>2008-09-16T06:54:00.000-07:00</published><updated>2008-09-17T04:59:29.313-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wdk'/><category scheme='http://www.blogger.com/atom/ns#' term='drivers'/><title type='text'>Условная компиляция драйверов</title><content type='html'>Возникла задача линковать драйвер с разными сборками библиотеки в зависимости от целевой системы и типа сборки. Вопрос был решен добавлением в source файл следующего содержания:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;!if !defined(DDK_TARGET_OS) || "$(DDK_TARGET_OS)"=="WinLH"&lt;br /&gt;&lt;br /&gt;C_DEFINES=$(C_DEFINES) -DNDIS60=1&lt;br /&gt;&lt;br /&gt;!if "$(DDKBUILDENV)" != "chk"&lt;br /&gt;&lt;br /&gt;!    if $(386)&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    else&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    endif&lt;br /&gt;&lt;br /&gt;!else&lt;br /&gt;&lt;br /&gt;!    if $(386)&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    else&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    endif&lt;br /&gt;&lt;br /&gt;!endif&lt;br /&gt;&lt;br /&gt;!else&lt;br /&gt;&lt;br /&gt;C_DEFINES=$(C_DEFINES) -DNDIS40=1&lt;br /&gt;&lt;br /&gt;!if "$(DDKBUILDENV)" != "chk"&lt;br /&gt;&lt;br /&gt;!    if $(386)&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    else&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    endif&lt;br /&gt;&lt;br /&gt;!else&lt;br /&gt;&lt;br /&gt;!    if $(386)&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    else&lt;br /&gt;TARGETLIBS=$(TARGETLIBS) #path&lt;br /&gt;!    endif&lt;br /&gt;&lt;br /&gt;!endif&lt;br /&gt;&lt;br /&gt;!endif&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Удобная всё же штука, make файлы )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-1183805672568423737?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/1183805672568423737/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=1183805672568423737' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1183805672568423737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1183805672568423737'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/09/blog-post.html' title='Условная компиляция драйверов'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-1126489456074393800</id><published>2008-09-13T11:04:00.000-07:00</published><updated>2008-09-14T10:49:16.934-07:00</updated><title type='text'>WLK и  NDIS IM Logo Testing</title><content type='html'>Пребываючи в умиленном настроении и чудном здравии, улучшаемом последние пол часа отечественным оболонем, подумалось мне рассказать о выпавшем давеча "счастье" столкнуться с тестированием своих любимейших драйверочков при помощи чуднАго Windows Logo Kit 1.1 - 1.2 (пока этой ерундой занимался уже даже версия поменялась).&lt;br /&gt;&lt;br /&gt;Сразу оговорюсь что тестирование NDIS LWF это вообще иной разговор, поэтому только пару слов об Intermediate NDIS drivers.&lt;br /&gt;&lt;br /&gt;Признаться удивление постигло меня, когда не нашел я описание сего процесса в хелпе WLK. Хммм. Ну что ж. На тот момент это был уже мой далеко не первый опыт использования этого милого продукта с характером, поэтому быстро бросил удивляться и полез в уже ставший таки родным Гугел-Мугел (кстати, думаю никогда в жизни я столько не гуглил, до встречи с ЛогоКитом).  Не то что бы он завалил меня результатами, но на ресурсе &lt;a href="http://ndis.blogspot.com/"&gt;http://ndis.blogspot.com/ &lt;/a&gt;встретилось упоминание что Miscrosoft забило на тестирование NDIS IM драйвером и теперь они рассматриваються как Unclassified.&lt;br /&gt;&lt;br /&gt;Как мило, наиболее распространненый на сегодняшний день тип сетевых драйверов оказывается уже канул в лету, и Miscrosoft уже совершенно не заботиться об качестве сиих от сторонних производителей. Я в шоке!&lt;br /&gt;&lt;br /&gt;Ну да ладно, баба з возу - кобыла в курсе дела. Чем меньше тестов, тем проще их пройти.... Да? .... Фиг там...&lt;br /&gt;&lt;br /&gt;Погнали. Набор типичных тестов в submission а ля PnP tests, Stress I/O, Sleep etc. Отлично, спустя неколько часиков имеем результат, 2 fails:&lt;br /&gt;1. INF test&lt;br /&gt;2. Plug And Play test&lt;br /&gt;&lt;br /&gt;INF test - уже давно нагуглил, это проблема WLK, которая почему то не исправляется, но если применить последние фильтры с errata, то в репорте всё видется как ОК ю а зе бест и всё такое.&lt;br /&gt;&lt;br /&gt;Plug And Play test - прополоскал мне моск основательно. Нашел человека, искавшего безуспешно ответ на сей вопрос и  наследившего по всему интернету. Тот оказался добрым человеком и с удовольствием поделился советами по апдейту до последней версии, установки последних фиксов, фильтров. Что ни у него ни у меня ни к чему не привело.&lt;br /&gt;&lt;br /&gt;К счастью, отыскалась &lt;a href="http://tech.groups.yahoo.com/group/discussion-pcausa/message/8238"&gt;переписка &lt;/a&gt;между PCAUSA и благодарным клиентом, которому всё никак не удавалось пройти всю эту верификацию. Причина оказалась в некорекной обработке unnamed devices. Другими словами снова баг WLK, фикситься приложением к репорту инфы "эй парни это Ваш баг, этот тест не считается".&lt;br /&gt;&lt;br /&gt;В итоге имеем на 6 не самых актуальных тестов верификации качества сторонних драйверов, 2 нерабочих. Вот потом и жалуйтесь что подавлающее количество крешей происходит изза 3rd party drivers.&lt;br /&gt;&lt;br /&gt;Я понимаю WLK - продукт гигантский, и, наверняка, не самый приоритетный и парни, скорее всего, не справляются с верификацией программы для верификации :) . Но ё-моё, это мягко говоря, самое сырое что я видел от этой компании, всё же было бы неплохо уделить ему больше внимания.&lt;br /&gt;&lt;br /&gt;От так от. Может будет время и настроение, я немного раскажу о приключениях WLK с LWF и немного их похвалю :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-1126489456074393800?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/1126489456074393800/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=1126489456074393800' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1126489456074393800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1126489456074393800'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/09/wlk-ndis-im-logo-testing.html' title='WLK и  NDIS IM Logo Testing'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-6899108947096128712</id><published>2008-09-12T15:06:00.000-07:00</published><updated>2008-09-18T05:59:34.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ndis'/><category scheme='http://www.blogger.com/atom/ns#' term='drivers'/><title type='text'>Мультиплатформенная установка NDIS драйверов из MSI (Wix)</title><content type='html'>Установка NDIS драйверов это вообще отдельная песня. Microsoft предлагает нам использовать для этого &lt;a href="http://msdn.microsoft.com/en-us/library/ms805265.aspx"&gt;INetCfg API&lt;/a&gt; и приводит примеры его использование в WDK, но, к сожалению, ни сервис менеджер, ни инсталяторы, ни даже Driver Install Framework не умеют устанавливать NDIS драйвера. Правда, если погуглить, то можно найти информацию о том, что версия difx 1.x это делать умела, и в 2.х сохранилась недокументированная возможность, но она ведь недокументирована, а в нашем деле это жирный минус.&lt;br /&gt;&lt;br /&gt;Итак что мы имеем:&lt;br /&gt;1. Недокументированная возможность Difx.&lt;br /&gt;2. Samples из DDK, использующие INetCfg (snetcfg и bindview).&lt;br /&gt;3. &lt;a href="http://sites.google.com/site/alexanderlototsky/Home/NdisInstaller.zip"&gt;Поделки использующие INetCfg наподобие моей&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;В общем весь фокус этой несложной поделки в одалживании кода работы с INetCfg (да не шарахнет молнией меня Microsoft, все права сохранены) небольшого редактирования под свои нужды (наверное таки шарахнет) и оформления в виде dllки для MSI.&lt;br /&gt;&lt;br /&gt;В итоге очень удобно получилось ибо теперь:&lt;br /&gt;1. Можно устанавливать и удалять NDIS IM и NDIS LWF из MSI.&lt;br /&gt;2. Делать это и под x86 и под x64 из под одного и того же MSIника.&lt;br /&gt;&lt;br /&gt;P.S. Кстати прикрутил &lt;a href="http://sites.google.com/site/alexanderlototsky/Home/NdisInstaller.zip?attredirects=0"&gt;туда&lt;/a&gt; возможность установки и обычных драйверов. Знаю что не комильфо, но очень уж понравилась мне мысль использовать один и тот же MSI для разных платформ.&lt;br /&gt;&lt;br /&gt;Пример использования это счастья (ставим passthru) &lt;a href="http://sites.google.com/site/alexanderlototsky/Home/NdisInstallerSample.zip?attredirects=0"&gt;здесь&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-6899108947096128712?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/6899108947096128712/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=6899108947096128712' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/6899108947096128712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/6899108947096128712'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/09/ndis-msi-wix.html' title='Мультиплатформенная установка NDIS драйверов из MSI (Wix)'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-7051181074674520792</id><published>2008-07-15T08:40:00.000-07:00</published><updated>2008-07-15T09:18:41.407-07:00</updated><title type='text'>VirtualPC</title><content type='html'>В поисках возможной замены проприетарной VMWare уже довольно давно нашел для себя &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=04d26402-3199-48a3-afa2-2dc0b40a73b6&amp;amp;displaylang=en"&gt;VirtualPC&lt;/a&gt;. В общем то, учитывая её бесплатность, это совершенно потрясающая утилита от Microsoft для создания виртуальных машин в Windows среде.&lt;br /&gt;&lt;br /&gt;Тем более она обладает некоторыми очень даже приятными особенности:&lt;br /&gt;1. Просто отлично работает с WinDbg.&lt;br /&gt;2. Размер (30 MB).&lt;br /&gt;3. Виртуализация.&lt;br /&gt;4. Поддержка всех Windows (в т.ч. и x64) в качестве хостов.&lt;br /&gt;5. Бесплатность.&lt;br /&gt;&lt;br /&gt;Но, отдельно следует выделить её самые заметные (по крайней мере для меня) недостатки:&lt;br /&gt;1. Отсутствие поддержки гостевых 64битных систем.&lt;br /&gt;2. Отсутствие snapshots.&lt;br /&gt;3. Необходимость дополнительной настройки "продвинутых" сетевых схем.&lt;br /&gt;&lt;br /&gt;К сожалению с 64битными системами проблема нерешаема, остается только надеяться что парни из Microsoft  в будущем добавят эту возможность.&lt;br /&gt;&lt;br /&gt;А вот отсутствие snapshots можно частично компенсировать копируя руками виртуальные диски или с помощью "Settings -&gt; Undo Disks -&gt; Enable undo disks". Если включена эта опция, то при завершении работы с &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=04d26402-3199-48a3-afa2-2dc0b40a73b6&amp;amp;displaylang=en"&gt;VirtualPC&lt;/a&gt; будет задан вопрос сохранить ли изменения или нет.&lt;br /&gt;&lt;br /&gt;С "продвинутыми" сетевыми схемами всё вообще решается в пару кликов. Дело в том что по умолчанию &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=04d26402-3199-48a3-afa2-2dc0b40a73b6&amp;amp;displaylang=en"&gt;VirtualPC&lt;/a&gt; не создает никаких дополнительных адаптеров на хостовой машине и, если нужно сделать "прямое соединение" между хостовой и гостевой ОС, нужно самому позаботиться об их установке.&lt;br /&gt;&lt;br /&gt;Установка дополнительных Loopback Adapters на хостовой машине:&lt;br /&gt;1. "Start -&gt; Settings -&gt; Control Panel -&gt; Add Hardware".&lt;br /&gt;2. Запустится мастер установки нового оборудования. После непродолжительных поисков он спросит установлен ли уже девайс. Выбираем: "Yes, I have already connected the hardware". Next.&lt;br /&gt;3. После "Add a new hardware device". Next.&lt;br /&gt;4. После  "Install hardware that I manually select from a list (Advanced)". Next.&lt;br /&gt;5. После Выбираем в списке "Network Adapters". Next.&lt;br /&gt;7. Manufacturer: "Microsoft", Network Adapter: "Microsoft Loopback Adapter". Next.&lt;br /&gt;&lt;br /&gt;Всё. Теперь единственное что осталось, так это связать созданую сетевую карту с картой виртуальной машины:&lt;br /&gt;VirtualPC-&gt;Settings-&gt;Networking-&gt;Adapter1-&gt;Microsoft Loopback Adapter.&lt;br /&gt;&lt;br /&gt;Похоже получилось замечательное соединение, закрытое от других сетей. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-7051181074674520792?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/7051181074674520792/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=7051181074674520792' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/7051181074674520792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/7051181074674520792'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/07/virtualpc.html' title='VirtualPC'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-8190032159131279775</id><published>2008-02-15T13:24:00.000-08:00</published><updated>2008-02-15T13:46:50.128-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osdev'/><title type='text'>PE Kernel Loader</title><content type='html'>На днях баловался с загрузчиком для ОС. Требованиями были минимум выполняемых действий (остальное должно выполняться уже в ядре) и удобный и готовый к страничной адресации формат загружаемого ядра.&lt;br /&gt;После некоторых размышлений пришел к такому варианту:&lt;br /&gt;1. в первичном загрузчике считываем в память вторичный загрузчик и ядро. Прыгаем во вторичный загрузчик;&lt;br /&gt;2. по адресу 2k (0x800) размещаем GDT;&lt;br /&gt;3. переходим в защищенный режим (куда уж без него то :) );&lt;br /&gt;4. загружаем PE ядро. Прыгаем в него.&lt;br /&gt;&lt;br /&gt;Довольно удачный компромис, на мой взгляд. И загрузчик получился довольно простой и ядро я теперь могу писать в любимой Visual Studio, как почти обычное 32бит приложение.&lt;br /&gt;Недостатки компилятора от Майкрософт для такого рода занятий это уже вопрос второй ;)&lt;br /&gt;&lt;br /&gt;Основной код:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;include 'struct.inc'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;include 'pe.inc'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;include 'boot.inc'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;PAGE_SIZE = 0x1000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;GDT_OFFSET = 0x800&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;; Global Descriptor Table&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;GDT:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    dd    0,0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    db    0FFh, 0FFh, 00h, 00h, 00h, 10011010b, 11001111b, 00    ; code&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    db    0FFh, 0FFh, 00h, 00h, 00h, 10010010b, 11001111b, 00    ; data&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;GDT_size equ $-GDT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;GDTR dw GDT_size-1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;     dd GDT_OFFSET     &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;loader_entry:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; open address line A20&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    in     al, 92h&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    or     al, 2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    out  92h, al&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; copy GDT to the 2nd kb RAM&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; это удобно, поскольку в первых 2к расположим IDT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  cx, GDT_size&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  di, GDT_OFFSET&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  si, GDT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    rep  movsb&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    lgdt fword [GDTR]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; disable all ints&lt;br /&gt;  ; в том числе и немаскируемые&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    cli&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    in     al, 70h&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    or     al, 80h&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    out  70h, al&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; jump to PM&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  eax, cr0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    or     al, 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  cr0, eax&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; load new selector to the CS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    jmp  00001000b:.protected_entry&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;use32&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;  .protected_entry:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; init selectors&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  ax,00010000b&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  ds, ax&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  es, ax&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  ss, ax&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ; simple PE loader for loading PE kernel. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  ebx, kernel_image   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    cmp  word [ebx + IMAGE_DOS_HEADER.e_magic], IMAGE_DOS_SIGNATURE&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    jne  .image_error&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    add  ebx, [ebx + IMAGE_DOS_HEADER.e_lfanew]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    cmp  dword [ebx + IMAGE_NT_HEADERS.Signature], IMAGE_NT_SIGNATURE&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    jne  .image_error&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  dx, [ebx + IMAGE_NT_HEADERS.FileHeader.NumberOfSections]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  eax, ebx ; PE header&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    add  ebx, sizeof.IMAGE_NT_HEADERS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    cld&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;  @@:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  ecx, [ebx + IMAGE_SECTION_HEADER.SizeOfRawData]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  esi, [ebx + IMAGE_SECTION_HEADER.PointerToRawData]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    add  esi, kernel_image&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  edi, [ebx + IMAGE_SECTION_HEADER.VirtualAddress]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    add  edi, [eax + IMAGE_NT_HEADERS.OptionalHeader.ImageBase] ; ImageBase  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    rep  movsb  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    add  ebx, sizeof.IMAGE_SECTION_HEADER&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    dec  dx &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    jnz  @b&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    mov  ebx, [eax + IMAGE_NT_HEADERS.OptionalHeader.ImageBase]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    add  ebx, [eax + IMAGE_NT_HEADERS.OptionalHeader.AddressOfEntryPoint]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    jmp  ebx ; Jump to kernel entry point&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;  .image_error:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;    jmp  $&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;kernel_image:&lt;br /&gt;; вот это собственно наше ядро&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;file 'kernel.exe'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Хороший &lt;a href="http://wasm.ru/article.php?article=ia32int"&gt;пример кода fasm для перевода в PM и обработки прерываний &lt;/a&gt;сделал и описал Great на wasm.ru.&lt;br /&gt;Пример похожего решения, но &lt;a href="http://lowlevel.ru/?namespace=osdev25"&gt;для gcc и nasm&lt;/a&gt; можно найти на классном сайте lowlevel.ru&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-8190032159131279775?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/8190032159131279775/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=8190032159131279775' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/8190032159131279775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/8190032159131279775'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2008/02/pe-kernel-loader.html' title='PE Kernel Loader'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-1790538951587365115</id><published>2007-12-13T18:47:00.000-08:00</published><updated>2007-12-25T13:00:40.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='WFP'/><title type='text'>Реинжект на  FWPM_LAYER_INBOUND_IPPACKET_V4</title><content type='html'>В WFP есть одна маленькая хитрость для реинжекта входящих пакетов на сетевом уровне: необходимо что бы данные начинались с IP заголовка, а не сразу за ним как это происходит в буферах по дефолту.&lt;br /&gt;&lt;br /&gt;Т.е. где то в коде (до или после клонирования) нужно вызвать NdisRetreatNetBufferDataStart на размер IP заголовка. Это будет выглядеть приблизительно следующим образом:&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;NdisRetreatNetBufferDataStart( pNetBuffer,&lt;br /&gt;    &lt;span style="font-weight: bold;"&gt; inMetaValues-&gt;ipHeaderSize,&lt;/span&gt;  //размер IP заголовка&lt;br /&gt;     0, NULL );&lt;br /&gt;...&lt;br /&gt;FwpsAllocateCloneNetBufferList0(&lt;br /&gt;         pNetBufferList,&lt;br /&gt;         NULL,&lt;br /&gt;         NULL,&lt;br /&gt;         0,&lt;br /&gt;         &amp;amp;pClonedNetBufferList);&lt;br /&gt;&lt;br /&gt;FwpsInjectNetworkReceiveAsync0( ... , pClonedNetBufferList, ... );&lt;br /&gt;&lt;br /&gt;P.S. Как показала практика лучше делать NdisRetreatNetBufferDataStart до клонирования, иначе можно получить совсем не то что ожидается.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-1790538951587365115?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/1790538951587365115/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=1790538951587365115' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1790538951587365115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1790538951587365115'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/12/fwpmlayerinboundippacketv4.html' title='Реинжект на  FWPM_LAYER_INBOUND_IPPACKET_V4'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-6249840424543899448</id><published>2007-11-26T13:38:00.000-08:00</published><updated>2007-12-13T08:54:25.964-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='for fun'/><category scheme='http://www.blogger.com/atom/ns#' term='winamp'/><title type='text'>Плагины к Winamp</title><content type='html'>Нашел на диске свои плагины к Winamp, делал когда-то для удобства. Выложил на народе с сырцами.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://winkernel.narod.ru/projects/gen_sendto.zip"&gt;SendTo&lt;/a&gt; (&lt;a href="http://www.winamp.com/plugins/details/154866"&gt;screenshot&lt;/a&gt;) - позволяет закидывать файлы в выбранную папку прямо с плейлиста.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://winkernel.narod.ru/projects/gen_shutdown.zip"&gt;Shutdown&lt;/a&gt; (&lt;a href="http://www.winamp.com/plugins/details/171292"&gt;screenshot&lt;/a&gt;) - вырубает комп по достижению конца плейлиста.&lt;br /&gt;&lt;br /&gt;P.S. &lt;a href="http://www.foobar2000.org/"&gt;foobar2000 &lt;/a&gt;рулит :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-6249840424543899448?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/6249840424543899448/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=6249840424543899448' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/6249840424543899448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/6249840424543899448'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/11/winamp.html' title='Плагины к Winamp'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-1542132678327034466</id><published>2007-11-26T09:56:00.000-08:00</published><updated>2007-11-29T02:48:51.547-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Одесса'/><category scheme='http://www.blogger.com/atom/ns#' term='Дни разработчиков'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Дни разработчиков от Microsoft 2007. Одесса.</title><content type='html'>Сегодня с &lt;a href="http://win-dev.blogspot.com/"&gt;Андреем  &lt;/a&gt;посетили это знаменательное событие, которое проходило в отеле "Валентина". Конечно, когда пришлось вставать в жуткую рань (находился этот отель на другом конце города), в невыспавшуюся голову то и дело приходили мысли на кой черт сдалось мне это событие со всей его знаменательностью. Само собой на регистрацию и утренний кофе тайм мы опоздали (в первую очередь благодаря мне), так что по приходу нас сразу же ждал средних размеров зал с сотрудником Майкрософт на сцене.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_aD-XnVZVdiM/R0sSFOfFdkI/AAAAAAAAB78/64PGxlZtnOU/s1600-h/1126111432.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_aD-XnVZVdiM/R0sSFOfFdkI/AAAAAAAAB78/64PGxlZtnOU/s320/1126111432.JPG" alt="" id="BLOGGER_PHOTO_ID_5137219680943306306" border="0" /&gt;&lt;/a&gt;Да, во время регистрации нам задарили бейджики, ручку и блокнот с соответсвующей эмблемкой, а так же диск с Visual Studio 2008 b2. Эх знал бы, то не скачивал бы :). Ещё анкетку, которая затем, заполнившись, обменивалась на футболку с надписью Silverlight.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_aD-XnVZVdiM/R0sTGufFdmI/AAAAAAAAB8M/3aY4hH8_Ew8/s1600-h/1126203739.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_aD-XnVZVdiM/R0sTGufFdmI/AAAAAAAAB8M/3aY4hH8_Ew8/s320/1126203739.JPG" alt="" id="BLOGGER_PHOTO_ID_5137220806224737890" border="0" /&gt;&lt;/a&gt;На повестке дня стояли следующие темы:&lt;br /&gt;- silverlight&lt;br /&gt;- Team Foundation Server&lt;br /&gt;- SQL Server 2008&lt;br /&gt;- VS 2008&lt;br /&gt;&lt;br /&gt;Приятно заметить что после двух лекций (к сожалению я не записал имена ведущих) был такой очень миленький перерывчик с чаем, кофе, будербродами и прочей снедью в виде пирожных. В общем классно.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_aD-XnVZVdiM/R0sSVOfFdlI/AAAAAAAAB8E/w97YDitPkaI/s1600-h/1126114152.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_aD-XnVZVdiM/R0sSVOfFdlI/AAAAAAAAB8E/w97YDitPkaI/s320/1126114152.JPG" alt="" id="BLOGGER_PHOTO_ID_5137219955821213266" border="0" /&gt;&lt;/a&gt;Относительно содержания докладов тоже всё было в порядке. Интересно, с пользой, с юмором. Мило и ненавязчиво были политы грязью "неверные" а ля IBM, PHP, линуксоиды. В общем дух мелкомягких витал в воздухе :).&lt;br /&gt;В принципе узнал много нового о продуктах ближайшего будущего, например тот же silverlight, это очень симпатичный веб клиент, облегченный родственник .net framework. Новая VS 2008 это просто блеск, все добавленные возможности относящиеся к анализу кода, тестированию, профилированию, оценке и тп. даже сложно перечислить. Уже поставил себе - балдею, осталось 109 дней. Team Foundation Server и SQL Server 2008 разработчики тоже не в потолок плевали.&lt;br /&gt;Кстати, было акцентировано внимание на всесторонней поддержке Майкрософтом opensource community. В принципе ничего нового, слыхали такое и на channel 9, но всё равно чуть не прослезился от осознания бескрайнего альтруизма компании.&lt;br /&gt;&lt;br /&gt;Единственный существенный недостаток всего мероприятия , это время проведения, всё таки в выходной было бы лучше и народу было бы проще прийти. Но, с какой стороны не посмотри, а всё таки очень даже замечательный получился семинарчик,  молодцы ребята, толково сделали.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-1542132678327034466?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/1542132678327034466/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=1542132678327034466' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1542132678327034466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1542132678327034466'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/11/microsoft-2007.html' title='Дни разработчиков от Microsoft 2007. Одесса.'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_aD-XnVZVdiM/R0sSFOfFdkI/AAAAAAAAB78/64PGxlZtnOU/s72-c/1126111432.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-8413386590785592882</id><published>2007-11-19T02:42:00.000-08:00</published><updated>2007-12-13T08:55:23.766-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='for fun'/><title type='text'>О грустном...</title><content type='html'>Осенний ветер унёс вдаль&lt;br /&gt;Мечты, надежды и стремленья.&lt;br /&gt;Как будто старый календарь,&lt;br /&gt;Порвал любовь без сожаленья.&lt;br /&gt;&lt;br /&gt;Как будто не было тех дней,&lt;br /&gt;Когда для счастья нужна была&lt;br /&gt;Твоя рука в руке моей,&lt;br /&gt;Лишь две руки в огромном мире.&lt;br /&gt;&lt;br /&gt;Зачем ты, ветер, разметал&lt;br /&gt;Тот нежный взгляд и губ касанье?&lt;br /&gt;Разрушил мир, убил любовь,&lt;br /&gt;Развеял сердца замиранье.&lt;br /&gt;&lt;br /&gt;Холодный и промозглый ветер&lt;br /&gt;Так можно долго проклинать,&lt;br /&gt;Виня его во всем на свете,&lt;br /&gt;Хоть он ни в чем не виноват.&lt;br /&gt;&lt;br /&gt;(с) Лотоцкий. Осень 2007.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-8413386590785592882?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/8413386590785592882/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=8413386590785592882' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/8413386590785592882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/8413386590785592882'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/11/blog-post.html' title='О грустном...'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-7419749258544267535</id><published>2007-11-02T17:25:00.000-07:00</published><updated>2007-11-02T17:50:35.350-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><title type='text'>Распространение приложений скомпилированных с Visual Studio 2005</title><content type='html'>Должно быть каждый, кто пытался запустить приложение скомпилированное с Visual Studio 2005 на чистой машине, был неприятно удивлен сообщением об ошибке. Причиной является невозможность найти библиотеки времени исполнения, указанные в встраиваемом по умолчанию манифесте.&lt;br /&gt;&lt;br /&gt;Исходя из этого, у нас есть два основных метода распространения приложения:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Скомпилировать приложение со статической библиотекой времени исполнения. &lt;/span&gt;&lt;br /&gt;Для этого следует:&lt;br /&gt;- отключить манифест (Project Options -&gt; Linker -&gt; Manifest File -&gt; Generate Manifest = No );&lt;br /&gt;- указать статическую библиотеку времени исполнения (Project Options -&gt; С\С++ -&gt; Code Generation -&gt; Runtime Library = Multi-threaded /MT ).&lt;br /&gt;&lt;br /&gt;Недостатками этого метода является увеличенный размер приложения (теперь внутри него необходимые функции из библиотеки) и то что Microsoft всё же рекомендует его избегать .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Поставлять с приложением необходимую библиотеку.&lt;/span&gt;&lt;br /&gt;Одно из решений предлагаемых Microsoft - использовать Visual C++ Runtime Libraries весом в 2.6 МБ, которые можно скачать  &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=32bc1bee-a3f9-4c13-9c99-220b62a191ee&amp;amp;displaylang=en"&gt;здесь&lt;/a&gt;, либо найти в Visual Studio (%Путь к папке с  VS2005%\SDK\v2.0\BootStrapper\Packages\vcredist_x86).&lt;br /&gt;&lt;br /&gt;Более подробно о рекомендациях Microsoft можно прочесть в статье &lt;a href="http://msdn2.microsoft.com/en-us/library/ms235316%28VS.80%29.aspx"&gt;Choosing a Deployment Method.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-7419749258544267535?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/7419749258544267535/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=7419749258544267535' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/7419749258544267535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/7419749258544267535'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/11/visual-studio-2005.html' title='Распространение приложений скомпилированных с Visual Studio 2005'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-5985535262606374912</id><published>2007-10-26T09:54:00.000-07:00</published><updated>2007-11-20T04:37:35.481-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='processes'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Приоритет процесса при запуске</title><content type='html'>Раз уж зашла речь о приоритетах, то сразу скажу о возможности установки приоритета процесса при запуске средствами Windows.&lt;br /&gt;&lt;br /&gt;Как известно Windows по умолчанию запускает процессы с приоритетом Normal, который можно повысить или понизить во время выполнения, к примеру, из TaskManager.&lt;br /&gt;Если же мы хотим установить базовый приоритет при старте приложения, то можно воспользоваться командой start:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd /c start /[приоритет] application.exe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;где, &lt;span style="font-weight: bold;"&gt;[приоритет] =  LOW,  BELOWNORMAL,  NORMAL,  ABOVENORMAL,  HIGH,  REALTIME&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Что бы избавить себя от раздражающих задержек при одновременном просмотре фильма и игры, для игры был создан ярлык следующего содержания:&lt;br /&gt;&lt;br /&gt;%windir%\system32\cmd.exe /c start /low d:\games\lineage2\system\la2.exe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-5985535262606374912?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/5985535262606374912/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=5985535262606374912' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/5985535262606374912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/5985535262606374912'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/10/blog-post_26.html' title='Приоритет процесса при запуске'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-1461797781767051099</id><published>2007-10-26T09:44:00.000-07:00</published><updated>2007-10-26T09:53:29.697-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Приоритет процесса в vmware</title><content type='html'>К своему стыду вынужден признаться: уже сколько пользуюсь vmware, а до сих пор не знал что в ней можно указать низкий приоритет, дабы не ощущать паралельные тормоза на машине.&lt;br /&gt;&lt;br /&gt;В общем если вдруг так случилось что кто то ещё не знает об этой фиче, то даю наводку: &lt;span style="font-weight: bold;"&gt;главное меню -&gt; VM -&gt; Settings... -&gt; Options -&gt; Advanced.&lt;/span&gt;&lt;br /&gt;Там можно найти настройки приоритета для активного и неактивного случая.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-1461797781767051099?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/1461797781767051099/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=1461797781767051099' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1461797781767051099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/1461797781767051099'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/10/vmware.html' title='Приоритет процесса в vmware'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-195529461228138078</id><published>2007-10-25T13:21:00.001-07:00</published><updated>2007-10-25T13:21:35.152-07:00</updated><title type='text'>XML в ядре</title><content type='html'>Существует замечательная мультиплатформеная библиотека для работы с XML именуемая &lt;a href="http://expat.sourceforge.net/"&gt;The Expat XML Parser&lt;/a&gt;.Так вот оказалось что малой кровью её можно заставить работать и в ядре. Ниже я приведу шаги которые были применены для сборки отладочной версии статической библиотеки с драйвером.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Изменение кода Expat проекта в Visual Studio:&lt;/span&gt;&lt;br /&gt;Нам нужно переопределить используемые CRTшные функции отсутсвующие в ядре. Это:&lt;br /&gt;free&lt;br /&gt;malloc&lt;br /&gt;realloc&lt;br /&gt;assert&lt;br /&gt;memcmp&lt;br /&gt;&lt;br /&gt;Для примера это можно сделать включив в проект файл со следующим содержанием:&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;#define _X86_&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;#include &lt;ntddk.h&gt;&lt;/ntddk.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;void  __cdecl free(void * _Memory)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;        if( _Memory )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;            ExFreePoolWithTag(_Memory, 'test');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;void * __cdecl malloc( size_t _Size)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    return (void*)ExAllocatePoolWithTag(NonPagedPool, _Size, '&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;' );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;void * __cdecl realloc( void * _Memory,  size_t _NewSize)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;        if( _Memory )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;            ExFreePoolWithTag(_Memory, 'myma');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    return (void*)ExAllocatePoolWithTag(NonPagedPool, _NewSize, '&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;' );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;int __cdecl memcmp(const void * _Buf1, const void * _Buf2, size_t _Size)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    return (int)RtlCompareMemory( _Buf1, _Buf2, _Size );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;void __cdecl assert( unsigned char something )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Кстати, для вышеприведенного кода нужно установить соглашение о вызове __stdcall. Это связано с тем что в прототипе &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ExFreePoolWithTag это не указано явно.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Изменение настроек Expat проекта в Visual Studio:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. &lt;/span&gt;C/C++ --&gt; General --&gt; Debug Information Format = Program Database (/Zi)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. &lt;/span&gt;C/C++ --&gt; CodeGeneration --&gt; Basic Runtime Checks = Default&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.&lt;/span&gt; Подключить ntoskrnl.lib&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. &lt;/span&gt;Установить __stdcall для файла с переопределенными функциями (если используется &lt;span style="color: rgb(51, 51, 153);"&gt;ExFreePoolWithTag);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;&lt;span style="color: rgb(51, 0, 51);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Код драйвера:&lt;/span&gt;&lt;br /&gt;Если предполагается копмилировать статическую библиотеку (а это предполагается :) ), то нужно продефайнить:&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;#define XML_BUILDING_EXPAT 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ниже приведены заглушки которые можно реализовать (а можно пользоваться теми, что были переопределены выше):&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;..............&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;void * __cdecl MyMalloc(size_t size)&lt;br /&gt;{&lt;br /&gt; return ExAllocatePoolWithTag( NonPagedPool, size, '&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;' );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void * __cdecl MyRealloc(void *ptr, size_t size)&lt;br /&gt;{&lt;br /&gt;     if( ptr )&lt;br /&gt;         ExFreePoolWithTag(ptr, 'myma');&lt;br /&gt;  return ExAllocatePoolWithTag( NonPagedPool, size, '&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;' );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void __cdecl MyFree(void *ptr)&lt;br /&gt;{&lt;br /&gt;     if( ptr )&lt;br /&gt;         ExFreePoolWithTag(ptr, '&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;');&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;NTSTATUS DriverEntry(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    IN PDRIVER_OBJECT pDriverObject,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    IN PUNICODE_STRING pusRegistryPath&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    XML_Memory_Handling_Suite memsuite;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;...................&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;myMemSuite.malloc_fcn = (void *(__stdcall *)(size_t))&amp;MyMalloc;&lt;br /&gt;myMemSuite.realloc_fcn = (void *(__stdcall *)(void *,size_t))&amp;MyRealloc;&lt;br /&gt;myMemSuite.free_fcn = (void (__stdcall *)(void *))&amp;MyFree;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;  parser = XML_ParserCreate_MM(NULL, &amp;amp;memsuite, NULL);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;..........................&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;sources драйвера:&lt;br /&gt;&lt;/span&gt;TARGETLIBS=XmlParser.lib&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 51);"&gt;Пример библиотеки и вызывающего драйвера постараюсь выложить в ближайшее время.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Вот и всё. Вся эта морока с соглашениями о вызове нужна была что бы свести к минимуму вносимые изменения в код библиотеки.&lt;br /&gt;&lt;br /&gt;Свежую версию Expat всегда можно найти на &lt;a href="http://expat.sourceforge.net/"&gt;http://expat.sourceforge.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-195529461228138078?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/195529461228138078/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=195529461228138078' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/195529461228138078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/195529461228138078'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/10/xml.html' title='XML в ядре'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-7044452810451591101</id><published>2007-10-25T13:19:00.000-07:00</published><updated>2007-10-25T13:20:21.819-07:00</updated><title type='text'>MAC адреса в Vista WFP (входящие пакеты)</title><content type='html'>Как известно в висте появилась чудесная и действительно удобная технология для анализа и редактирования IP трафика: WFP. Естественно, поскольку WFP охватывает только tcp/ip стэк (а это сетевой и транспортный уровень), то для работы с MAC адресом Microsoft предлагает поспользоваться старыми добрыми NDIS драйверами.&lt;br /&gt;&lt;br /&gt;Но не всё так плохо в королевстве датском, оказывается что в случае с входящими пакетами на network inbound layer имеет смысл не делать оффсет на ip header, а взглянуть на 14 байт сразу перед ним. Там обнаруживается ethernet header для этого пакета, и что приятно обнаруживается всегда.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-7044452810451591101?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/7044452810451591101/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=7044452810451591101' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/7044452810451591101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/7044452810451591101'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/10/mac-vista-wfp.html' title='MAC адреса в Vista WFP (входящие пакеты)'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-407251687648816645</id><published>2007-10-25T13:18:00.000-07:00</published><updated>2007-10-25T13:19:22.655-07:00</updated><title type='text'>Парочка полезных инструментов в разработке драйверов.</title><content type='html'>Как оказалось для разработки и тестирования драйверов помимо WDK и Debugging tools существует целый ряд утилит, причем довольно приятные в использовании и в большинстве своём бесплатные. Всего за день уже настолько пристрастился к ним что даже не знаю как раньше обходился :).&lt;br /&gt;Итак встречаем:&lt;br /&gt;prefast - static analyze (поставляется вместе с WDK)&lt;br /&gt;BullseyeCoverage - Run-Time analyze (хороша, хоть и не бесплатна. есть здесь http://www.bullseye.com/)&lt;br /&gt;verifier - testing tool (отличная вещь, поставляется вместе с виндовз.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-407251687648816645?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/407251687648816645/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=407251687648816645' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/407251687648816645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/407251687648816645'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/10/blog-post.html' title='Парочка полезных инструментов в разработке драйверов.'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7877770959383811154.post-2487506794731051960</id><published>2007-10-25T13:17:00.001-07:00</published><updated>2007-10-25T13:17:51.764-07:00</updated><title type='text'>How To configure Visual Studio 2005 for compiling drivers</title><content type='html'>As you should be know microsoft officially doesn`t support integration DDK with Visual Studio. So you can use Visual Studio editor (or any other editor) for make sources, but for compiling you should use the DDK build utility. Of course it is not very conveniently because you must always switch between editor and console window, but most terrible that developer spend much time for find lines with error in editor.&lt;br /&gt;&lt;br /&gt;There are several ways to compile drivers with visual studio. Most of them you can find in nice Mark Roddy article "Windows Driver Build Methods and Tools" here: http://www.wd-3.com/archive/HowBuild.htm&lt;br /&gt;&lt;br /&gt;Mark offers use some third party utilities. That`s good, but I will show more handly way (IMHO): how to configure and use Visual Studio for compiling drivers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Setup Visual Studio 2005 (I guess it can be any other VS version)&lt;br /&gt;&lt;br /&gt;2. Setup DDK (or WDK)&lt;br /&gt;&lt;br /&gt;3. Add to VS pathes to DDK include files and libs.&lt;br /&gt;&lt;br /&gt;4. Create new empty "Win32 project" and add source file (e.g. init.c).&lt;br /&gt;&lt;br /&gt;5. Configure project properties (All Configurations)&lt;/strong&gt;&lt;br /&gt;5.1. C\C++ - General - Debug Information Format = Program Database (/Zi)&lt;br /&gt;5.2. C\C++ - Preprocessor - Preprocessor Definitions = _X86_ [comment: add also DBG for Debug config]&lt;br /&gt;5.3. C\C++ - Code Generation - Enable C++ Exceptions = No&lt;br /&gt;5.4. C\C++ - Code Generation - Basic Runtime Checks = Default&lt;br /&gt;5.5. C\C++ - Code Generation - Buffer Security Check = No (/GS-)&lt;br /&gt;5.6. C\C++ - Advanced - Calling Convention = __stdcall (/Gz)&lt;br /&gt;5.7. C\C++ - Advanced - Compile As = Compile as C Code (/TC) [comment: of course if you are going to use plain C]&lt;br /&gt;&lt;br /&gt;5.8. Linker - General - Output File = $(OutDir)\$(ProjectName).sys&lt;br /&gt;5.9. Linker - General - Enable Incremental Linking = Default&lt;br /&gt;5.10. Linker - Input - Additional Dependencies = ntoskrnl.lib hal.lib $(NOINHERIT) [comment: you should add&lt;br /&gt;&lt;br /&gt;needed libs here e.g. ntoskrnl.lib hal.lib]&lt;br /&gt;5.11. Linker - Input - Ignore All Default Libraries = Yes (/NODEFAULTLIB)&lt;br /&gt;5.12. Linker - Manifest File - Generate Manifest = No&lt;br /&gt;5.13. Linker - System - SubSystem = Native (/SUBSYSTEM:NATIVE)&lt;br /&gt;5.14. Linker - System - Driver = Driver (/DRIVER)&lt;br /&gt;5.15. Linker - Advanced - Entry Point = DriverEntry&lt;br /&gt;5.16. Linker - Advanced - Base Address = 0x10000&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6. OK. Have done. Now you can test it with simple code, e.g.:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;#include "ntddk.h"&lt;br /&gt;&lt;br /&gt;NTSTATUS&lt;br /&gt;DriverEntry(&lt;br /&gt;PDRIVER_OBJECT DriverObject,&lt;br /&gt;PUNICODE_STRING RegistryPath&lt;br /&gt;)&lt;br /&gt;{&lt;br /&gt;return STATUS_UNSUCCESSFUL;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have founded some mistakes or misundestoods please let me know.&lt;br /&gt;&lt;br /&gt;Good Luck guys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7877770959383811154-2487506794731051960?l=winkernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://winkernel.blogspot.com/feeds/2487506794731051960/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7877770959383811154&amp;postID=2487506794731051960' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/2487506794731051960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7877770959383811154/posts/default/2487506794731051960'/><link rel='alternate' type='text/html' href='http://winkernel.blogspot.com/2007/10/how-to-configure-visual-studio-2005-for.html' title='How To configure Visual Studio 2005 for compiling drivers'/><author><name>Alexander Lototsky</name><uri>http://www.blogger.com/profile/07400721947003766062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://lh5.google.com/alexander.lototsky/R0Qmk-fFb2I/AAAAAAAABrE/Zi0PmrmtGQE/s144/avatar.JPG'/></author><thr:total>0</thr:total></entry></feed>
