<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Not a kernel guy</title><subtitle type="html">… in the Windows kernel team</subtitle><id>http://blogs.technet.com/not-a-kernel-guy/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.technet.com/not-a-kernel-guy/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-03-04T01:24:28Z</updated><entry><title>Exception Chain Validation (ECV, SEHOP).</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/10/11/exception-chain-validation-ecv-sehop.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/10/11/exception-chain-validation-ecv-sehop.aspx</id><published>2009-10-11T03:46:52Z</published><updated>2009-10-11T03:46:52Z</updated><content type="html">&lt;p&gt;Structure Exception Handler (SEH) overwrite - один из популярных способов передачи управления на вредоносный код, внедренный через ту или иную уязвимость (обычно – переполнение буфера). Иными словами, это один из способов подхватить заразу на свой компьютер через непропатченый браузер просто зайдя куда-нибудь с &lt;a href="http://www.thehun.net"&gt;http://www.thehun.net&lt;/a&gt; почитать Пушкина на сон грядущий.&lt;/p&gt; Windows Vista SP1/Server 2008 и более поздние версии системы включают механизм защиты от него – &lt;a href="http://blogs.technet.com/srd/archive/2009/02/02/preventing-the-exploitation-of-seh-overwrites-with-sehop.aspx"&gt;Exception Chain Validation (ECV) или Structured Exception Handler Overwrite Protection (SEHOP)&lt;/a&gt;. К сожалению ECV по умолчанию выключен на клиентских версиях OS из-за несовместимости с некоторыми версиями Cygwin, Skype и программ защищенных с помощью Armadillo. Впрочем, Skype, начиная с 4-ой версии совместим с ECV и, вполне возможно, Cygwin и Armadillo тоже уже исправлены (тут я не в курсе, просто предполагаю).   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;В общем, если вам нравиться Пушкин :-) (да и если не нравиться – то же), то стоит включить ECV. В Knowledge Base опубликована статья, поясняющая как это сделать – &lt;a href="http://support.microsoft.com/?scid=kb%3Bru%3B956607&amp;amp;x=21&amp;amp;y=17"&gt;KB956607&lt;/a&gt;:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;В меню Пуск выберите пункт Выполнить, введите команду regedit и нажмите клавишу ВВОД. &lt;/li&gt;    &lt;li&gt;Найдите следующий раздел реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\DisableExceptionChainValidation      &lt;p&gt;Примечание: Если не удалось найти параметр DisableExceptionChainValidation в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ выполните действия, описанные ниже, чтобы создать его.&lt;/p&gt;      &lt;ol&gt;       &lt;li&gt;Щелкните правой кнопкой мыши раздел kernel, выберите команду Создать, а затем — Параметр DWORD. &lt;/li&gt;        &lt;li&gt;Введите DisableExceptionChainValidation и нажмите клавишу ВВОД. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Дважды щелкните элемент DisableExceptionChainValidation. &lt;/li&gt;    &lt;li&gt;Присвойте параметру DisableExceptionChainValidation значение 0, чтобы включить его, а затем нажмите кнопку ОК.      &lt;br /&gt;Примечание: Значение 1 отключает этот параметр реестра. Значение 0 включает его. &lt;/li&gt;    &lt;li&gt;Закройте редактор реестра. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Дополнительно замечу, что ECV защищает только 32-х битные приложения, включая те, что выполняются под Wow64 на 64-х битных системах. 64-х битный код не подвержен этому типу атаки.&lt;/p&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/10/10/647"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3285998" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Windows" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Windows/default.aspx" /><category term="Wow64" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Wow64/default.aspx" /><category term="Обработка исключений" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_1E0431044004300431043E0442043A043004_+_380441043A043B044E04470435043D0438043904_/default.aspx" /><category term="SEHOP" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/SEHOP/default.aspx" /><category term="ECV" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/ECV/default.aspx" /></entry><entry><title>Приколы нашего городка.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/09/15/3281073.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/09/15/3281073.aspx</id><published>2009-09-15T08:53:40Z</published><updated>2009-09-15T08:53:40Z</updated><content type="html">&lt;p&gt;Ехал сегодня на работу – увидел на дереве аккуратно прикрепленный листок с крупно распечатанной надписью «Micro$oft hates you». :-) Прямо на 156-ой, почти в самом центре главного кампуса. Во как!&lt;/p&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/09/14/644"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3281073" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Microsoft" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Microsoft/default.aspx" /><category term="Всякая всячина" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_120441044F043A0430044F04_+_320441044F04470438043D043004_/default.aspx" /></entry><entry><title>Wow64 поддерживает аппаратное ускорение в DirectX.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/08/17/wow64-directx.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/08/17/wow64-directx.aspx</id><published>2009-08-17T19:21:06Z</published><updated>2009-08-17T19:21:06Z</updated><content type="html">&lt;p&gt;Вопрос из почты:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Ты не подскажешь, есть ли hardware acceleration through DirectX for Wow64 processes? В Windows Internals написано, что его нет, но другие источники говорят, что есть (и большинство игр продолжают собирать as 32-bit, и они работают в 64-bit Windows).      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Вот несколько ссылок, которые выдает поиск на msdn.microsoft.com:&lt;/p&gt;   &lt;p&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;«&lt;a href="http://support.microsoft.com/kb/896456"&gt;Overview of the compatibility considerations for 32-bit programs on 64-bit versions of Windows Server 2003 and Windows XP&lt;/a&gt;». В разделе «Intel Architecture 32-bit Execution Layer (IA-32 EL)» есть секция «Graphics support»:       &lt;p&gt;&amp;#160;&lt;/p&gt;      &lt;p&gt;&lt;a href="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/08/wow64_d3d.png"&gt;&lt;img class="size-full wp-image-632" title="wow64_d3d" alt="DirectX support in Wow64 on Itanium" src="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/08/wow64_d3d.png" width="438" height="223" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Power Point презентация о внутренней архитектуре Wow64: «&lt;a href="http://download.microsoft.com/download/3/a/9/3a9ad58f-5634-4cdd-8528-c78754d712e8/28-DW04040_WINHEC2004.ppt"&gt;WoW64 Internal Architecture&lt;/a&gt;» содержит вот такой слайд:       &lt;p&gt;&amp;#160;&lt;/p&gt;      &lt;p&gt;&lt;a href="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/08/wow64_feature_support.png"&gt;&lt;img class="size-full wp-image-629" title="wow64_feature_support" alt="Wow64 Feature Support on Win64" src="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/08/wow64_feature_support.png" width="550" height="227" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Документ «&lt;a href="http://download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/wow64_bestprac.docx"&gt;Best Practices for WOW64&lt;/a&gt;» утверждает, что «Microsoft DirectX® hardware acceleration APIs are not supported on IPF.» IPF раcшифровывается как «Itanium Processor Family».       &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Итого: на x64 аппаратное ускорение есть; на Itanium – нет. На практике это означет, что ускорение есть. Поди еще найди тот Itanium...&lt;/p&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/08/17/628"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3274238" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Wow64" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Wow64/default.aspx" /><category term="DirectX" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/DirectX/default.aspx" /></entry><entry><title>Что нового в Windows 7: изменения в Wow64.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/06/10/windows-7-wow64.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/06/10/windows-7-wow64.aspx</id><published>2009-06-10T08:49:42Z</published><updated>2009-06-10T08:49:42Z</updated><content type="html">&lt;p&gt;Наконец-то обновилась документация в MSDN. Теперь можно спокойно рассказать, что изменилось в Wow64 с выходом Windows 7.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Был полностью переписан &lt;a href="http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx"&gt;механизм перенаправления реестра (Registry &lt;em&gt;Redirection&lt;/em&gt;)&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Была изменена структура реестра. Многие ключи, перенаправляемые ранее в Wow6432Node, теперь совместно используются 32-х и 64-х разрядными приложениями. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa384235(VS.85).aspx"&gt;Механизм синхронизации 32-х и 64-х ключей (Registry &lt;em&gt;Reflection&lt;/em&gt;)&lt;/a&gt; был с корнем выкорчеван и с позором изгнан из кода Windows. :-) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx"&gt;В документацию&lt;/a&gt; было внесено множество дополнений и исправлений. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;/p&gt; Начну, пожалуй, с перенаправления реестра. Как известно, 64-х битные версии Windows поддерживают два разных представления реестра. Обращения 32-х разрядных приложений к «HKEY_LOCAL_MACHINE\Software» и некоторым другим ключам перенаправляются в «HKEY_LOCAL_MACHINE\Software\Wow6432Node». 64-х разрядные приложения обращаются к «HKEY_LOCAL_MACHINE\Software» напрямую. Таким образом, 32-х битные приложения частично изолируются от 64-х разрядных компонент.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;В какой-то момент, разработчики Wow64 столкнулись с проблемой. Некоторые из перенаправляемых ключей должны на самом деле использоваться 32-х и 64-х разрядными приложениями совместно. Для решения этой проблемы был придуман механизм синхронизации (в соответствии со сложными правилами) 32-х и 64-х копий ключей. Он был назван «Registry Reflection».&lt;/p&gt;  &lt;p&gt;Почему при этом не было решено отключить перенаправление для этих ключей – загадка. Вероятно, это объясняется особенностями реализации. Никаких разумных «архитектурных» соображений на этот счет нам найти не удалось.&lt;/p&gt;  &lt;p&gt;Время показало, что идея использовать Registry Reflection была не слишком хороша. Реестр фундаментально не может обеспечить 100% надежно копирование данных из одного ключа в другой (как и 100% надежность любой другой операции). Но если для «нормальных» операций приложение может получить код ошибки и корректно обработать его, то в случае Registry Reflection приложение решительно ничего не может сделать с кодом ошибки операции копирования.&lt;/p&gt;  &lt;p&gt;Помимо этого механизм Registry Reflection:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Не определяет метод разрешения конфликтов в случае, когда модифицируются обе копии ключа. &lt;/li&gt;    &lt;li&gt;Конфликтует с механизмом поддержки транзакций в некоторых сценариях. &lt;/li&gt;    &lt;li&gt;Создаёт сложности при раздельной установке 32-х и 64-х битных компонент. &lt;/li&gt;    &lt;li&gt;Плохо справляется с большим количеством одновременно открытых ключей. &lt;/li&gt;    &lt;li&gt;Создает сложности во время завершения процесса. &lt;/li&gt;    &lt;li&gt;И т.д. и т.п. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Вдоволь намучавшись с сопровождением этого монстра, мы пришли к заключению, что проблему нужно решать кардинально. Результат – механизм Registry Reflection был полностью убран из Windows 7.&lt;/p&gt;  &lt;p&gt;Для обеспечения обратной совместимости с Vista было сделано следующее:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Большинство ключей, которые синхронизировались с помощью Registry Reflection, были исключены из списка перенаправляемых ключей. Иными словами вместо раздельных копий ключа, 32-х и 64-х разрядные приложения теперь совместно используют один и тот же ключ. Полный перечень всех ключей можно найти тут: &lt;a href="http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Некоторые приложения обращаются к 32-х битным ключам по их «физическому» имени, с использованием Wow6432Node в пути, не смотря на то, что это некорректно. Вместо этого следует использовать &lt;a href="http://msdn.microsoft.com/en-us/library/aa384129(VS.85).aspx"&gt;флаг KEY_WOW64_32KEY&lt;/a&gt;. Тем не менее, в механизм перенаправления был обучен распознавать Wow6432Node в пути и интерпретировать наличие Wow6432Node в пути как попытку открыть 32-х разрядный ключ. &lt;/li&gt;    &lt;li&gt;COM runtime был основным компонентом завязанным на Registry Reflection. В него были внесены изменения, позволяющие ему обходится без Registry Reflection. Внешние интерфейсы COM runtime при этом затронуты не были. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Тестирование этих изменений показало, что существующие приложения очень хорошо чувствуют себя в новом окружении, не замечая подмены. При этом заметно уменьшилось время, затрачиваемое приложениями на операции с реестром. Так, при установке Microsoft Office 2003 суммарное время всех операций с реестром сократилось примерно на 30%.&lt;/p&gt;  &lt;p&gt;По итогам этой работы была пересмотрена и обновлена вся публичная документация, относящаяся к Wow64:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa384249(VS.85).aspx"&gt;Running 32-bit Applications&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/WHDC/SYSTEM/PLATFORM/64BIT/WOW64_BESTPRAC.MSPX"&gt;Best Practices for WOW64&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/whdc/system/platform/64bit/RegReflect.mspx"&gt;Registry Reflection in Windows&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/06/09/571"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3252858" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Windows" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Windows/default.aspx" /><category term="Wow64" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Wow64/default.aspx" /><category term="Windows 7" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Microsoft и РФ обсудили фиксированные цены на ПО для госзакупок.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/06/06/Microsoft3.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/06/06/Microsoft3.aspx</id><published>2009-06-06T02:06:00Z</published><updated>2009-06-06T02:06:00Z</updated><content type="html">&lt;p&gt;В комментариях &lt;a href="http://blog.not-a-kernel-guy.com/2009/06/04/565#comments" mce_href="http://blog.not-a-kernel-guy.com/2009/06/04/565#comments"&gt;к предыдущему посту&lt;/a&gt; шла речь о том, что ФАС, прижимая монополистов, заботится о потребителях. Ну что ж, &lt;a href="http://top.rbc.ru/economics/05/06/2009/308275.shtml" mce_href="http://top.rbc.ru/economics/05/06/2009/308275.shtml"&gt;одного такого потребителя&lt;/a&gt; можно назвать уже сейчас (выделение мое):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Министр связи и массовых коммуникаций РФ Игорь Щеголев обсудил с президентом Microsoft International Жан-Филиппом Куртуа вопрос об установлении &lt;b&gt;фиксированных цен&lt;/b&gt; на программное обеспечение для &lt;b&gt;госзакупок&lt;/b&gt; в России.

    &lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Обе новости разделяет пара дней. Прямо какое-то мистическое совпадение. :-)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Министр также отметил, что при внедрении в России этого механизма целесообразно устанавливать цены в рублях. По мнению И.Щеголева, Microsoft имеет достаточные возможности &lt;b&gt;компенсации колебаний курса рубля&lt;/b&gt; к доллару с использованием хедж-фондов.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я, кстати, думал, что в России цены и так в рублях. Или там такой специальный курс рубля планируется использовать? ;-)&lt;/p&gt;

&lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/06/05/568" mce_href="http://blog.not-a-kernel-guy.com/2009/06/05/568"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3250987" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Microsoft" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Microsoft/default.aspx" /><category term="Бюрократия" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_11044E0440043E043A0440043004420438044F04_/default.aspx" /></entry><entry><title>ФАС возбудила дело против Microsoft</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/06/04/Microsoft2.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/06/04/Microsoft2.aspx</id><published>2009-06-04T21:00:00Z</published><updated>2009-06-04T21:00:00Z</updated><content type="html">&lt;p&gt;С &lt;a href="http://habrahabr.ru/blogs/lenta/61374/" mce_href="http://habrahabr.ru/blogs/lenta/61374/"&gt;Хабра&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Признаки нарушения антимонопольного законодательства со стороны корпорации Microsoft усматриваются в экономически или технологически не обоснованном прекращении производства и поставок на территорию Российской Федерации операционных систем (ОС) для персональных компьютеров (ПК) семейства «Microsoft Windows» коробочных версий — дистрибутивов ОС «Windows XP» и сокращении поставок данной ОС в качестве предустановленной при продаже нового компьютера, а также в установлении различных цен на ОС «Windows XP». 
    &lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Прелесть какая! :-)&lt;/p&gt;

&lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/06/04/565" mce_href="http://blog.not-a-kernel-guy.com/2009/06/04/565"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3250456" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Microsoft" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Microsoft/default.aspx" /><category term="Бюрократия" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_11044E0440043E043A0440043004420438044F04_/default.aspx" /></entry><entry><title>Отладка на кофейной гуще.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/23/3244839.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/23/3244839.aspx</id><published>2009-05-23T09:52:57Z</published><updated>2009-05-23T09:52:57Z</updated><content type="html">&lt;p&gt;&lt;img class="alignleft size-full wp-image-533" title="mall_fortunecrystalball" alt="mall_fortunecrystalball" src="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/05/mall_fortunecrystalball.gif" width="80" height="80" /&gt;При определённой сноровке, можно отлаживать код прямо из любимого почтового клиента. На днях пришло письмо с вопросом. Некоторое приложение, будучи установленным в каталог отличный от “Program Files”, при запуске вызывало появление окна &lt;a href="http://en.wikipedia.org/wiki/User_Account_Control"&gt;UAC&lt;/a&gt; с требованием повысить привилегии. Приложение работало нормально, в случае, если оно было установлено в “Program Files”. Как такое может быть?&lt;/p&gt; Надо сказать, что разработчики подсистем Windows, которые обеспечивают обратную совместимость, вплотную приблизились к созданию искусственного интеллекта. :-) Windows умеет распознавать и, что самое главное, исправлять на ходу многие некорректные с точки зрения системы действия программ. Заметная часть этого «интеллекта» задействована для обеспечения совместимости с приложениями, которые не умеют работать без прав локального администратора, т.е. при включенном UAC.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Предположение, что программа делает что-то нехорошее, - пытается создать файл в «Program Files» например, вскоре частично подтвердилось. Автор приложения обнаружил, что оно пытается создать ключ реестра “HKEY_CLASSES_ROOT\.foobar”. Интересная особенность всех ключей в ветке “HKEY_CLASSES_ROOT” состоит в том, что эти ключи … не существуют. “HKEY_CLASSES_ROOT” – это виртуальный ключ, объединение двух других ключей: “HKEY_LOCAL_MACHINE\Software\Classes” и “HKEY_CURRENT_USER\Software\Classes”. Соответственно попытка создать ключ “HKEY_CLASSES_ROOT\.foobar” может, при определённых условиях, быть интерпретирована как попытка создания “HKEY_LOCAL_MACHINE\Software\Classes\.foobar”, что уже попахивает криминалом.&lt;/p&gt;  &lt;p&gt;Далее, существует такая штука как &lt;a href="http://blog.not-a-kernel-guy.com/2006/10/13/84"&gt;LUA Virtualization&lt;/a&gt;. Если коротко, то это механизм как бы позволяющий приложению писать в ключи и каталоги, защищенные от записи. На самом деле, система на лету подменяет оригинальный ключ доступной на запись копией, локальной для этого конкретного приложения.&lt;/p&gt;  &lt;p&gt;Соединив эти три кусочка информации, можно примерно догадаться что произошло. Хотя точно сказать, что именно произошло, я не берусь. Скорее всего, программа попыталась создать “HKEY_LOCAL_MACHINE\Software\Classes\.foobar”. Эта попытка была перехвачена механизмом LUA Virtualization. В случае, когда исполняемый файл находился в “Program Files”, механизм виртуализации делал свое черное дело, подсовывая приложению локальную копию ключа. В другом случае виртуализация не срабатывала, приводя к тому, что запрещенная операция перехватывалась уже логикой активации UAC.&lt;/p&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/05/22/532"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3244839" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Отладка" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_1E0442043B04300434043A043004_/default.aspx" /><category term="Windows" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Windows/default.aspx" /><category term="UAC" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/UAC/default.aspx" /></entry><entry><title>Как отлаживать код незнакомых приложений?</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/18/3242725.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/18/3242725.aspx</id><published>2009-05-18T08:48:58Z</published><updated>2009-05-18T08:48:58Z</updated><content type="html">&lt;p style="text-align: right"&gt;… легко постукивая кувалдой.&lt;/p&gt;  &lt;p&gt;Вопрос из почты:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Я пытаюсь приспособить windbg не для отладки, а для реверсинга незнакомых приложений, и постоянно упираюсь в то, что для удобной работы нужны символы, иначе windbg (в юзермоде, конечно) ничем не сильнее того же OllyDbg. Но, я надеюсь, что не все так плохо с этим отладчиком, и это у меня руки кривые.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt; Если символьной информации нет, то &lt;em&gt;частично&lt;/em&gt; заменить её можно только хорошенько проштудировав бинарный код. WinDbg таким, вроде бы, не занимается. В идеальном случае хотелось бы, чтобы отладчик умел все, что умеет &lt;a href="http://www.hex-rays.com/idapro/"&gt;IDA Pro&lt;/a&gt; и при этом имел расширяемость как у WinDbg. Хотя если судить по сайту, последние версии IDA имеют встроенный отладчик.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Я не в курсе насколько хорошо OllyDbg анализирует код и насколько это помогает при отладке. Если он заметно удобнее WinDbg, то логичнее всего было бы им и пользоваться.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Не могли бы Вы мне ответить на простенький вопрос, как корректно брякнуться на энтрипойнт приложения которому нет символов? Без танцев с бубном. Может, плугин какой есть?      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Корректно - вот так: ;-)&lt;/p&gt;  &lt;pre&gt;&lt;code class="no-highlight"&gt;bp &amp;lt;address&amp;gt; или ba &amp;lt;address&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Адрес в общем случае без танцев с бубном не находится, даже в случае IDA. Обычно поиски начинаются с крупиц информации из шагов для воспроизведения сценария. Программа обращается к определенному ключу в реестре? Ставим точку останова на RegCreateKeyEx/RegOpenKeyEx. Происходит определённое исключение? Ловим именно это исключение. После нескольких итераций находятся конкретные места в коде приложения, в которых выполняются интересующие нас действия.&lt;/p&gt;

&lt;p&gt;В общем, &lt;span style="text-decoration: line-through"&gt;ложки&lt;/span&gt; серебряной пули не существует.&lt;/p&gt;

&lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/05/17/521"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3242725" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Отладка" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_1E0442043B04300434043A043004_/default.aspx" /></entry><entry><title>Расширение для WinDbg: «Outline».</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/17/windbg-outline.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/17/windbg-outline.aspx</id><published>2009-05-17T08:49:39Z</published><updated>2009-05-17T08:49:39Z</updated><content type="html">&lt;p&gt;Мне частенько приходится разбираться с отладкой исключений, произошедших из-за порчи стека или на фоне порчи стека. В таких случаях обычно приходится трассировать стек вручную. Дело это муторное, поэтому я решил написать расширение для WinDbg, несколько облегчающее эту задачу.&lt;/p&gt; На данный момент реализована только одна команда «!fnframe». Она показывает структуру стекового фрейма для произвольной функции: локальные переменные и параметры, сохраненные регистры, указатель фрейма. На x64 помимо символов используется сгенерированная компилятором &lt;a href="http://msdn.microsoft.com/en-us/library/ms794374.aspx"&gt;unwind information&lt;/a&gt;, что обеспечивает большую достоверность результатов. Поддержка Itanium пока в планах.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Скачать:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.not-a-kernel-guy.com/wp-content/uploads/outline/1.0.1/x86/outline.dll"&gt;Outline 1.0.1 x86&lt;/a&gt; (SHA1: 6dd2edb49940ac4d48016e49fb5c6ffe4d53d56d) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.not-a-kernel-guy.com/wp-content/uploads/outline/1.0.1/x64/outline.dll"&gt;Outline 1.0.1 x64&lt;/a&gt; (SHA1: 47b6c5e9b63c783126cc823e979a8d2882c6492f) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Примеры:&lt;/p&gt;  &lt;p&gt;x86 сборка Far Manager 2.0 с включенным frame pointer omission:&lt;/p&gt;  &lt;pre&gt;&lt;code class="no-highlight"&gt;0:000:x86&amp;gt; .load outline
0:000:x86&amp;gt; !fnframe far!wmain
 Start of frame               --&amp;gt; -0x78
   -0x78   Saved registers      : 0x10 bytes
   -0x64   strViewName          : class UnicodeString, 0x4 bytes
   -0x60   strEditName          : class UnicodeString, 0x4 bytes
   -0x5c   StartLine            : int, 0x4 bytes
   -0x58   CntDestName          : int, 0x4 bytes
   -0x54   DestNames            : class UnicodeString [2], 0x8 bytes
   -0x4c   RectoreConsole       : int, 0x4 bytes
   -0x48   StartChar            : int, 0x4 bytes
   -0x44   __ConsoleRestore     : class TConsoleRestore, 0x24 bytes
   -0x20   buf                  : char [15], 0xf bytes
   +0x0    Return address       : 0x4 bytes
   +0x4    Argc                 : int, 0x4 bytes
   +0x8    Argv                 : wchar_t **, 0x4 bytes
 End of frame                 --&amp;gt; +0xc
0:000:x86&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;x64 сборка того же Far Manager 2.0:&lt;/p&gt;

&lt;pre&gt;&lt;code class="no-highlight"&gt;0:000&amp;gt; !fnframe far!wmain
 Start of frame               --&amp;gt; +0x0
   +0x0    rcx home             : 0x8 bytes
   +0x8    rdx home             : 0x8 bytes
   +0x10   r8 home              : 0x8 bytes
   +0x18   r9 home              : 0x8 bytes
   +0x40   strEditName          : class UnicodeString, 0x8 bytes
   +0x48   strViewName          : class UnicodeString, 0x8 bytes
   +0x50   DestNames            : class UnicodeString [2], 0x10 bytes
   +0x60   __ConsoleRestore     : class TConsoleRestore, 0x30 bytes
   +0x98   buf                  : char [15], 0xf bytes
   +0xb0   r15                  : 0x8 bytes
   +0xb8   r14                  : 0x8 bytes
   +0xc0   r13                  : 0x8 bytes
   +0xc8   r12                  : 0x8 bytes
   +0xd0   rdi                  : 0x8 bytes
   +0xd8   rsi                  : 0x8 bytes
   +0xe0   rbp                  : 0x8 bytes
   +0xe8   Return address       : 0x8 bytes
 End of frame                 --&amp;gt; +0xf0
   +0xf0   Argc                 : int, 0x4 bytes
   +0xf8   Argv                 : wchar_t **, 0x8 bytes
   +0x100  rbx                  : 0x8 bytes
0:000&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Публичные символы не описывают ntdll!KiUserExceptionDispatcher (точка входа диспетчера исключений пользовательского режима), но включенная в бинарный файл unwind information дает кое-какое представление об этой функции:&lt;/p&gt;

&lt;pre&gt;&lt;code class="no-highlight"&gt;0:000&amp;gt; !fnframe ntdll!KiUserExceptionDispatcher
 Start of frame               --&amp;gt; +0x0
   +0x0    rcx home             : 0x8 bytes
   +0x8    rdx home             : 0x8 bytes
   +0x10   r8 home              : 0x8 bytes
   +0x18   r9 home              : 0x8 bytes
   +0x90   rbx                  : 0x8 bytes
   +0xa0   rbp                  : 0x8 bytes
   +0xa8   rsi                  : 0x8 bytes
   +0xb0   rdi                  : 0x8 bytes
   +0xd8   r12                  : 0x8 bytes
   +0xe0   r13                  : 0x8 bytes
   +0xe8   r14                  : 0x8 bytes
   +0xf0   r15                  : 0x8 bytes
   +0x200  xmm6                 : 0x10 bytes
   +0x210  xmm7                 : 0x10 bytes
   +0x220  xmm8                 : 0x10 bytes
   +0x230  xmm9                 : 0x10 bytes
   +0x240  xmm10                : 0x10 bytes
   +0x250  xmm11                : 0x10 bytes
   +0x260  xmm12                : 0x10 bytes
   +0x270  xmm13                : 0x10 bytes
   +0x280  xmm14                : 0x10 bytes
   +0x290  xmm15                : 0x10 bytes
   +0x590  Machine frame        : 0x28 bytes
 End of frame                 --&amp;gt; +0x5b8
0:000&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/05/16/512"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3242544" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Отладка" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_1E0442043B04300434043A043004_/default.aspx" /><category term="Outline" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Outline/default.aspx" /></entry><entry><title>Windows Internals, Fifth Edition</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/13/windows-internals-fifth-edition.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/13/windows-internals-fifth-edition.aspx</id><published>2009-05-13T20:57:14Z</published><updated>2009-05-13T20:57:14Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/microsoft_press/archive/2009/05/11/rtm-d-today-windows-internals-fifth-edition.aspx"&gt;5-ая редакция книги Windows Internals&lt;/a&gt; отправлена в печать. Ура, товарищи! :-) Я там скромно присутствую в списке рецензентов... вместе с доброй половиной kernel team. ;-)&lt;/p&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/05/13/509"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3240442" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Windows Internals book" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Windows+Internals+book/default.aspx" /></entry><entry><title>Холивар на марше – ошибка в Windows 7 RC x86.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/13/windows-7-rc-x86.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/05/13/windows-7-rc-x86.aspx</id><published>2009-05-13T08:56:30Z</published><updated>2009-05-13T08:56:30Z</updated><content type="html">&lt;p&gt;В Windows 7 RC x86 нашли ошибку. Довольно неприятную, надо сказать. В связи с чем в комментариях к &lt;a href="http://blogs.zdnet.com/Bott/?p=1003"&gt;заметке на ZDnet&lt;/a&gt; разгорелся очередной холивар. Почитайте, зело интересно.&lt;/p&gt;  &lt;p&gt;Пойти, что ли, в NASA работать? Писать софт, который управляет вспомогательным клапаном резервной задвижки дублирующей системы озонирования воздуха в кабине &lt;a href="http://www.nasa.gov/mission_pages/constellation/orion/index.html"&gt;Ориона&lt;/a&gt;. Зато 100% доказанная корректность кода и никаких программных ошибок. Только сбои в железе и космические лучи. Ляпота! И никто не капает на мозги, не кричит «О боже, там баг!». Ммм… ;-)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/05/developersarebornbrave.jpg"&gt;&lt;img class="size-full wp-image-502" title="developersarebornbrave_small" alt="Developers are born brave." src="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/05/developersarebornbrave_small.jpg" width="550" height="258" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/05/12/501"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3240100" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Windows" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Windows/default.aspx" /></entry><entry><title>Даже и не думайте пользоваться функцией Wow64DisableWow64FsRedirection!</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/04/03/wow64disablewow64fsredirection.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/04/03/wow64disablewow64fsredirection.aspx</id><published>2009-04-03T20:41:03Z</published><updated>2009-04-03T20:41:03Z</updated><content type="html">&lt;p&gt;Просто удивительно, насколько опасной может быть функция &lt;a href="http://msdn.microsoft.com/en-us/library/aa365743(VS.85).aspx"&gt;Wow64DisableWow64FsRedirection&lt;/a&gt;. Эта функция позволяет временно отключить перенаправление файловой системы в Wow64. Еще более удивительно, что лишь малая доля разработчиков соглашается менять свой код, даже после подробного объяснения, в чем, собственно, проблема.&lt;/p&gt; В чем состоит опасность? Во-первых, при отключенном перенаправлении файловой системы не работает загрузка 32-х битных системных библиотек. Они, как правило, загружаются из system32 и только перенаправление ввода/вывода спасает ситуацию. Во-вторых, и это самое главное, разработчик очень редко полностью контролирует весь ввод-вывод на участке между Wow64DisableWow64FsRedirection и &lt;a href="http://msdn.microsoft.com/en-us/library/aa365745(VS.85).aspx"&gt;Wow64RevertWow64FsRedirection&lt;/a&gt;.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;«Как это возможно?» - спросите вы, «ведь все три строчки кода – вот они, как на ладони». Очень просто. Вот неполный список случаев, когда может происходить неявная загрузка кода:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Неявный вызов &lt;a href="http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx"&gt;LoadLibrary&lt;/a&gt;. Многие функции Win32 вызывают LoadLibrary. Один из примеров – Multimedia API. То же самое делают и другие библиотеки, особенно те, что поддерживают плагины.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/151kt790.aspx"&gt;Отложенная загрузка библиотек (Delayed Loading)&lt;/a&gt; – это хороший способ ускорить загрузку приложения. Проблема только в том, что загрузка может случиться в любой, в том числе &lt;a href="http://blog.not-a-kernel-guy.com/2008/03/30/301"&gt;самый неподходящий момент&lt;/a&gt;. Все приложения, так или иначе, используют отложенную загрузку, так как ею пользуются ключевые системные библиотеки.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Так называемые «DLL import forwarders» позволяют сказать загрузчику, что функция «Foo», экспортируемая из «Foo.dll», на самом деле реализована в «Bar.dll». В результате при попытке получить адрес функции «Foo», загрузчик попытается загрузить «Bar.dll». Например:      &lt;pre&gt;&lt;code class="no-highlight"&gt;link /dump /exports c:\Windows\System32\kernel32.dll | findstr forwarded
          1    0          AcquireSRWLockExclusive (forwarded to NTDLL.RtlAcquireSRWLockExclusive)
          2    1          AcquireSRWLockShared (forwarded to NTDLL.RtlAcquireSRWLockShared)
         14    D          AddVectoredContinueHandler (forwarded to NTDLL.RtlAddVectoredContinueHandler)
         15    E          AddVectoredExceptionHandler (forwarded to NTDLL.RtlAddVectoredExceptionHandler)
         70   45          CancelThreadpoolIo (forwarded to NTDLL.TpCancelAsyncIoOperation)
         86   55          CloseThreadpool (forwarded to NTDLL.TpReleasePool)
         87   56          CloseThreadpoolCleanupGroup (forwarded to NTDLL.TpReleaseCleanupGroup)
         88   57          CloseThreadpoolCleanupGroupMembers (forwarded to NTDLL.TpReleaseCleanupGroupMembers)
         89   58          CloseThreadpoolIo (forwarded to NTDLL.TpReleaseIoCompletion)
         90   59          CloseThreadpoolTimer (forwarded to NTDLL.TpReleaseTimer)
         91   5A          CloseThreadpoolWait (forwarded to NTDLL.TpReleaseWait)
         92   5B          CloseThreadpoolWork (forwarded to NTDLL.TpReleaseWork)
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;Взаимодействие с COM объектами очень часто приводит к загрузке дополнительных библиотек. К примеру, это быть вызов &lt;a href="http://msdn.microsoft.com/en-us/library/ms682521(VS.85).aspx"&gt;QueryInterface&lt;/a&gt; или любой другой вызов возвращающий указатель на COM интерфейс. 

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Внедрение кода в другой процесс – обычное дело в Windows. Внедренный код может вызвать LoadLibrary в самый неподходящий момент. В этом случае виноват не ваш код, но с точки зрения пользователя упадет именно ваше приложение. 
    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;и т.д. и т.п. 
    &lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Проблема еще и в том, что код, использующий Wow64DisableWow64FsRedirection, в общем-то, работает в большинстве случаев. Так что разработчик не видит проблемы до тех пор, пока код не будет запущен в незнакомом окружении на машине заказчика. Или пока не выйдет новая версия ОС, используемой библиотеки или клавиатурного шпиона, которая вдруг начала загружать код в том месте, где раньше ничего такого не происходило.&lt;/p&gt;

&lt;p&gt;PS. А когда можно использовать Wow64DisableWow64FsRedirection? Единственный поддерживаемый сценарий – вызов &lt;a href="http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx"&gt;CreateFile&lt;/a&gt;, обернутый в Wow64DisableWow64FsRedirection и Wow64RevertWow64FsRedirection.&lt;/p&gt;

&lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/04/03/482"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3222112" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Wow64" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Wow64/default.aspx" /><category term="Программирование" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_1F0440043E043304400430043C043C04380440043E04320430043D0438043504_/default.aspx" /></entry><entry><title>“This program requires Windows 2000 or newer operating system”.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/03/26/this-program-requires-windows-2000-or-newer-operating-system.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/03/26/this-program-requires-windows-2000-or-newer-operating-system.aspx</id><published>2009-03-26T06:21:00Z</published><updated>2009-03-26T06:21:00Z</updated><content type="html">&lt;p&gt;Когда видишь такое сообщение на Windows 7, это означает, что
разработчики приложения допустили ошибку либо в коде проверки версии
операционной системы, либо, что менее вероятно, - в самом сообщении.
Второй вариант возможен, если программа действительно не должна
работать в новых версиях операционной системы. В обоих случаях, с точки
зрения пользователя это чистой воды баг. То ли в коде, то ли в дизайне,
то ли в маркетинговом отделе…&lt;/p&gt;

&lt;p&gt;В любом случае обходятся такие ограничения элементарно просто.
Достаточно открыть окно свойств исполняемого файла или ярлыка, выбрать
вкладку «совместимость» и в выпадающем списке выбрать нужную версию
операционной системы. При следующем запуске, программа будет запущена
вместе с набором заплаток, которые в том числе подменяют номер версии
системы:&lt;/p&gt;

&lt;div class="fig"&gt;&lt;img src="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/03/appcompat.png" mce_src="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/03/appcompat.png" alt="appcompat" title="appcompat" class="alignnone size-full wp-image-475" width="419" height="533"&gt;&lt;/div&gt;

&lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/03/25/474"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3218290" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Маленькие хитрости" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_1C0430043B0435043D044C043A0438043504_+_45043804420440043E04410442043804_/default.aspx" /></entry><entry><title>.NET toolset для Boost Build V2.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/03/09/net-toolset-boost-build-v2.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/03/09/net-toolset-boost-build-v2.aspx</id><published>2009-03-09T23:24:00Z</published><updated>2009-03-09T23:24:00Z</updated><content type="html">&lt;p&gt;Специально для любителей &lt;a href="http://www.boost.org/doc/tools/build/index.html" mce_href="http://www.boost.org/doc/tools/build/index.html"&gt;Boost.Build V2&lt;/a&gt; – написал &lt;a href="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/03/dotnet.jam" mce_href="http://blog.not-a-kernel-guy.com/wp-content/uploads/2009/03/dotnet.jam"&gt;toolset&lt;/a&gt;, добавляющий поддержку C# и VB.NET компиляторов из .NET Framework. Toolset автоматически распознает все установленные версии .NET Framework:&lt;/p&gt;  &lt;pre&gt;&lt;code class="no-highlight"&gt;using dotnet : all ;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
Исполняемые файлы и библиотеки собирается как обычно с помощью правил “exe” и “lib”. Ссылки на системные библиотеки указываются через &amp;lt;find-shared-library&amp;gt;; путь к ним – с помощью &amp;lt;library-path&amp;gt;: 

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;&lt;code class="no-highlight"&gt;lib carrots&lt;br&gt;    :&lt;br&gt;        carrots.cs&lt;br&gt;    ;&lt;br&gt;&lt;br&gt;windir = [ modules.peek : windir ] ;&lt;br&gt;&lt;br&gt;exe rabbit&lt;br&gt;    :&lt;br&gt;        rabbit.cs&lt;br&gt;        carrots&lt;br&gt;    :&lt;br&gt;        &amp;lt;library-path&amp;gt;"$(windir)/Microsoft.NET/Framework/v2.0.50727"&lt;br&gt;        &amp;lt;find-shared-library&amp;gt;System.dll&lt;br&gt;        &amp;lt;find-shared-library&amp;gt;System.Data.dll&lt;br&gt;    ;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Можно указать целевую платформу с помощью &amp;lt;architecture&amp;gt; и &amp;lt;address-model&amp;gt;. По умолчанию – anycpu.&lt;/p&gt;

&lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/03/09/469" mce_href="http://blog.not-a-kernel-guy.com/2009/03/09/469"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3210972" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Boost.Build" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/Boost.Build/default.aspx" /></entry><entry><title>Вчера случился забавный момент...</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/not-a-kernel-guy/archive/2009/03/04/3208953.aspx" /><id>http://blogs.technet.com/not-a-kernel-guy/archive/2009/03/04/3208953.aspx</id><published>2009-03-04T04:24:28Z</published><updated>2009-03-04T04:24:28Z</updated><content type="html">&lt;p&gt;Копировал большой VHD файл с одной из тестовых машин на внешний диск, подключенный через FireWire. При этом предварительно запретил запуск тестов на этой машине, чтобы кто-то (или я сам) ничего не запустил там вдруг серию тестов, так как при этом отформатируется раздел с VHD файлом. Образ большой, копируется долго и я, естественно, отвлёкся на другие дела.&lt;/p&gt; Через пару часов вспоминаю про файл, переключаю KVM на эту машину и вижу консоль запущенного кем-то теста. Лог в консоли при этом бодро обновляется. В голове проносится мысль: «Так. Опять накрылся почтовый архив». Потом понимаю, что что-то не так. Во-первых, я никому доступа к этой машине не давал. Во-вторых, на экране явно древняя версия Windows 7, едва ли не годичной давности. Тогда панель задач выглядела совсем по-другому. В-третьих, система собрана из ветки, для которой сборки хранятся максимум неделю. Ну и куча других несуразностей вроде неправильно выставленного системного времени.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Обман вскрылся, стоило только прикоснуться к клавиатуре. Как оказалось, каким-то образом запустился просмотрщик картинок и начал показывать slide show в полноэкранном режиме. Подозреваю, что окошко, всплывающее при обнаружении в системе нового диска, сыграло свою роль. А снимки экрана были сделаны самим тестом, когда он запускался на этой машине в апреле 2008. :-)&lt;/p&gt;  &lt;p&gt;Cross-posted from &lt;a href="http://blog.not-a-kernel-guy.com/2009/03/03/460"&gt;blog.not-a-kernel-guy.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3208953" width="1" height="1"&gt;</content><author><name>alexeypa</name><uri>http://blogs.technet.com/members/alexeypa.aspx</uri></author><category term="Юмор" scheme="http://blogs.technet.com/not-a-kernel-guy/archive/tags/_2E043C043E044004_/default.aspx" /></entry></feed>