<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Волчьи IT-мысли &#187; Внутренности Windows</title>
	<atom:link href="http://sww-it.ru/category/internals/feed" rel="self" type="application/rss+xml" />
	<link>http://sww-it.ru</link>
	<description>Компьютерная безопасность, IT, антивирусная индустрия.</description>
	<lastBuildDate>Wed, 18 Jan 2012 11:20:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>University of Tokyo Windows Internals Lectures by Microsoft</title>
		<link>http://sww-it.ru/2011-01-29/516?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=university-of-tokyo-windows-internals-lectures-by-microsoft</link>
		<comments>http://sww-it.ru/2011-01-29/516#comments</comments>
		<pubDate>Sat, 29 Jan 2011 13:11:34 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Внутренности Windows]]></category>
		<category><![CDATA[internals]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=516</guid>
		<description><![CDATA[<p>Презентации компании Microsoft можно скачать прямо тут, может пригодятся кому-либо (PDF/PPT).</p> WindowsKernelOverview (243) WindowsKernelOverview (183) ObjectManager (136) ObjectManager (181) VirtualMemory (140) VirtualMemory (184) ThreadScheduling (248) ThreadScheduling (1314) Synchronization (183) Synchronization (243) TrapsInterruptsExceptions (189) TrapsInterruptsExceptions (221) IOArchitecture (185) IOArchitecture (242) NTFS (226) NTFS (209) Registry (1395) Registry (655) LPC (181) LPC (186) WindowsServices (137) WindowsServices (149) Processes (145)
Processes (127)
AdvVirtualMemory (147)
AdvVirtualMemory (156)
CacheManager (132)
CacheManager (168)
UserModeHeapManager (121)
UserModeHeapManager (127)
Win32K (140)
Win32K (265)
CommonCodingErrors (138)
CommonCodingErrors (149)


<p>Оригинал</p>
<p>P.S. Спасибо vaber за предоставленную ссылку.</p>
]]></description>
			<content:encoded><![CDATA[<p>Презентации компании Microsoft можно скачать прямо тут, может пригодятся кому-либо (PDF/PPT).</p>
<ul class="dlm_download_list">
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=1" title=" downloaded 243 times" >WindowsKernelOverview (243)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=2" title=" downloaded 183 times" >WindowsKernelOverview (183)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=3" title=" downloaded 136 times" >ObjectManager (136)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=4" title=" downloaded 181 times" >ObjectManager (181)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=5" title=" downloaded 140 times" >VirtualMemory (140)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=6" title=" downloaded 184 times" >VirtualMemory (184)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=7" title=" downloaded 248 times" >ThreadScheduling (248)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=8" title=" downloaded 1314 times" >ThreadScheduling (1314)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=9" title=" downloaded 183 times" >Synchronization (183)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=10" title=" downloaded 243 times" >Synchronization (243)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=11" title=" downloaded 189 times" >TrapsInterruptsExceptions (189)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=12" title=" downloaded 221 times" >TrapsInterruptsExceptions (221)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=13" title=" downloaded 185 times" >IOArchitecture (185)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=14" title=" downloaded 242 times" >IOArchitecture (242)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=15" title=" downloaded 226 times" >NTFS (226)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=16" title=" downloaded 209 times" >NTFS (209)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=17" title=" downloaded 1395 times" >Registry (1395)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=18" title=" downloaded 655 times" >Registry (655)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=19" title=" downloaded 181 times" >LPC (181)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=20" title=" downloaded 186 times" >LPC (186)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=21" title=" downloaded 137 times" >WindowsServices (137)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=22" title=" downloaded 149 times" >WindowsServices (149)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=23" title=" downloaded 145 times" >Processes (145)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=24" title=" downloaded 127 times" >Processes (127)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=25" title=" downloaded 147 times" >AdvVirtualMemory (147)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=26" title=" downloaded 156 times" >AdvVirtualMemory (156)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=27" title=" downloaded 132 times" >CacheManager (132)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=28" title=" downloaded 168 times" >CacheManager (168)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=29" title=" downloaded 121 times" >UserModeHeapManager (121)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=30" title=" downloaded 127 times" >UserModeHeapManager (127)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=31" title=" downloaded 140 times" >Win32K (140)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=32" title=" downloaded 265 times" >Win32K (265)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=33" title=" downloaded 138 times" >CommonCodingErrors (138)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=34" title=" downloaded 149 times" >CommonCodingErrors (149)</a></li>
</ul>

<p><a href="http://i-web.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/">Оригинал</a></p>
<p>P.S. Спасибо vaber за предоставленную ссылку.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-01-29%2F516&amp;title=University%20of%20Tokyo%20Windows%20Internals%20Lectures%20by%20Microsoft" id="wpa2a_2"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-01-29/516/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Грамотная документация-2</title>
		<link>http://sww-it.ru/2010-05-09/461?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b3%25d1%2580%25d0%25b0%25d0%25bc%25d0%25be%25d1%2582%25d0%25bd%25d0%25b0%25d1%258f-%25d0%25b4%25d0%25be%25d0%25ba%25d1%2583%25d0%25bc%25d0%25b5%25d0%25bd%25d1%2582%25d0%25b0%25d1%2586%25d0%25b8%25d1%258f-2</link>
		<comments>http://sww-it.ru/2010-05-09/461#comments</comments>
		<pubDate>Sun, 09 May 2010 11:24:13 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Внутренности Windows]]></category>
		<category><![CDATA[boot ini]]></category>
		<category><![CDATA[boot loader]]></category>
		<category><![CDATA[msdn]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=461</guid>
		<description><![CDATA[<p align="justify">Операционная система Windows предоставляет разработчикам возможность использования альтернативного файла ядра. Прежде всего, это необходимо для того, чтобы заменить обычное ядро ОС на checked build.</p> <p align="justify">В ОС Windows 2000, Windows XP и Windows 2003 для этого необходимо отредактировать файл boot.ini. Для ОС Windows Vista и Windows 7 необходимо использовать команду bcdedit. Полное описание процедуры [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Операционная система Windows предоставляет разработчикам возможность использования альтернативного файла ядра. Прежде всего, это необходимо для того, чтобы заменить обычное ядро ОС на checked build.</p>
<p align="justify">В ОС Windows 2000, Windows XP и Windows 2003 для этого необходимо отредактировать файл boot.ini. Для ОС Windows Vista и Windows 7 необходимо использовать команду bcdedit. Полное описание процедуры находится в <a href="http://msdn.microsoft.com/en-us/library/ff542286%28VS.85%29.aspx">MSDN</a>.</p>
<p><span id="more-461"></span><br />
В документации <a href="http://msdn.microsoft.com/en-us/library/ff542202%28VS.85%29.aspx">ясно сказано</a>, что имя альтернативного файла ядра должно удовлетворять требованию 8.3 (имя_файла.расширение):</p>
<blockquote><p><strong>kernel</strong> file </p>
<p>Directs the operating system loader to load an alternate kernel. The specified file must be located in the %SystemRoot%\system32 directory, and its file name must conform to 8.3−character format.
</p></blockquote>
<p align="justify">Проведем эксперимент с Windows XP и Windows Vista.</p>
<p align="justify">Для Windows XP необходимо отредактировать файл boot.ini. Скопируем ядро в %system32% (у меня это ntoskrnl.exe) в файл 12345678.exe и пропишем его в boot.ini:</p>
<blockquote><p>
[boot loader]<br />
timeout=30<br />
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br />
[operating systems]<br />
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=&#187;Microsoft Windows XP Professional&#187; /noexecute=optin /fastdetect /debug /debugport=COM1: /baudrate=115200 <strong>/kernel=12345678.exe</strong><br />
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=&#187;Microsoft Windows XP Professional&#187; /noexecute=optin /fastdetect
</p></blockquote>
<p align="justify">Перезагружаем компьютер с активным отладчиком ядра и смотрим первый загруженный модуль:</p>
<blockquote><p>
kd> dd PsLoadedModuleList L2<br />
8055b1c0  <strong>81bfc390</strong> 81bf1780<br />
kd> dt nt!_LDR_DATA_TABLE_ENTRY <strong>81bfc390</strong><br />
   +0&#215;000 InLoadOrderLinks : _LIST_ENTRY [ 0x81bfc328 - 0x8055b1c0 ]<br />
   +0&#215;008 InMemoryOrderLinks : _LIST_ENTRY [ 0x0 - 0x0 ]<br />
   +0&#215;010 InInitializationOrderLinks : _LIST_ENTRY [ 0x0 - 0x0 ]<br />
   +0&#215;018 DllBase          : 0x804d7000<br />
   +0x01c EntryPoint       : 0x806aeb2c<br />
   +0&#215;020 SizeOfImage      : 0&#215;216680<br />
<strong>   +0&#215;024 FullDllName      : _UNICODE_STRING &#171;\WINDOWS\system32\12345678.EXE&#187;</strong><br />
   +0x02c BaseDllName      : _UNICODE_STRING &#171;ntoskrnl.exe&#187;<br />
   +0&#215;034 Flags            : 0&#215;4004000<br />
   +0&#215;038 LoadCount        : 1<br />
   +0x03a TlsIndex         : 0<br />
   +0x03c HashLinks        : _LIST_ENTRY [ 0x0 - 0x2247c2 ]<br />
   +0x03c SectionPointer   : (null)<br />
   +0&#215;040 CheckSum         : 0x2247c2<br />
   +0&#215;044 TimeDateStamp    : 0<br />
   +0&#215;044 LoadedImports    : (null)<br />
   +0&#215;048 EntryPointActivationContext : (null)<br />
   +0x04c PatchInformation : 0x0074006e
</p></blockquote>
<p align="justify">Отлично, мы смогли загрузить альтернативное ядро. Теперь изменим имя файла на более длинное, например, на 123456789.exe и повторим эксперимент.</p>
<blockquote><p>
kd> dd PsLoadedModuleList L2<br />
8055b1c0  <strong>81bfc390</strong> 81bf1780<br />
kd> dt nt!_LDR_DATA_TABLE_ENTRY <strong>81bfc390</strong><br />
   +0&#215;000 InLoadOrderLinks : _LIST_ENTRY [ 0x81bfc328 - 0x8055b1c0 ]<br />
   +0&#215;008 InMemoryOrderLinks : _LIST_ENTRY [ 0x0 - 0x0 ]<br />
   +0&#215;010 InInitializationOrderLinks : _LIST_ENTRY [ 0x0 - 0x0 ]<br />
   +0&#215;018 DllBase          : 0x804d7000<br />
   +0x01c EntryPoint       : 0x806aeb2c<br />
   +0&#215;020 SizeOfImage      : 0&#215;216680<br />
<strong>   +0&#215;024 FullDllName      : _UNICODE_STRING &#171;\WINDOWS\system32\ntoskrnl.exe&#187;</strong><br />
   +0x02c BaseDllName      : _UNICODE_STRING &#171;ntoskrnl.exe&#187;<br />
   +0&#215;034 Flags            : 0&#215;4004000<br />
   +0&#215;038 LoadCount        : 1<br />
   +0x03a TlsIndex         : 0<br />
   +0x03c HashLinks        : _LIST_ENTRY [ 0x0 - 0x2247c2 ]<br />
   +0x03c SectionPointer   : (null)<br />
   +0&#215;040 CheckSum         : 0x2247c2<br />
   +0&#215;044 TimeDateStamp    : 0<br />
   +0&#215;044 LoadedImports    : (null)<br />
   +0&#215;048 EntryPointActivationContext : (null)<br />
   +0x04c PatchInformation : 0x0074006e
</p></blockquote>
<p align="justify">Очевидно, что операционная система проигнорировала длинное имя файла ядра.</p>
<p align="justify">Теперь повторим эксперимент на Windows Vista. Скопируем ядро (у меня это ntkrnlpa.exe) в файл 12345678.exe, установим альтернативное ядро и перезагрузим компьютер с активным отладчиком ядра.</p>
<blockquote><p>
C:\Windows\System32><strong>bcdedit /set kernel 12345678.exe</strong><br />
The operation completed successfully.</p>
<p>C:\Windows\System32><strong>bcdedit /enum</strong><br />
Windows Boot Loader<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
identifier              {current}<br />
device                  partition=C:<br />
path                    \Windows\system32\winload.exe<br />
description             DebugEntry<br />
locale                  en-US<br />
inherit                 {bootloadersettings}<br />
osdevice                partition=C:<br />
systemroot              \Windows<br />
<strong>kernel                  12345678.exe</strong><br />
resumeobject            {603268e3-3922-11de-a356-966f5237e32f}<br />
nx                      OptIn<br />
detecthal               No<br />
usefirmwarepcisettings  No<br />
debug                   Yes
</p></blockquote>
<blockquote><p>
kd> dd PsLoadedModuleList L2<br />
81952c70  <strong>82f69bb8</strong> 82f6f7b0<br />
kd> dt nt!_LDR_DATA_TABLE_ENTRY <strong>82f69bb8</strong><br />
   +0&#215;000 InLoadOrderLinks : _LIST_ENTRY [ 0x82f69b48 - 0x81952c70 ]<br />
   +0&#215;008 InMemoryOrderLinks : _LIST_ENTRY [ 0x818f0ae4 - 0x14 ]<br />
   +0&#215;010 InInitializationOrderLinks : _LIST_ENTRY [ 0x0 - 0x0 ]<br />
   +0&#215;018 DllBase          : 0x8183b000<br />
   +0x01c EntryPoint       : 0x819274b0<br />
   +0&#215;020 SizeOfImage      : 0x3b9000<br />
<strong>   +0&#215;024 FullDllName      : _UNICODE_STRING &#171;\SystemRoot\system32\12345678.exe&#187;</strong><br />
   +0x02c BaseDllName      : _UNICODE_STRING &#171;ntoskrnl.exe&#187;<br />
   +0&#215;034 Flags            : 0&#215;4000<br />
   +0&#215;038 LoadCount        : 1<br />
   +0x03a TlsIndex         : 0<br />
   +0x03c HashLinks        : _LIST_ENTRY [ 0x0 - 0x372038 ]<br />
   +0x03c SectionPointer   : (null)<br />
   +0&#215;040 CheckSum         : 0&#215;372038<br />
   +0&#215;044 TimeDateStamp    : 0<br />
   +0&#215;044 LoadedImports    : (null)<br />
   +0&#215;048 EntryPointActivationContext : (null)<br />
   +0x04c PatchInformation : (null)<br />
   +0&#215;050 ForwarderLinks   : _LIST_ENTRY [ 0x0 - 0x74006e ]<br />
   +0&#215;058 ServiceTagLinks  : _LIST_ENTRY [ 0x73006f - 0x72006b ]<br />
   +0&#215;060 StaticLinks      : _LIST_ENTRY [ 0x6c006e - 0x65002e ]
</p></blockquote>
<p align="justify">Результат как на Windows XP. Повторим эксперимент с длинным именем файла ядра.</p>
<blockquote><p>
kd> dd PsLoadedModuleList L2<br />
81919c70  <strong>82f69bb8</strong> 82f6f7b0<br />
kd> dt nt!_LDR_DATA_TABLE_ENTRY <strong>82f69bb8</strong><br />
   +0&#215;000 InLoadOrderLinks : _LIST_ENTRY [ 0x82f69b48 - 0x81919c70 ]<br />
   +0&#215;008 InMemoryOrderLinks : _LIST_ENTRY [ 0x818b7ae4 - 0x14 ]<br />
   +0&#215;010 InInitializationOrderLinks : _LIST_ENTRY [ 0x0 - 0x0 ]<br />
   +0&#215;018 DllBase          : 0&#215;81802000<br />
   +0x01c EntryPoint       : 0x818ee4b0<br />
   +0&#215;020 SizeOfImage      : 0x3b9000<br />
<strong>   +0&#215;024 FullDllName      : _UNICODE_STRING &#171;\SystemRoot\system32\123456789.exe&#187;</strong><br />
   +0x02c BaseDllName      : _UNICODE_STRING &#171;ntoskrnl.exe&#187;<br />
   +0&#215;034 Flags            : 0&#215;4000<br />
   +0&#215;038 LoadCount        : 1<br />
   +0x03a TlsIndex         : 0<br />
   +0x03c HashLinks        : _LIST_ENTRY [ 0x0 - 0x372038 ]<br />
   +0x03c SectionPointer   : (null)<br />
   +0&#215;040 CheckSum         : 0&#215;372038<br />
   +0&#215;044 TimeDateStamp    : 0<br />
   +0&#215;044 LoadedImports    : (null)<br />
   +0&#215;048 EntryPointActivationContext : (null)<br />
   +0x04c PatchInformation : (null)<br />
   +0&#215;050 ForwarderLinks   : _LIST_ENTRY [ 0x0 - 0x74006e ]<br />
   +0&#215;058 ServiceTagLinks  : _LIST_ENTRY [ 0x73006f - 0x72006b ]<br />
   +0&#215;060 StaticLinks      : _LIST_ENTRY [ 0x6c006e - 0x65002e ]
</p></blockquote>
<p align="justify">Очевидно, что ОС Windows Vista и Windows 7 умеют работать с длинными именами, которые не удовлетворяют требованию 8.3.</p>
<p align="justify">В очередной раз повторю, что полагаться на документацию не стоит, а стоит проверять все самостоятельно.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2010-05-09%2F461&amp;title=%D0%93%D1%80%D0%B0%D0%BC%D0%BE%D1%82%D0%BD%D0%B0%D1%8F%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F-2" id="wpa2a_4"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2010-05-09/461/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Небольшой трюк с WRP под Windows Vista+</title>
		<link>http://sww-it.ru/2010-03-10/423?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25bd%25d0%25b5%25d0%25b1%25d0%25be%25d0%25bb%25d1%258c%25d1%2588%25d0%25be%25d0%25b9-%25d1%2582%25d1%2580%25d1%258e%25d0%25ba-%25d1%2581-wrp-%25d0%25bf%25d0%25be%25d0%25b4-windows-vista</link>
		<comments>http://sww-it.ru/2010-03-10/423#comments</comments>
		<pubDate>Wed, 10 Mar 2010 10:20:45 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Внутренности Windows]]></category>
		<category><![CDATA[token]]></category>
		<category><![CDATA[windbg]]></category>
		<category><![CDATA[windows 7]]></category>
		<category><![CDATA[windows file protection]]></category>
		<category><![CDATA[windows resource protection]]></category>
		<category><![CDATA[windows vista]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=423</guid>
		<description><![CDATA[<p align="justify">Как известно, в операционной системе Windows (2000, XP, 2003) существует механизм защиты системных файлов, также известный как Windows File Protection. Данный механизм не позволяет изменять или удалять критичные объекты операционной системы, в частности системные DLL и различные драйверы. В случае обнаружения изменений ОС восстанавливает такие файлы.</p> <p align="justify">Вкратце суть алгоритма сводилась к следующему: в [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Как известно, в операционной системе Windows (2000, XP, 2003) существует механизм защиты системных файлов, также известный как <a href="http://ru.wikipedia.org/wiki/Windows_File_Protection">Windows File Protection</a>. Данный механизм не позволяет изменять или удалять критичные объекты операционной системы, в частности системные DLL и различные драйверы. В случае обнаружения изменений ОС восстанавливает такие файлы.</p>
<p align="justify">Вкратце суть алгоритма сводилась к следующему: в системном процессе winlogon.exe существовал следящий поток. Если он замечал изменение системной компоненты, то компонента восстанавливалась из запасной копии.</p>
<p align="justify">В скором времени данный алгоритм изучили и были придуманы многочисленные <a href="http://www.bitsum.com/aboutwfp.asp">способы обхода</a> данной технологи. Использование недокументированных функций системной библиотеки sfc_os.dll или изменение sfc.dll/sfc_os.dll стали широко использоваться в различных вредоносных программах.</p>
<p align="justify">Но не это нас интересует, а то, как видоизменился данный механизм в операционных системах Windows Vista и Windows 7.</p>
<p><span id="more-423"></span></p>
<p align="justify">В данных операционных системах Microsoft полностью отказалась от данной технологии и перешла на технологию <a href="http://ru.wikipedia.org/wiki/Windows_Resource_Protection">Windows Resource Protection</a>. Теперь в системе нет следящего потока, а доступ к файлам ограничивается операционной системой с помощью DACL и <a href="http://ru.wikipedia.org/wiki/Access_Control_List">ACL</a>, стандартного механизма защиты Windows. Однако даже у администратора нет прав на изменение или удаление системных файлов.</p>
<p align="justify">Поэкспериментируем с операционной системой Windows 7 RTM и попробуем удалить какой-либо системный файл.</p>
<div id="attachment_428" class="wp-caption aligncenter" style="width: 1034px"><a href="http://sww-it.ru/wp-content/uploads/2010/03/procmon_access_denied.png"><img src="http://sww-it.ru/wp-content/uploads/2010/03/procmon_access_denied-1024x728.png" alt="" title="procmon_access_denied" width="1024" height="728" class="size-large wp-image-428" /></a><p class="wp-caption-text">Так выглядит попытка удаления системного файла, которую я отследил с помощью Process Monitor</p></div>
<div id="attachment_432" class="wp-caption aligncenter" style="width: 429px"><a href="http://sww-it.ru/wp-content/uploads/2010/03/prop_1.png"><img src="http://sww-it.ru/wp-content/uploads/2010/03/prop_1.png" alt="" title="prop_1" width="419" height="515" class="size-full wp-image-432" /></a><p class="wp-caption-text">Посмотрим свойства файла</p></div>
<p align="justify">Как и было сказано даже у администратора нет прав на изменение файла.</p>
<div id="attachment_435" class="wp-caption aligncenter" style="width: 429px"><a href="http://sww-it.ru/wp-content/uploads/2010/03/prop_2.png"><img src="http://sww-it.ru/wp-content/uploads/2010/03/prop_2.png" alt="" title="prop_2" width="419" height="515" class="size-full wp-image-435" /></a><p class="wp-caption-text">Посмотрим, как с этим обстоят дела у TrustedInstaller</p></div>
<p align="justify">Как мы видим &#8212; полный контроль над файлом.</p>
<p align="justify">Однако, если вы администратор, то вы можете захватить владение данным файлом и потом уже выставить ему необходимые права.</p>
<p align="justify">Все это не очень удобно, если необходимо произвести изменение нескольких файлов. Попробуем найти способ проще. Для этого воспользуемся отладчиком WinDbg и утилитой psgetsid, которая умеет транслировать имя в SID и обратно:</p>
<blockquote><p>C:\1>psgetsid &#171;NT SERVICE\TrustedInstaller&#187;</p>
<p>PsGetSid v1.43 &#8212; Translates SIDs to names and vice versa<br />
Copyright (C) 1999-2006 Mark Russinovich<br />
Sysinternals &#8212; www.sysinternals.com</p>
<p>SID for NT SERVICE\TrustedInstaller:<br />
<strong>S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464</strong></p></blockquote>
<p align="justify">Теперь перечислим все процессы в системе и попробуем найти хотя бы один имеющий нужные нам права:</p>
<blockquote><p>kd> <span style="color: #0000ff;">!for_each_process &#171;r $t0 = @#Process; r? $t1 = @@c++(((nt!_EPROCESS*)@$t0)->Token.Object); !token -n @$t1 &#038; 0xFFFFFFF8;&#187;</span></p></blockquote>
<p align="justify">Приведу лишь token первого процесса (системного):</p>
<blockquote><p>_TOKEN 87a01398<br />
TS Session ID: 0<br />
User: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Groups:<br />
 00 S-1-5-32-544 (Alias: BUILTIN\Administrators)<br />
    Attributes &#8212; Default Enabled Owner<br />
 01 S-1-1-0 (Well Known Group: localhost\Everyone)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 02 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 03 S-1-16-16384 Unrecognized SID<br />
    Attributes &#8212; GroupIntegrity GroupIntegrityEnabled<br />
Primary Group: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Privs:<br />
 02 0&#215;000000002 SeCreateTokenPrivilege            Attributes -<br />
 03 0&#215;000000003 SeAssignPrimaryTokenPrivilege     Attributes -<br />
 04 0&#215;000000004 SeLockMemoryPrivilege             Attributes &#8212; Enabled Default<br />
 05 0&#215;000000005 SeIncreaseQuotaPrivilege          Attributes -<br />
 07 0&#215;000000007 SeTcbPrivilege                    Attributes &#8212; Enabled Default<br />
 08 0&#215;000000008 SeSecurityPrivilege               Attributes -<br />
 09 0&#215;000000009 SeTakeOwnershipPrivilege          Attributes -<br />
 10 0x00000000a SeLoadDriverPrivilege             Attributes -<br />
 11 0x00000000b SeSystemProfilePrivilege          Attributes &#8212; Enabled Default<br />
 12 0x00000000c SeSystemtimePrivilege             Attributes -<br />
 13 0x00000000d SeProfileSingleProcessPrivilege   Attributes &#8212; Enabled Default<br />
 14 0x00000000e SeIncreaseBasePriorityPrivilege   Attributes &#8212; Enabled Default<br />
 15 0x00000000f SeCreatePagefilePrivilege         Attributes &#8212; Enabled Default<br />
 16 0&#215;000000010 SeCreatePermanentPrivilege        Attributes &#8212; Enabled Default<br />
 17 0&#215;000000011 SeBackupPrivilege                 Attributes -<br />
 18 0&#215;000000012 SeRestorePrivilege                Attributes -<br />
 19 0&#215;000000013 SeShutdownPrivilege               Attributes -<br />
 20 0&#215;000000014 SeDebugPrivilege                  Attributes &#8212; Enabled Default<br />
 21 0&#215;000000015 SeAuditPrivilege                  Attributes &#8212; Enabled Default<br />
 22 0&#215;000000016 SeSystemEnvironmentPrivilege      Attributes -<br />
 23 0&#215;000000017 SeChangeNotifyPrivilege           Attributes &#8212; Enabled Default<br />
 25 0&#215;000000019 SeUndockPrivilege                 Attributes -<br />
 28 0x00000001c SeManageVolumePrivilege           Attributes -<br />
 29 0x00000001d SeImpersonatePrivilege            Attributes &#8212; Enabled Default<br />
 30 0x00000001e SeCreateGlobalPrivilege           Attributes &#8212; Enabled Default<br />
 31 0x00000001f SeTrustedCredManAccessPrivilege   Attributes -<br />
 32 0&#215;000000020 SeRelabelPrivilege                Attributes -<br />
 33 0&#215;000000021 SeIncreaseWorkingSetPrivilege     Attributes &#8212; Enabled Default<br />
 34 0&#215;000000022 SeTimeZonePrivilege               Attributes &#8212; Enabled Default<br />
 35 0&#215;000000023 SeCreateSymbolicLinkPrivilege     Attributes &#8212; Enabled Default<br />
Authentication ID:         (0,3e7)<br />
Impersonation Level:       Anonymous<br />
TokenType:                 Primary<br />
Source: *SYSTEM*           TokenFlags: 0&#215;2000 ( Token in use )<br />
Token ID: 3ea              ParentToken ID: 0<br />
Modified ID:               (0, 3eb)<br />
RestrictedSidCount: 0      RestrictedSids: 00000000<br />
OriginatingLogonSession: 0</p></blockquote>
<p align="justify">Попробуем во всем выводе в консоли WinDbg найти SID TrustedInstaller. На моем тестовом стенде ничего найдено не было. Но ведь есть сервис, который может изменять системные компоненты и находится он в <strong>\Windows\servicing\TrustedInstaller.exe</strong>, а запустить его мы можем вручную из вкладки Services. Называется он Windows Modules Installer и имеет следующее описание: «<em>Enables installation, modification, and removal of Windows updates and optional components. If this service is disabled, install or uninstall of Windows updates might fail for this computer.</em>»</p>
<p align="justify">После запуска можно повторить команду вывода Token для каждого процесса или найти Token вручную в процессе TrustedInstaller.exe.</p>
<blockquote><p>PROCESS <strong>85f79030</strong>  SessionId: 0  Cid: 0910    Peb: 7ffd3000  ParentCid: 01e8<br />
    DirBase: 3ef59520  ObjectTable: 90e37080  HandleCount: 121.<br />
    Image: TrustedInstaller.exe</p>
<p>kd> <span style="color: #0000ff;">? poi( <strong>85f79030</strong> + 0xf8 ) &#038; 0xFFFFFFF8</span><br />
Evaluate expression: -1730040888 = <strong>98e1abc8</strong></p></blockquote>
<p align="justify">0xf8 – это смещение до Token в структуре nt!_EPROCESS, а Token – это структура nt!_EX_FAST_REF:</p>
<blockquote><p>kd> <span style="color: #0000ff;">dt nt!_EX_FAST_REF</span><br />
   +0&#215;000 Object           : Ptr32 Void<br />
   +0&#215;000 RefCnt           : Pos 0, 3 Bits<br />
   +0&#215;000 Value            : Uint4B</p></blockquote>
<p align="justify">Поэтому необходимо отбросить младшие 3 бита адреса.</p>
<blockquote><p>kd> <span style="color: #0000ff;">!token -n <strong>98e1abc8</strong></span><br />
_TOKEN <strong>98e1abc8</strong><br />
TS Session ID: 0<br />
User: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Groups:<br />
 00 S-1-16-16384 Unrecognized SID<br />
    Attributes &#8212; GroupIntegrity GroupIntegrityEnabled<br />
 01 S-1-1-0 (Well Known Group: localhost\Everyone)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 02 S-1-5-32-545 (Alias: BUILTIN\Users)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 03 S-1-5-6 (Well Known Group: NT AUTHORITY\SERVICE)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 04 S-1-2-1 (no name mapped)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 05 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 06 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 <strong>07 S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 (Well Known Group: NT SERVICE\TrustedInstaller)</strong><br />
    Attributes &#8212; Default Enabled Owner<br />
 08 S-1-5-5-0-1412741 (no name mapped)<br />
    Attributes &#8212; Mandatory Default Enabled Owner LogonId<br />
 09 S-1-2-0 (Well Known Group: localhost\LOCAL)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 10 S-1-5-32-544 (Alias: BUILTIN\Administrators)<br />
    Attributes &#8212; Default Enabled Owner<br />
Primary Group: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Privs:<br />
 03 0&#215;000000003 SeAssignPrimaryTokenPrivilege     Attributes -<br />
 04 0&#215;000000004 SeLockMemoryPrivilege             Attributes &#8212; Enabled Default<br />
 05 0&#215;000000005 SeIncreaseQuotaPrivilege          Attributes -<br />
 07 0&#215;000000007 SeTcbPrivilege                    Attributes &#8212; Enabled Default<br />
 08 0&#215;000000008 SeSecurityPrivilege               Attributes -<br />
 09 0&#215;000000009 SeTakeOwnershipPrivilege          Attributes -<br />
 10 0x00000000a SeLoadDriverPrivilege             Attributes -<br />
 11 0x00000000b SeSystemProfilePrivilege          Attributes &#8212; Enabled Default<br />
 12 0x00000000c SeSystemtimePrivilege             Attributes -<br />
 13 0x00000000d SeProfileSingleProcessPrivilege   Attributes &#8212; Enabled Default<br />
 14 0x00000000e SeIncreaseBasePriorityPrivilege   Attributes &#8212; Enabled Default<br />
 15 0x00000000f SeCreatePagefilePrivilege         Attributes &#8212; Enabled Default<br />
 16 0&#215;000000010 SeCreatePermanentPrivilege        Attributes &#8212; Enabled Default<br />
 17 0&#215;000000011 SeBackupPrivilege                 Attributes &#8212; Enabled<br />
 18 0&#215;000000012 SeRestorePrivilege                Attributes &#8212; Enabled<br />
 19 0&#215;000000013 SeShutdownPrivilege               Attributes -<br />
 20 0&#215;000000014 SeDebugPrivilege                  Attributes &#8212; Enabled Default<br />
 21 0&#215;000000015 SeAuditPrivilege                  Attributes &#8212; Enabled Default<br />
 22 0&#215;000000016 SeSystemEnvironmentPrivilege      Attributes -<br />
 23 0&#215;000000017 SeChangeNotifyPrivilege           Attributes &#8212; Enabled Default<br />
 25 0&#215;000000019 SeUndockPrivilege                 Attributes -<br />
 28 0x00000001c SeManageVolumePrivilege           Attributes -<br />
 29 0x00000001d SeImpersonatePrivilege            Attributes &#8212; Enabled Default<br />
 30 0x00000001e SeCreateGlobalPrivilege           Attributes &#8212; Enabled Default<br />
 33 0&#215;000000021 SeIncreaseWorkingSetPrivilege     Attributes &#8212; Enabled Default<br />
 34 0&#215;000000022 SeTimeZonePrivilege               Attributes &#8212; Enabled Default<br />
 35 0&#215;000000023 SeCreateSymbolicLinkPrivilege     Attributes &#8212; Enabled Default<br />
Authentication ID:         (0,3e7)<br />
Impersonation Level:       Anonymous<br />
TokenType:                 Primary<br />
Source: Advapi             TokenFlags: 0&#215;2000 ( Token in use )<br />
Token ID: 158ec1           ParentToken ID: 0<br />
Modified ID:               (0, 158ff6)<br />
RestrictedSidCount: 0      RestrictedSids: 00000000<br />
OriginatingLogonSession: 3e7
</p></blockquote>
<p align="justify">А теперь давайте подменим Token процесса FAR.exe на Token процесса TrustedInstaller.exe:</p>
<blockquote><p>PROCESS <strong>84c9e030</strong>  SessionId: 1  Cid: 08d0    Peb: 7ffda000  ParentCid: 07b0<br />
    DirBase: 3ef593c0  ObjectTable: 90fe1308  HandleCount: 264.<br />
    Image: Far.exe</p>
<p>kd> <span style="color: #0000ff;">ed <strong>84c9e030</strong>+f8 <strong>98e1abc8</strong></span>
</p></blockquote>
<p align="justify">После этих нехитрых манипуляций файловый менеджер FAR получает все необходимые права и может изменять и/или удалять защищаемые системные файлы без каких-либо изощрений с захватом прав пользования отдельного файла.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2010-03-10%2F423&amp;title=%D0%9D%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9%20%D1%82%D1%80%D1%8E%D0%BA%20%D1%81%20WRP%20%D0%BF%D0%BE%D0%B4%20Windows%20Vista%2B" id="wpa2a_6"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2010-03-10/423/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Грамотная документация</title>
		<link>http://sww-it.ru/2009-07-02/268?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b3%25d1%2580%25d0%25b0%25d0%25bc%25d0%25be%25d1%2582%25d0%25bd%25d0%25b0%25d1%258f-%25d0%25b4%25d0%25be%25d0%25ba%25d1%2583%25d0%25bc%25d0%25b5%25d0%25bd%25d1%2582%25d0%25b0%25d1%2586%25d0%25b8%25d1%258f</link>
		<comments>http://sww-it.ru/2009-07-02/268#comments</comments>
		<pubDate>Thu, 02 Jul 2009 12:53:59 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Внутренности Windows]]></category>
		<category><![CDATA[ZwNotifyChangeKey]]></category>
		<category><![CDATA[драйвер]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=268</guid>
		<description><![CDATA[<p style="text-align: justify;">Грамотная документация &#8212; залог здоровья и спокойствия программиста. Причем начинающего программиста, так как эксперт проблему решит намного быстрее. Да и не впервой ему &#8212; эксперту сталкиваться с плохой документацией, с программным кодом без комментариев и прочими неприятными вещами.</p> <p style="text-align: justify;">Одной из самых объемных и важных документаций для программистов является MSDN (Microsoft Developer [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Грамотная документация &#8212; залог здоровья и спокойствия программиста. Причем начинающего программиста, так как эксперт проблему решит намного быстрее. Да и не впервой ему &#8212; эксперту сталкиваться с плохой документацией, с программным кодом без комментариев и прочими неприятными вещами.</p>
<p style="text-align: justify;">Одной из самых объемных и важных документаций для программистов является <a href="http://msdn.microsoft.com/">MSDN</a> (Microsoft Developer Network). Для низкоуровневых программистов и программистов драйверов существует отдельная документация WDK (Windows Driver Kit), входящая в состав MSDN. В MSDN перечислены функции, параметры к ним, объяснения, примеры кода и многое другое.</p>
<p style="text-align: justify;">Большая документация &#8212; сложный продукт. В любом сложном продукте есть недочеты, ошибки и недоработки. Встречаются они и в документации, ведь все мы люди, все мы ошибаемся. Недавно с такой ошибкой столкнулся и я.</p>
<p style="text-align: justify;">Операционная система Windows предоставляет специальную функцию, которая позволяет отслеживать различные изменения в системном реестре указанного ключа. Она есть как в пользовательском пространстве (<a href="http://msdn.microsoft.com/en-us/library/ms724892(VS.85).aspx">RegNotifyChangeKeyValue</a>), так и в пространстве ядра (<a href="http://msdn.microsoft.com/en-us/library/bb981785.aspx">ZwNotifyChangeKey</a>), там, где работает сама операционная система и драйверы. Этой функцией пользуются как антивирусные продукты, так и вредоносный код, который следит за изменениями своих вредоносных веток антивирусом (обычно это лечение веток реестра).</p>
<p><span id="more-268"></span></p>
<p style="text-align: justify;">Прототип функции ZwNotifyChangeKey выглядит так:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">NTSTATUS
ZwNotifyChangeKey<span style="color: #009900;">&#40;</span>
  __in HANDLE  KeyHandle<span style="color: #339933;">,</span>
  __in_opt HANDLE  Event<span style="color: #339933;">,</span>
  __in_opt PIO_APC_ROUTINE  ApcRoutine<span style="color: #339933;">,</span>        <span style="color: #666666; font-style: italic;">// указатель на нашу функцию</span>
  __in_opt PVOID  ApcContext<span style="color: #339933;">,</span>
  __out PIO_STATUS_BLOCK  IoStatusBlock<span style="color: #339933;">,</span>
  __in ULONG  CompletionFilter<span style="color: #339933;">,</span>
  __in BOOLEAN  WatchTree<span style="color: #339933;">,</span>
  __out_bcount_opt<span style="color: #009900;">&#40;</span>BufferSize<span style="color: #009900;">&#41;</span> PVOID  Buffer<span style="color: #339933;">,</span>
  __in ULONG  BufferSize<span style="color: #339933;">,</span>
  __in BOOLEAN  Asynchronous
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Через параметр KeyHandle необходимо передать дескриптор открытого ключа, изменения которого мы хотим отслеживать. Параметр ApcRoutine &#8212; это указатель на нами реализованную функцию, которая будет вызываться в случае изменений в указанной ветке реестра.</p>
<p style="text-align: justify;">Функция должна быть определена так:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">typedef</span> VOID <span style="color: #009900;">&#40;</span>NTAPI <span style="color: #339933;">*</span>PIO_APC_ROUTINE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span> IN PVOID ApcContext<span style="color: #339933;">,</span> IN PIO_STATUS_BLOCK IoStatusBlock<span style="color: #339933;">,</span> IN ULONG Reserved <span style="color: #009900;">&#41;</span></pre></div></div>

<p style="text-align: justify;">Не суть важно, что тут за параметры, главное &#8212; то, что у функции три аргумента. Это важно.</p>
<p style="text-align: justify;">В одном из драйверов мне понадобилась эта функция. Я написал весь сопутствующий код, использовал функцию, скомпилировал драйвер, положил в нужное место и запустил. Система упала в BSOD. &#8216;Не в первый и не в последний раз&#8217;, &#8212; подумал я и начал проверять параметры функции. Все было идеально, все было правильно, а BSOD повторялся каждый раз.</p>
<p style="text-align: justify;">Google не смог мне помочь с данной проблемой и пришлось разбираться самому. Потратив некоторое количество часов, я выяснил, что в недрах операционной системы при определенных обстоятельствах указатель PIO_APC_ROUTINE  трактуется совершенно по-другому, как указатель на структуру WORK_QUEUE_ITEM, в которой содержится указатель на нами определенную функцию. И этого не было в документации, эту информацию я даже не смог найти в сети.</p>
<p style="text-align: justify;">Структура выглядит следующим образом:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> _WORK_QUEUE_ITEM <span style="color: #009900;">&#123;</span>
    LIST_ENTRY List<span style="color: #339933;">;</span>
    PWORKER_THREAD_ROUTINE WorkerRoutine<span style="color: #339933;">;</span>        <span style="color: #666666; font-style: italic;">// указатель на нашу функцию</span>
    __volatile PVOID Parameter<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> WORK_QUEUE_ITEM<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>PWORK_QUEUE_ITEM<span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify;">Функция должна быть определена так:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">typedef</span> VOID <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>PWORKER_THREAD_ROUTINE<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span> IN PVOID Parameter <span style="color: #009900;">&#41;</span></pre></div></div>

<p style="text-align: justify;">И она принимает всего один параметр. И это важно.</p>
<p style="text-align: justify;">Довольно быстро я переписал код, и драйвер перестал рушить операционную систему. Сразу после этого я написал письмо в компанию Microsoft где указал им на это досадное упущение с их стороны. Примерно через три часа (около четырех часов утра) я получил от них ответ, в котором они обещали исправить документацию в ближайшее время (в конце месяца).</p>
<p style="text-align: justify;">Ошибки бывают разные, но ошибки в документации дорогого стоят. До следующих ошибок, а они обязательно будут.</p>
<p><a href="http://www.securelist.com/ru/weblog/35135/Gramotnaya_dokumentatsiya">Оригинал</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2009-07-02%2F268&amp;title=%D0%93%D1%80%D0%B0%D0%BC%D0%BE%D1%82%D0%BD%D0%B0%D1%8F%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F" id="wpa2a_8"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2009-07-02/268/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Хитрая Windows Vista</title>
		<link>http://sww-it.ru/2009-05-14/196?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d1%2585%25d0%25b8%25d1%2582%25d1%2580%25d0%25b0%25d1%258f-windows-vista</link>
		<comments>http://sww-it.ru/2009-05-14/196#comments</comments>
		<pubDate>Thu, 14 May 2009 17:49:52 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Внутренности Windows]]></category>
		<category><![CDATA[stop 0x0000012A]]></category>
		<category><![CDATA[windows vista]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=196</guid>
		<description><![CDATA[<p>Как это обычно бывает перед релизом, что-нибудь обязательно ломается. Так и в этот раз у меня сломался рабочий ноутбук, а точнее умер жесткий диск. Долго ли, коротко ли, но я купил новый диск и решил поставить Windows Vista (у Sony Vaio большие проблемы с установкой Windows XP, которая не видит жесткого диска при установке).</p> <p [...]]]></description>
			<content:encoded><![CDATA[<p>Как это обычно бывает перед релизом, что-нибудь обязательно ломается. Так и в этот раз у меня сломался рабочий ноутбук, а точнее умер жесткий диск. Долго ли, коротко ли, но я купил новый диск и решил поставить Windows Vista (у Sony Vaio большие проблемы с установкой Windows XP, которая не видит жесткого диска при установке).</p>
<p style="text-align: justify;"><span id="more-196"></span>Решено было поставить версию Home Premium, так как для работы вполне должно хватать. Я взял <strong>английскую</strong> версию, так как не переношу никаких переводов операционной системы, особенно на русский язык. Инсталляционный код не думая взял с задней крышки ноутбука. Все прошло относительно быстро и успешно. Однако после второй перезагрузки получаю BSOD. Удивился я очень сильно, настолько сильно, что с первого раза даже не успел рассмотреть номер STOP-ошибки. Со второго раза все-таки разглядел <strong>STOP 0x0000012A</strong>.</p>
<p><span lang="EN-US">kd&gt; <span style="color: #0000ff;">!analyze -show 0x0000012A</span></span><br />
<strong><span lang="EN-US">MUI_NO_VALID_SYSTEM_LANGUAGE (12a)</span></strong><br />
<span lang="EN-US">Windows did not find any installed, licensed language packs for the system default UI language.</span><br />
<span lang="EN-US">Arguments:</span><br />
<span lang="EN-US">Arg1: 00000000, The subtype of the bugcheck.</span><br />
<span lang="EN-US">Arg</span>2: 00000000<br />
<span lang="EN-US">Arg</span>3: 00000000<br />
<span lang="EN-US">Arg</span>4: 00000000</p>
<p>Пришлось брать ядро, загружать в IDA и смотреть.</p>
<div id="attachment_198" class="wp-caption aligncenter" style="width: 774px"><img class="size-full wp-image-198" title="vista_bsod_mui_1" src="http://sww-it.ru/wp-content/uploads/2009/05/vista_bsod_mui_1.png" alt="Вызов функции MUIBugCheck" width="764" height="180" /><p class="wp-caption-text">Вызов функции MUIBugCheck с нашим заветным кодом</p></div>
<div id="attachment_199" class="wp-caption aligncenter" style="width: 710px"><img class="size-full wp-image-199" style="vertical-align: middle;" title="vista_bsod_mui_2" src="http://sww-it.ru/wp-content/uploads/2009/05/vista_bsod_mui_2.png" alt="Здесь вызывается MUIBugCheck" width="700" height="192" /><p class="wp-caption-text">Из этой функции вызывается MUIBugCheck, она есть в SSDT</p></div>
<p style="text-align: justify;">Функция <span style="color: #0000ff;">MUIBugCheck</span> вызывается из функции <span style="color: #0000ff;">NtGetMUIRegistryInfo</span>, которую у меня смотреть не было никакого желания, ибо итак понятно, что она делает.</p>
<p style="text-align: justify;">Так в чем же все-таки дело? А дело все в том, что я поставил <strong>английскую</strong> версию операционной системы, а ввел ключ от <strong>русской</strong> версии. Вот такая хитрая Vista. Берегите свои нервы, пользуйтесь только правильными ключами и правильными версиями. В итоге была поставлена английская Windows Vista Enterprise с правильным ключом.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2009-05-14%2F196&amp;title=%D0%A5%D0%B8%D1%82%D1%80%D0%B0%D1%8F%20Windows%20Vista" id="wpa2a_10"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2009-05-14/196/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

