<?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>Ars Longa, Vita Brevis &#187; Windows</title>
	<atom:link href="http://blog.sjinks.pro/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Несколько лёгких web-серверов для Windows</title>
		<link>http://blog.sjinks.pro/windows/377-several-lightweight-web-servers-for-windows/</link>
		<comments>http://blog.sjinks.pro/windows/377-several-lightweight-web-servers-for-windows/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 05:17:15 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[mathopd]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[thttpd]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=377</guid>
		<description><![CDATA[Сборки nginx, mathopd и thttpd для Windows В силу тех или иных причин многие web-разработчики работают под Windows: в силу привычки либо по каким-либо еще причинам. Но мир устроен так, что большая часть серверного программного обеспечения работает под UNIX/Linux. Тем не менее, разработчикам хотелось бы иметь возможность тестировать разработки локально. Я не рассматриваю вариант с [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/377-several-lightweight-web-servers-for-windows/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Сборки <a href="http://blog.sjinks.pro/tag/nginx/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  nginx">nginx</a>, <a href="http://blog.sjinks.pro/tag/mathopd/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  mathopd">mathopd</a> и <a href="http://blog.sjinks.pro/tag/thttpd/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  thttpd">thttpd</a> для <a href="http://blog.sjinks.pro/tag/windows/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Windows">Windows</a></em></h2>
<p>В силу тех или иных причин многие web-разработчики работают под Windows: в силу привычки либо по каким-либо еще причинам. Но мир устроен так, что большая часть серверного программного обеспечения работает под UNIX/Linux.</p>
<p>Тем не менее, разработчикам хотелось бы иметь возможность тестировать разработки локально. Я не рассматриваю вариант с установкой виртуальной машины, ибо не все хорошо разбираются в Linux.</p>
<p><a href="http://blog.sjinks.pro/windows/58-nginx-php-fastcgi-in-windows/">В статье про nginx</a> я приводил примеры, когда необходимо использовать что-нибудь более легковесное, чем Apache. Но выбор не всегда ограничивается nginx, есть и другие лёгкие web-сервера.</p>
<p>Я собрал под Windows три web-сервера:</p>
<ul>
<li><a href="http://www.mathopd.org/" rel="external nofollow"><strong>mathopd 1.5p6</strong></a>;</li>
<li><a href="http://sysoev.ru/nginx/" rel="external nofollow"><strong>nginx 0.6.33</strong></a>;</li>
<li><a href="http://www.acme.com/software/thttpd/"><strong>thttpd 2.25b</strong></a>.</li>
</ul>
<p><span id="more-377"></span></p>
<p>С nginx всё понятно, про него уже не раз писали. Но в поисках альтернативы nginx я случайно обнаружил <a href="http://www.acme.com/software/thttpd/benchmarks.html" rel="external nofollow">тесты производительности web-серверов</a> (хотя и 10-летней давности).</p>
<p>На диаграмме видно, что Zeus вне конкуренции. Но покупать его у меня не было желания, поэтому я стал рассматривать бесплатные альтернативы, а именно: thttpd и mathopd.</p>
<p>Для mathopd, thttpd и nginx я собрал версии под Windows (в <a href="http://blog.sjinks.pro/tag/cygwin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Cygwin">Cygwin</a>). Планирую собрать <a href="http://www.boa.org/" rel="external nofollow">Boa</a>, а для <a href="http://www.cherokee-project.com/" rel="external nofollow">Cherokee</a> есть сборка под Windows.</p>
<p><strong>Скачать:</strong></p>
<ul>
<li><strong><a href="http://d.sjinks.pro/lws/mathopd-1.5p6-cyg.zip" rel="nofollow">mathopd 1.5p6 для Windows</a>;</strong></li>
<li><strong><a href="http://d.sjinks.pro/lws/nginx-0.6.33-cyg.zip" rel="nofollow">nginx 0.6.33 для Windows</a>;</strong></li>
<li><strong><a href="http://d.sjinks.pro/lws/thttpd-2.25b-cyg.zip" rel="nofollow">thttpd 2.25b для Windows</a>.</strong></li>
</ul>
<p>В архивы включены все (я надеюсь) требуемые динамически подключаемые библиотеки (DLL).</p>
<p>mathopd и thttpd, возможно, смогут работать и без установленного Cygwin, а nginx&nbsp;&mdash;&nbsp;вряд ли.</p>
<p>nginx конфигурировался следующим образом:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p3772">
        <div class="code bash" id="p377code2">
.<span class="sy0">/</span>configure <span class="re5">--with-mail</span> --with-mail_ssl_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/377-several-lightweight-web-servers-for-windows/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/windows/377-several-lightweight-web-servers-for-windows/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Пять слов длиной в 56 мегабайт</title>
		<link>http://blog.sjinks.pro/windows/281-five-words-56-mb-length/</link>
		<comments>http://blog.sjinks.pro/windows/281-five-words-56-mb-length/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 06:16:01 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=281</guid>
		<description><![CDATA[За что я люблю Microsoft Всё-таки у Miscrosoft'овцев забавное чувство юмора&#8230; Дней двадцать назад вышло одно очень забавное обновление (KB955020) для системы проверки орфографии. Всё, что оно делает, это добавляет в словари английского и немецкого языка пять слов: название социальной сети Friendster, фамилии модели Heidi Klum, баскетболиста NBA Mohammed Nazr, политиков Barack Obama и Marc [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/281-five-words-56-mb-length/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>За что я люблю <a href="http://blog.sjinks.pro/tag/microsoft/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Microsoft">Microsoft</a></em></h2>
<p>Всё-таки у Miscrosoft'овцев забавное чувство юмора&hellip; Дней двадцать назад вышло одно очень забавное обновление (<a href="http://support.microsoft.com/kb/955020" rel="nofollow">KB955020</a>) для системы проверки орфографии. Всё, что оно делает, это добавляет в словари английского и немецкого языка пять слов: название социальной сети Friendster, фамилии модели Heidi Klum, баскетболиста NBA Mohammed Nazr, политиков Barack Obama и Marc Racicot.</p>
<p>Всё бы ничего, только размер этого <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0962DCC7-BCCD-42DF-A52F-B23CB34376BC&amp;displaylang=en" rel="nofollow">обновления</a> составляет 56.4&nbsp;МБ. Да и к тому же требует проверку подлинности <a href="http://blog.sjinks.pro/tag/windows/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Windows">Windows</a>.</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2008/07/kb955020.png" rel="lightbox"><img src="http://static.sjinks.info/wp-content/uploads/2008/07/kb955020-293x300.png" alt="KB955020" title="KB955020" class="alignnone size-medium wp-image-283" /></a><script type="text/javascript">odl.register(initLightbox)</script></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/281-five-words-56-mb-length/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/windows/281-five-words-56-mb-length/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Доказана критичность уязвимости в Safari для Windows</title>
		<link>http://blog.sjinks.pro/security/196-vulnerability-in-safari-for-windows-proves-critical/</link>
		<comments>http://blog.sjinks.pro/security/196-vulnerability-in-safari-for-windows-proves-critical/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 21:12:43 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=196</guid>
		<description><![CDATA[Insecure By Design, или, Не там уязвимости ищите, товарищи! Всё-таки как можно переставить всё с ног на голову&#8230; Прочитал сегодня статью на CNews.com; она небольшая, привожу полностью: Исследователь безопасности разработал сайт, наглядно демонстрирующий риск, с которым сталкиваются пользователи Windows при использовании браузера Safari от Apple. ИБ-команда Microsoft уже предупредила, что «смешанная угроза» настолько серьезна, что [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/196-vulnerability-in-safari-for-windows-proves-critical/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Insecure By Design, или, Не там уязвимости ищите, товарищи!</em></h2>
<p>Всё-таки как можно переставить всё с ног на голову&hellip; Прочитал сегодня <a href="http://www.cnews.ru/news/line/index.shtml?2008/06/10/304593" rel="nofollow">статью</a> на CNews.com; она небольшая, привожу полностью:</p>
<blockquote cite="http://www.cnews.ru/news/line/index.shtml?2008/06/10/304593">
Исследователь безопасности разработал сайт, наглядно демонстрирующий риск, с которым сталкиваются пользователи <a href="http://blog.sjinks.pro/tag/windows/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Windows">Windows</a> при использовании браузера <a href="http://blog.sjinks.pro/tag/safari/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Safari">Safari</a> от Apple.
<p>ИБ-команда <a href="http://blog.sjinks.pro/tag/microsoft/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Microsoft">Microsoft</a> уже предупредила, что <strong>«смешанная угроза» настолько серьезна, что пользователям Windows следует ограничить использование Safari до тех пор, пока не выйдет патч</strong>. В своем блоге исследователь <cite>Лю Ди Ю</cite> (<cite>Liu Die Yu</cite>) показал, что это предупреждение не было преувеличением.</p>
<p>При клике по указанной исследователем ссылке в Safari с настройками по умолчанию на рабочий стол пользователя Windows загружается файл-ловушка. В следующий раз, когда пользователь открывает <strong>Internet Explorer</strong>, файл автоматически запускает <code>notepad.exe</code> и открывает несуществующий файл. <q>Разумеется, злоумышленники могут найти менее безобидное применение данной уязвимости</q>, пишет <cite>The Register</cite>.</p>
<p>По словам Apple, <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a> не является критической. Эта демонстрация свидетельствует об обратном.
</p></blockquote>
<p><span id="more-196"></span></p>
<p>Вопросы, возникающие при прочтении:</p>
<ol>
<li><strong>Если уязвим Safari, почему нужно запускать Internet Explorer?</strong> На мой взгляд, найденная "смешанная уязвимость" свидетельствует о том, что ограничить нужно как раз-таки использование Ишака, пока Micro$oft не выпустит патч.</li>
<li>Фраза "следует ограничить использование Safari до тех пор, пока не выйдет патч"&nbsp;&mdash;&nbsp;это свидетельство <em>нечестной</em> борьбы&nbsp;&mdash;&nbsp;более честным было бы выложить описание как изменить настройки Safari, чтобы не подвергать риску уязвимости Windows.</li>
</ol>
<p>Озвучив для себя эти вопросы, я решил найти <a href="http://liudieyu0.blog124.fc2.com/blog-entry-1.html">оригинал статьи</a>, благо это было нетрудно.</p>
<p>Две фразы, которые мне очень понравились:</p>
<ol>
<li><q>Microsoft used some vague wording in the <a href="http://www.microsoft.com/technet/security/advisory/953818.mspx" rel="nofollow">advisory</a>: "Suggested Actions" are "Restrict use of Safari as a web browser&hellip;", <em>as if it's a flaw rooted in Safari</em>.</q></li>
<li>
<blockquote>In sub-folder of "Suggested Actions" Microsoft admits "Workarounds" as <q>Change the download location of content in Safari to a newly created directory</q>. The <em>full statement</em> should be <em>"Change the download location of content in Safari to a newly created directory(to save the integrity of Windows Internet Explorer)"</em>.<br />
</blockquote>
</li>
</ol>
<p>Причем, судя по всему, фраза "Change the download location of content in Safari" появилась только 6 июня (то есть почти через неделю после того, как статья была опубликована на сайте Microsoft).</p>
<p>Теперь несколько слов об уязвимости. Права ли Microsoft, обвиняя Safari в уязвимости? Я согласен, загрузка файла без разрешения пользователя&nbsp;&mdash;&nbsp;это не хорошо. Но что заставляет Internet Explorer открывать этот файл? Ответ прост: Windows. То есть уязвимость здесь в <em>ядре Windows</em>, даже не в Internet Explorer. Объясню почему. В своём тестовом примере Liu Die Yu показывает, что в том, что Internet Explorer запускает Блокнот, "виновато" имя файла, который Safari сохраняет&nbsp;&mdash;&nbsp;<code>schannel.dll</code> (также сработают <code>sqmapi.dll</code> и <code>imageres.dll</code>).</p>
<p>Причина уязвимости здесь заключается в <em>порядке поиска динамических библиотек</em> (кому интересны все технические подробности&nbsp;&mdash;&nbsp;читайте MSDN про функции <code>LoadLibrary</code> и <code>LoadLibraryEx</code>). Идея состоит в том, что <code>LoadLibrary</code> ищет загружаемую библиотеку в <em>рабочем каталоге</em> (перед тем, как искать ее в системном каталоге). При запуске Ишака с Рабочего стола рабочим каталогом является Рабочий стол (вполне логично). Далее IE загружает библиотеки, дело доходит до <code>schannel.dll</code>. Благодаря стараниям Safari, на Рабочем столе файл с таким именем имеется; в результате Windows загружает именно его. А он выполняет своё "черное дело".</p>
<p>В итоге получаем, что в ядро Windows эта уязвимость была встроена изначально&nbsp;&mdash;&nbsp;что называется, "уязвимость по дизайну". Я бы на месте Некрософт не баги бы в Safari искал (хотя молодцы, ничего не скажешь: обставили уязвимость в ядре так, что виноват оказался другой продукт), а свои собственные ошибки исправлял <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>По сути дела, "уязвимой" может оказаться любая программа, которая положит что-нибудь на Рабочий стол. Кстати, и FireFox можно обвинить в "уязвимости", даже если он спросит пользователя о сохранении файла: многие пользователи очень доверчивы (к сожалению), и сохранят файл, если их попросят. А так как, по словам Microsoft, большинство пользователей оставляют настройки по умолчанию, то файл попадет на Рабочий стол.</p>
<p>Так что, господа Microsoft'овцы, исправляйте вы лучше свои ошибки, а не обвиняйте в них сторонние программы <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/196-vulnerability-in-safari-for-windows-proves-critical/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/196-vulnerability-in-safari-for-windows-proves-critical/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Кто живёт у нас в системе, или, как просмотреть полный список сервисных процессов в Windows</title>
		<link>http://blog.sjinks.pro/c-cpp/69-who-lives-in-my-system-how-to-display-full-list-of-service-processes/</link>
		<comments>http://blog.sjinks.pro/c-cpp/69-who-lives-in-my-system-how-to-display-full-list-of-service-processes/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 09:42:46 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[сервис]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=69</guid>
		<description><![CDATA[Маленькая программа для отображения полного списка установленных сервисных процессов Не секрет, что список сервисных процессов (служб), отображаемый Windows (например, при помощи консоли services.msc), является далеко не полным. Когда-то давно меня заинтересовало, как же можно посмотреть, какие службы/драйвера/системные процессы живут в системе. Самое простое решение&#160;&#8212;&#160;открыть Редактор реестра (regedit) и посмотреть. Список сервисов и не только находится [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/c-cpp/69-who-lives-in-my-system-how-to-display-full-list-of-service-processes/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Маленькая программа для отображения полного списка установленных сервисных процессов</em></h2>
<p>Не секрет, что список сервисных процессов (служб), отображаемый <a href="http://blog.sjinks.pro/tag/windows/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Windows">Windows</a> (например, при помощи консоли <code>services.msc</code>), является <em>далеко</em> не полным. Когда-то давно меня заинтересовало, как же можно посмотреть, какие службы/драйвера/системные процессы живут в системе.<span id="more-69"></span></p>
<p>Самое простое решение&nbsp;&mdash;&nbsp;открыть Редактор реестра (<code>regedit</code>) и посмотреть. Список сервисов и не только находится в <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services</code>. Однако по тем данным, которые представлены в реестре, трудно определить, какая из служб работает в данный момент времени, чем она является (напрмер, драйвером ядра или драйвером файловой системы) и&nbsp;т.п.</p>
<p>В <a href="http://blog.sjinks.pro/tag/microsoft/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Microsoft">Microsoft</a> Windows Recovery Console есть команда, <code>listsvc</code>, позволяющая получить полный список сервисных процессов. Мне стало интересно написать что-то подобное, и вот результат:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p694">
        <div class="code c" id="p69code4">
<ol class="c" style="font-family:monospace;"><li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
<li class="li1"><div class="de1"><span class="co2">#include &lt;windows.h&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="co2">#include &lt;stdlib.h&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="co2">#include &lt;stdio.h&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="co2">#include &lt;string.h&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> unknown_error <span class="sy0">=</span> <span class="st0">&quot;&lt;Unknown error!&gt;&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> get_error_code<span class="br0">&#40;</span>DWORD dwCode<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> msgbuf<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><span class="sy0">!</span>FormatMessage<span class="br0">&#40;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FORMAT_MESSAGE_ALLOCATE_BUFFER <span class="sy0">|</span> FORMAT_MESSAGE_FROM_SYSTEM <span class="sy0">|</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FORMAT_MESSAGE_IGNORE_INSERTS<span class="sy0">,</span> NULL<span class="sy0">,</span> dwCode<span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MAKELANGID<span class="br0">&#40;</span>LANG_NEUTRAL<span class="sy0">,</span> SUBLANG_DEFAULT<span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span>LPTSTR<span class="br0">&#41;</span><span class="sy0">&amp;</span>msgbuf<span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0<span class="sy0">,</span> NULL</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span> <span class="sy0">?</span> unknown_error <span class="sy0">:</span> msgbuf<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> servicetypes<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;File System Driver&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Kernel Driver&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Own Process&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Share Process&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Unknown&quot;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> get_service_type<span class="br0">&#40;</span>DWORD dwType<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; size_t i <span class="sy0">=</span> <span class="nu0">4</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SERVICE_FILE_SYSTEM_DRIVER <span class="sy0">==</span> <span class="br0">&#40;</span>dwType <span class="sy0">&amp;</span> SERVICE_FILE_SYSTEM_DRIVER<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>SERVICE_KERNEL_DRIVER <span class="sy0">==</span> <span class="br0">&#40;</span>dwType <span class="sy0">&amp;</span> SERVICE_KERNEL_DRIVER<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; i <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>SERVICE_WIN32_OWN_PROCESS <span class="sy0">==</span> <span class="br0">&#40;</span>dwType <span class="sy0">&amp;</span> SERVICE_WIN32_OWN_PROCESS<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; i <span class="sy0">=</span> <span class="nu0">2</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>SERVICE_WIN32_SHARE_PROCESS <span class="sy0">==</span> <span class="br0">&#40;</span>dwType <span class="sy0">&amp;</span> SERVICE_WIN32_SHARE_PROCESS<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; i <span class="sy0">=</span> <span class="nu0">3</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> servicetypes<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> states<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;stopped&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;start pending&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;stop pending&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;running&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;continue pending&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;pause pending&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;paused&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="st0">&quot;unknown&quot;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> get_state<span class="br0">&#40;</span>DWORD dwState<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sy0">--</span>dwState<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="br0">&#41;</span>dwState <span class="sy0">&gt;</span> 6<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; dwState <span class="sy0">=</span> <span class="nu0">7</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> states<span class="br0">&#91;</span>dwState<span class="br0">&#93;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc<span class="sy0">,</span> <span class="kw4">char</span><span class="sy0">*</span> argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; SC_HANDLE Handle<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; BOOL Status<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; LPENUM_SERVICE_STATUS Buffer <span class="sy0">=</span> NULL<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; DWORD BytesNeeded<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; DWORD ServicesReturned<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; DWORD ResumeHandle<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; DWORD Error<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; DWORD i<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw4">const</span> <span class="kw4">char</span><span class="sy0">*</span> ErrCode<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Handle <span class="sy0">=</span> OpenSCManager<span class="br0">&#40;</span>NULL<span class="sy0">,</span> NULL<span class="sy0">,</span> SC_MANAGER_CONNECT <span class="sy0">|</span> SC_MANAGER_ENUMERATE_SERVICE<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>NULL <span class="sy0">==</span> Handle<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ErrCode <span class="sy0">=</span> get_error_code<span class="br0">&#40;</span>GetLastError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;Call to OpenSCManager failed: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> ErrCode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; LocalFree<span class="br0">&#40;</span><span class="br0">&#40;</span>HLOCAL<span class="br0">&#41;</span>ErrCode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> EXIT_FAILURE<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; ResumeHandle <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Status <span class="sy0">=</span> EnumServicesStatus<span class="br0">&#40;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Handle<span class="sy0">,</span> SERVICE_DRIVER <span class="sy0">|</span> SERVICE_WIN32<span class="sy0">,</span> SERVICE_STATE_ALL<span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Buffer<span class="sy0">,</span> 0<span class="sy0">,</span> <span class="sy0">&amp;</span>BytesNeeded<span class="sy0">,</span> <span class="sy0">&amp;</span>ServicesReturned<span class="sy0">,</span> <span class="sy0">&amp;</span>ResumeHandle</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Error <span class="sy0">=</span> GetLastError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>FALSE <span class="sy0">==</span> Status <span class="sy0">&amp;&amp;</span> ERROR_MORE_DATA <span class="sy0">==</span> Error<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Buffer <span class="sy0">=</span> <span class="br0">&#40;</span>LPENUM_SERVICE_STATUS<span class="br0">&#41;</span>calloc<span class="br0">&#40;</span>BytesNeeded<span class="sy0">,</span> 1<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>NULL <span class="sy0">==</span> Buffer<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;Failed to allocate %ld bytes of memory!<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> BytesNeeded<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseServiceHandle<span class="br0">&#40;</span>Handle<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> EXIT_FAILURE<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Status <span class="sy0">=</span> EnumServicesStatus<span class="br0">&#40;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Handle<span class="sy0">,</span> SERVICE_DRIVER <span class="sy0">|</span> SERVICE_WIN32<span class="sy0">,</span> SERVICE_STATE_ALL<span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Buffer<span class="sy0">,</span> BytesNeeded<span class="sy0">,</span> <span class="sy0">&amp;</span>BytesNeeded<span class="sy0">,</span> <span class="sy0">&amp;</span>ServicesReturned<span class="sy0">,</span> <span class="sy0">&amp;</span>ResumeHandle</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>FALSE <span class="sy0">==</span> Status<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ErrCode <span class="sy0">=</span> get_error_code<span class="br0">&#40;</span>GetLastError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;Call to EnumServicesStatus failed: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> ErrCode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LocalFree<span class="br0">&#40;</span><span class="br0">&#40;</span>HLOCAL<span class="br0">&#41;</span>ErrCode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; free<span class="br0">&#40;</span>Buffer<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseServiceHandle <span class="br0">&#40;</span>Handle<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> EXIT_FAILURE<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ErrCode <span class="sy0">=</span> get_error_code<span class="br0">&#40;</span>GetLastError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;Call to EnumServicesStatus failed: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> ErrCode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; LocalFree<span class="br0">&#40;</span><span class="br0">&#40;</span>HLOCAL<span class="br0">&#41;</span>ErrCode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; CloseServiceHandle<span class="br0">&#40;</span>Handle<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> EXIT_FAILURE<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw3">printf</span> <span class="br0">&#40;</span><span class="st0">&quot;Service<span class="es1">\t</span>Display Name<span class="es1">\t</span>Type<span class="es1">\t</span>State<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">&lt;</span>ServicesReturned<span class="sy0">;</span> <span class="sy0">++</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">printf</span> <span class="br0">&#40;</span><span class="st0">&quot;%s<span class="es1">\t</span>%s<span class="es1">\t</span>%s<span class="es1">\t</span>%s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Buffer<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">lpServiceName</span><span class="sy0">,</span> Buffer<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">lpDisplayName</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; get_service_type<span class="br0">&#40;</span>Buffer<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">ServiceStatus</span>.<span class="me1">dwServiceType</span><span class="br0">&#41;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; get_state<span class="br0">&#40;</span>Buffer<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">ServiceStatus</span>.<span class="me1">dwCurrentState</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; free<span class="br0">&#40;</span>Buffer<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; CloseServiceHandle<span class="br0">&#40;</span>Handle<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> EXIT_SUCCESS<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/*-------------------------------------------------------------------------*/</span></div></li>
</ol>
        </div>
    </div>
</div>

<p>Хотя это код трёхгодичной давности, работает до сих пор <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://d.sjinks.pro/listsvc.c">Скачать исходный код listsvc</a>.<br />
<a href="http://d.sjinks.pro/listsvc.exe">Скачать EXE-файл (7168&nbsp;байт)</a>.</p>
<p>Сумма <abbr title="Message Digest 5">MD5</abbr> listsvc.exe: <code>a04735a4ea104d96af78d234ae4e35b6</code><br />
Сумма <abbr title="Secure Hash Algorithm-1">SHA1</abbr> listsvc.exe: <code>6d24bf22e48fc8f8e2b8a49f9fce51e973ff0a00</code></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/c-cpp/69-who-lives-in-my-system-how-to-display-full-list-of-service-processes/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/c-cpp/69-who-lives-in-my-system-how-to-display-full-list-of-service-processes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка nginx и PHP/FastCGI в Windows</title>
		<link>http://blog.sjinks.pro/windows/58-nginx-php-fastcgi-in-windows/</link>
		<comments>http://blog.sjinks.pro/windows/58-nginx-php-fastcgi-in-windows/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 06:14:02 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[nginx]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/windows/58-nginx-php-fastcgi-in-windows/</guid>
		<description><![CDATA[Как настроить связку nginx+PHP в Windows и не иметь головной боли. Принято считать, что замечательный Web-сервер nginx работает только под Unix-подобными операционными системами. Верно, но лишь отчасти. nginx превосходно собирается и в Cygwin. Возникает вопрос: а зачем это надо, собирать nginx под Windows? Ответ: я знаю достаточно много web-разработчиков, работающих в силу тех или иных [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/58-nginx-php-fastcgi-in-windows/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как настроить связку <a href="http://blog.sjinks.pro/tag/nginx/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  nginx">nginx</a>+<a href="http://blog.sjinks.pro/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a> в <a href="http://blog.sjinks.pro/tag/windows/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Windows">Windows</a> и не иметь головной боли.</em></h2>
<p>Принято считать, что замечательный Web-сервер <a href="http://nginx.net/"><strong>nginx</strong></a> работает только под Unix-подобными операционными системами. Верно, но лишь отчасти. nginx превосходно собирается и в <a href="http://blog.sjinks.pro/tag/cygwin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Cygwin">Cygwin</a>. Возникает вопрос: а зачем это надо, собирать nginx под Windows? Ответ: я знаю достаточно много web-разработчиков, работающих в силу тех или иных причин под Windows. И в работе встречаются ситуации, когда на рабочей машине нужно создать конфигурацию, максимально похожую на конфигурацию сервера (production или development в данном случае не важно).<span id="more-58"></span></p>
<p>Начну с примера: есть сайт, который позволяет зарегистрированным пользователям скачивать что-либо (музыку, программы, фильмы &mdash; не суть важно). Одним из самых распространённых решений в этом случае является использование нескольких серверов. Во многих конфигурациях, которые я видел, "web-мордой" занимается Apache, а на обслуживании закачек стоит nginx+PHP+<a href="http://blog.sjinks.pro/tag/fastcgi/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  FastCGI">FastCGI</a> (PHP занимается вопросами авторизации, ведения статистики и т.п.). Сразу оговорюсь, что есть альтернативное решение, когда nginx используется в качестве reverse proxy перед Apache &mdash; nginx проксирует запросы к PHP-скриптам Apache, а PHP-скрипт, если ему надо отдать что-то статическое, делает X-Accel-Redirect. Подробнее описано в статьях «<a href="http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/">Использование X-Accel-Redirect с Nginx для реализации контролируемых скачиваний</a>» и «<a href="http://blog.kovyrin.net/2006/05/18/nginx-as-reverse-proxy/">Использование Nginx Как Reverse-Proxy Сервера На Загруженных Сайтах</a>».</p>
<p>Отвлекусь от темы и скажу пару слов про альтернативную конфигурацию: она работает на «ура», если сайт отдаёт в основном статический контент. Если же б<em>о</em>льшая часть запросов идёт к PHP, то логичнее поставить nginx <em>за</em> Apache (в противном случае будет тратиться время на проксирование запроса). Еще один минус у такой конфигурации — использование менеджеров закачек (всякие там ReGet, FlashGet) "ложит" Apache. Можно, конечно, ввести ограничения на одновременное количество закачек, а можно настроить PHP работать в паре с nginx.</p>
<p>Возвращаясь к теме разговора: а теперь предположим, что это всё нужно реализовать локально (для тестирования). Вот в таких ситуациях nginx для Windows очень хорошо помогает <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>В Cygwin сборка nginx проходит практически без проблем (хотя более старые версии приходилось немного патчить руками), на выходе получаем nginx.exe <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Я не буду вдаваться в детали конфигурирования nginx, потому что есть замечательная статья «<a href="http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/">Настройка Nginx для поддержки PHP при помощи FastCGI</a>», просто отмечу некоторые детали, упрощающие жизнь.</p>
<p>Итак, у нас есть PHP, Cygwin и nginx. К сожалению, nginx не поддерживает PHP как модуль (подобно Apache), поэтому nginx и PHP могут работать только по протоколу FastCGI (возможно, и по обычному <abbr title="Common Gateway Interface">CGI</abbr>, я не пробовал — в любом случае, производительность при работе через CGI будет значительно ниже).</p>
<p>Для определённости будем полагать, что nginx у нас сконфигурирован следующим образом (я привожу только часть, относящуюся к FastCGI):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5810">
        <div class="code nginx" id="p58code10">
<span class="kw1">location</span> ~ \.php$ {<br />
&nbsp; &nbsp; <span class="kw1">fastcgi_pass</span> &nbsp; 127.0.0.1:<span class="nu0">9000</span>;<br />
&nbsp; &nbsp; <span class="kw1">fastcgi_index</span> &nbsp;<span class="kw1">index</span>.php;<br />
&nbsp; &nbsp; <span class="kw1">fastcgi_param</span> &nbsp;SCRIPT_FILENAME &nbsp;disk:/path/to$fastcgi_script_name;<br />
&nbsp; &nbsp; <span class="kw1">include</span> &nbsp; &nbsp; &nbsp; &nbsp;conf/fastcgi_params;<br />
}
        </div>
    </div>
</div>

<p><strong>Ключевой момент:</strong> в <code>fastcgi_param</code> должен быть путь, который поймёт интерпретатор PHP. Если интерпретатор собран в Windows, то путь тоже должен быть в формате Windows (например, c:/web/mysite.com/scripts). Хвостового слэша быть не должно, потому что <code>$fastcgi_script_name</code> именно с него и начинается. То есть если пользователь запросил http://mysite.com/test.php, то <code>$fastcgi_script_name</code> будет равен <code>/test.php</code>.</p>
<p>Файл conf/fastcgi_params:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5811">
        <div class="code nginx" id="p58code11">
<span class="kw1">fastcgi_param</span> &nbsp;QUERY_STRING &nbsp; &nbsp; &nbsp; $query_string;<br />
<span class="kw1">fastcgi_param</span> &nbsp;REQUEST_METHOD &nbsp; &nbsp; $request_method;<br />
<span class="kw1">fastcgi_param</span> &nbsp;CONTENT_TYPE &nbsp; &nbsp; &nbsp; $content_type;<br />
<span class="kw1">fastcgi_param</span> &nbsp;CONTENT_LENGTH &nbsp; &nbsp; $content_length;<br />
<br />
<span class="kw1">fastcgi_param</span> &nbsp;SCRIPT_NAME &nbsp; &nbsp; &nbsp; &nbsp;$fastcgi_script_name;<br />
<span class="kw1">fastcgi_param</span> &nbsp;REQUEST_URI &nbsp; &nbsp; &nbsp; &nbsp;$request_uri;<br />
<span class="kw1">fastcgi_param</span> &nbsp;DOCUMENT_URI &nbsp; &nbsp; &nbsp; $document_uri;<br />
<span class="kw1">fastcgi_param</span> &nbsp;DOCUMENT_ROOT &nbsp; &nbsp; &nbsp;$document_root;<br />
<span class="kw1">fastcgi_param</span> &nbsp;SERVER_PROTOCOL &nbsp; &nbsp;$server_protocol;<br />
<br />
<span class="kw1">fastcgi_param</span> &nbsp;GATEWAY_INTERFACE &nbsp;CGI/<span class="nu0">1.1</span>;<br />
<span class="kw1">fastcgi_param</span> &nbsp;SERVER_SOFTWARE &nbsp; &nbsp;nginx;<br />
<br />
<span class="kw1">fastcgi_param</span> &nbsp;REMOTE_ADDR &nbsp; &nbsp; &nbsp; &nbsp;$remote_addr;<br />
<span class="kw1">fastcgi_param</span> &nbsp;REMOTE_PORT &nbsp; &nbsp; &nbsp; &nbsp;$remote_port;<br />
<span class="kw1">fastcgi_param</span> &nbsp;SERVER_ADDR &nbsp; &nbsp; &nbsp; &nbsp;$server_addr;<br />
<span class="kw1">fastcgi_param</span> &nbsp;SERVER_PORT &nbsp; &nbsp; &nbsp; &nbsp;$server_port;<br />
<span class="kw1">fastcgi_param</span> &nbsp;SERVER_NAME &nbsp; &nbsp; &nbsp; &nbsp;$server_name;<br />
<br />
<span class="co1"># PHP only, required if PHP was built with --enable-force-cgi-redirect</span><br />
<span class="kw1">fastcgi_param</span> &nbsp;REDIRECT_STATUS &nbsp; &nbsp;<span class="nu0">200</span>;
        </div>
    </div>
</div>

<p>Для удобства, установим nginx как <a href="http://blog.sjinks.pro/tag/service/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  сервис">сервис</a> Windows. Для этого можно использовать, например, cygrunsrv:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5812">
        <div class="code bash" id="p58code12">
cygrunsrv <span class="re5">--install</span> nginx <span class="re5">--path</span> <span class="sy0">/</span>path<span class="sy0">/</span>to<span class="sy0">/</span>nginx.exe <span class="re5">--disp</span> nginx <span class="re5">--neverexits</span>
        </div>
    </div>
</div>

<p>Ключевым здесь является параметр <code>--neverexits</code> — без него Windows будет жаловаться, что процесс был остановлен (из-за того, что nginx <code>fork()</code>'ается). Хотя это неправильное использование <code>--neverexits</code>.</p>
<p>Переходим к настройке PHP. По счастью, в Windows-версии PHP уже есть модуль с поддержкой FastCGI (он называется php-cgi.exe), так что пересобирать PHP не придётся (сборка PHP под Cygwin — неблагодарное занятие из-за парочки глюков в libtool; если у меня будет желание, как-нибудь напишу). В <a href="http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/">статье</a> приводится скрипт для запуска PHP/FastCGI, но мы поступим проще.</p>
<p>Сначала об одной не очень документированной особенности PHP/FastCGI: он имеет тенденцию «незаметно умирать» после некоторого числа запросов. Это связано со значением переменной окружения <code>PHP_FCGI_MAX_REQUESTS</code>, определяющей, какое максимальное количество запросов может «пережить» PHP. Можно, кончено, поставить «космическое» значение, но 2 миллиарда запросов — так ли это много? <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  На отрицательные значения переменной PHP громко ругается. Экспериментально было выяснено, что 0 — это то, что нужно (в документации я это не нашел).</p>
<p>Запускаем PHP:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5813">
        <div class="code bash" id="p58code13">
<span class="kw1">set</span> <span class="re2">PHP_FCGI_MAX_REQUESTS</span>=0<br />
php-cgi <span class="re5">-b</span> 127.0.0.1:9000 <span class="re5">-c</span> path<span class="sy0">/</span>to<span class="sy0">/</span>php.ini
        </div>
    </div>
</div>

<p>А теперь как установить PHP/FastCGI сервисом Windows:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5814">
        <div class="code bash" id="p58code14">
cygrunsrv <span class="re5">--install</span> php-cgi <span class="re5">--path</span> <span class="sy0">/</span>cygdrive<span class="sy0">/</span>f<span class="sy0">/</span>web<span class="sy0">/</span>php<span class="sy0">/</span>php-cgi.exe <span class="re5">--disp</span> <span class="st0">&quot;PHP/FastCGI&quot;</span> <span class="re5">--env</span> <span class="st0">&quot;PHP_FCGI_MAX_REQUESTS=0&quot;</span> <span class="re5">--args</span> <span class="st0">&quot;-b 127.0.0.1:9000 -c path/to/php.ini&quot;</span>
        </div>
    </div>
</div>

<p>Строка <code>-b 127.0.0.1:9000 -c path/to/php.ini</code> будет передана интерпретатору в качестве командной строки, поэтому путь <code>path/to/php.ini</code> должен быть путем Windows, если интепретатор собран под Windows.</p>
<p>Собственно, всё <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/58-nginx-php-fastcgi-in-windows/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/windows/58-nginx-php-fastcgi-in-windows/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Если Service Pack 2 не ставится на Windows XP&#8230;</title>
		<link>http://blog.sjinks.pro/windows/56-when-sp2-fails-to-install-on-windows-xp/</link>
		<comments>http://blog.sjinks.pro/windows/56-when-sp2-fails-to-install-on-windows-xp/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 07:07:27 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[SP2]]></category>
		<category><![CDATA[Windows XP]]></category>
		<category><![CDATA[активация]]></category>
		<category><![CDATA[инсталляция]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/windows/56-when-sp2-fails-to-install-on-windows-xp/</guid>
		<description><![CDATA[Как поставить SP2 на Windows XP с заблокированным ключом продукта Если инсталляция второго пакета обновлений Windows XP (aka Service Pack 2) аварийно завершается со словами "Внутренняя ошибка" на стадии "Проверка ключа продукта", значит, вы плохо активировали Windows Это особенно относится к читателям статей типа "Лицензионный Windows XP всем и каждому" Сценарий: не оказалось под рукой [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/56-when-sp2-fails-to-install-on-windows-xp/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как поставить <a href="http://blog.sjinks.pro/tag/sp2/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  SP2">SP2</a> на <a href="http://blog.sjinks.pro/tag/windows-xp/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Windows XP">Windows XP</a> с заблокированным ключом продукта</em></h2>
<p>Если <a href="http://blog.sjinks.pro/tag/installation/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  инсталляция">инсталляция</a> второго пакета обновлений <a href="http://blog.sjinks.pro/tag/windows/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Windows">Windows</a> XP (aka <em>Service Pack 2</em>) аварийно завершается со словами "Внутренняя ошибка" на стадии "Проверка ключа продукта", значит, вы плохо активировали Windows <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Это особенно относится к читателям статей типа "Лицензионный Windows XP всем и каждому" <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <span id="more-56"></span></p>
<p>Сценарий: не оказалось под рукой нормального установочного диска с WinXP Pro SP2, пришлось ставить "голую" XP Pro безо всяких <a href="http://blog.sjinks.pro/tag/service/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  сервис">сервис</a>-паков, активировать ее и ставить кучу обновлений. <abbr title="Windows Genuine Advantage">WGA</abbr> говорит, что с лицензией всё в порядке, Windows подлинная, а SP2 устанавливаться отказывается. Как такое возможно? Да очень просто: патченная WGA и ключик продукта в блэклисте.</p>
<p>По счастью, лечится просто.<br />
При установке Windows создаёт весьма полезную папочку &mdash; что-то вида <code>WINDOWS\repair</code>. В ней хранится полезный файлик с именем <code>software</code>. Так вот, этот файлик &mdash; часть реестра (<code>HKEY_LOCAL_MACHINE\Software</code>). Этот файлик нужно испортировать в реестр. Для этого запускаем regedit, создаем где-нибудь раздел (например, <code>test</code>) и в него импортируем (через Файл - Импорт) файл с <code>%WINDIR%\repair\software</code> (в поле "Тип файлов" нужно предварительно поставить "Файлы кустов реестра"). Windows выдаст предупреждение, что "<em>Раздел будет восстановлен поверх раздела: test. Все параметры и подразделы будут удалены</em>". Нажимаем "Да", и через некоторое время в подразделе test появится копия <code>HKEY_LOCAL_MACHINE\Software</code>, созданного при установке. Допустим, что наш раздел test находится в том же <code>HKEY_LOCAL_MACHINE</code>. Заходим в подраздел <code>HKEY_LOCAL_MACHINE\test\Software\<a href="http://blog.sjinks.pro/tag/microsoft/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Microsoft">Microsoft</a>\Windows NT\CurrentVersion</code>. Оттуда нам нужны следующие значения (ибо обычно именно они меняются активаторами):</p>
<ul>
<li><code>CurrentBuild</code>;</li>
<li><code>InstallDate</code>;</li>
<li><code>ProductId</code>;</li>
<li><code>DigitalProductId</code>;</li>
<li><code>LicenseInfo</code>.</li>
</ul>
<p>и копируем их в <code>HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion</code>.</p>
<p>Аналогично поступаем с <code>OOBETimer</code> и <code>LastWPAEventLogged</code> из <code>HKEY_LOCAL_MACHINE\test\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WPAEvents</code> &mdash; их копируем в <code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WPAEvents</code>. После этого запускаем инсталляцию SP2 и радуемся жизни <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>А дальше? Не знаю, сервис-пак еще устанавливается <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/windows/56-when-sp2-fails-to-install-on-windows-xp/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/windows/56-when-sp2-fails-to-install-on-windows-xp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

