﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-IT随笔--海之蓝-随笔分类-学习笔记</title><link>http://www.cnitblog.com/lym520/category/2290.html</link><description>—— 只有敢于攀登顶峰的人，才能将顶峰踩在脚下。&amp;nbsp; &lt;br /&gt;
   
—— 不怕失败，超越自我。</description><language>zh-cn</language><lastBuildDate>Sun, 02 Oct 2011 15:37:21 GMT</lastBuildDate><pubDate>Sun, 02 Oct 2011 15:37:21 GMT</pubDate><ttl>60</ttl><item><title>Windows管理员的三大心愿之一限制Windows用户的并发登录</title><link>http://www.cnitblog.com/lym520/archive/2006/07/11/13495.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Tue, 11 Jul 2006 04:51:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/07/11/13495.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/13495.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/07/11/13495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/13495.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/13495.html</trackback:ping><description><![CDATA[
		<div style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">
				<a name="#top">
						<div class="text1">专栏作品</div>
				</a>
				<div class="text2">Windows管理员的三大心愿之一限制Windows用户的并发登录<br />陈流浩 
<hr color="#cccccc" size="1" /></div>
				<div>
						<textarea class="content" style="WIDTH: 946px; HEIGHT: 684px" rows="32" readonly="" cols="103">    可能就是这篇文章的题目吸引了你，也可能你曾经也有过同样的心愿—管理并限制Windows网络中的用户登录限制。而且你曾经为此一筹莫展，渴望解决Windows网络中因为用户任意登录所导致资源管理，用户管理，安全审核等一系列问题。我在这里（包括下文，有时也会称为并发登录）所提到的任意登录是指同一时间，同一个用户账号在不同的计算机上同时登录的现象，或者说是在一台计算机登录，在完成工作后并未注册但又在另一台计算机上登录的现象，并不是指任何时间，任何地点在一台计算机上登录的现象。如果你曾经管理过Novell网络，后来转换到Windows网络，你会因为Windows没有提供这种机制而对那些不守规矩的用户行为感到无可奈何。因为作为一名Novell管理员非常清楚，限制用户账号的并发登录，仅仅是NDS（Novell Directory Service，Novell目录服务，与Windows 2000中的Active Directory一样，旨在提供一种单点登录，统一资源管理的手段，都是基于X.500标准设计，但NDS的某些方面可能强于Windows 2000的Active Directory，并发登录限制就是一个典型）对象的一个“Check Box”，唯一要做的是Enable或者是Disable。
    用户账号在同一时间内并发登录，所产生的最大问题还是与内部或者外部网络的安全相关。例如，你是一个网络的管理员，你为自己创建了一个登录账号，因为平时管理工作的需要，你给这个账号添加了足够的权限，而且你坚信：我的网络是安全的，我的同事也是相互尊重，不会利用别人的账号作任何事情的。为了自己方便记忆（或者说登录时输入简单），你设置了一个很容易记忆（比如，123456或者与你的用户名相同），但就是因为Windows网络没有并发登录限制机制，那些对网络特权账户充满好奇心（因为他知道有特权可以做很多事情），或者平时对你稍有不满的用户试图利用你的账号做什么事情（因为你设置的密码简单，容易被猜到，而且你还相信他们不会做什么），你都无法知道，这尤如恶梦一般。那怕你设置了安全审核，但审核结果还是你自己的登录账号，这显然是Windows没有并发登录限制所导致的问题。
    直到现在的Windows 2000为止，Microsoft都没有在系统中内置限制用户并发登录的机制（如果你已经预览过Windows Server 2003，你会发现它也没有这种机制）。当然，Microsoft并不是没有倾听用户的心声，因此，Microsoft在他的Windows 2000 Resource Kit中提供了一个程序来实现这种功能，试图来掩盖普天之下众多Windows管理员的谴责声。显然，Microsoft在这方面已经向前迈进了一大步，通过本文你会了解到，到目前为止，Microsoft究竟提供了一个怎么样的解决方案，这个解决方案是否已经一呼百应，实现了Window管理员多年来的夙愿，当然包括我。首先，我们来回顾一下在没有Microsoft自己的解决方案之前，我们Windows管理员自己是如何尝试着解决这个问题的。
    一、脚本程序
    作为一名Windows管理员，想必你肯定知道脚本在日常管理工作中的重要性，比如，批量创建用户。而且我们还知道，利用脚本可以为用户创建登录脚本，在登录脚本中，你可以为用户映射网络驱动器，连接打印机等等。聪明的Windows管理员就是利用脚本第一次实现了并发登录限制，让我们一起看看是如何实现的。
    使用Kixtart脚本处理器制作如下的一个脚本程序。Kixtart是一个可以运行在Windows各个版本上增强的脚本处理引擎。如果你要测试文章中的脚本程序，你需要安装Kixtart程序。有关Kixtart的详细信息，可以访问http://kixtart.org/站点。与Kixtart配合使用的部分程序，请到对应的操作系统安装盘中相应的support目录或者Resource中查找。
    注意，脚本程序中的Onlyonce.txt是保存在Netlogon共享目录中，它一般包括一些警告与说明信息，可以任意定义。
    这个脚本看起来有点复杂。但是，它工作得很好。除了程序本身，管理员还需要做二项工作。首先，为每个用户的主目录（Home Directory）创建一个隐藏共享，指定只有这个用户可以访问并且仅允许一个用户访问（这个很重要）。其次，在用户主目录中创建一个%username%.txt文件，并且指定仅对这个用户具有读取权限。
    从上面简单的解释中大家应该已经猜到脚本实现的原理，非常简单：限制主目录仅允许一个用户访问，如果同一个用户在没有注销的前提下尝试登录，映射网络驱动器将失败，系统显示Onlyonce.txt中的内容，然后调用shutdown防止用户登录。
    我想精明的读者已经发现NTName/NTName2正常运行时会受到的威胁—主目录的服务器关闭时，用户将可以任何登录，你再也无法阻止他们的这种行为。另一个缺陷就是当另一个用户故意或者偶然地连接到其他用户的主目录，在他不离开（尽管拒绝他访问，但已经连接）的情况下，主目录的所有者将不能登录（因为已经设置同时仅限一个用户连接）。
    二、一个更简单的手段
    Windows管理员们在不断地寻找更好的解决方案。所有的努力并没有白白浪费，终于有了更好的选择。NTName—一个Windows NT网络中限制用户账号并发登录的实用程序，我们可能不记得是由哪位Windows管理员编写的，但我们肯定可以发现这个比前面的脚本程序有很大的进步。与NTName程序配套使用的是Logout程序，一个强制注销的程序。让我们粗略地看一下NTName的实现。
    当你登录到NT网络时，计算机会添加一个由你的用户名组成的NetBIOS名字，名字是唯一的，因此同一时间内它只能存在于一台计算机上，在计算机中的Byte 16值等于0x03，这个名字用来在网络中广播信息，比如，假设你已经要求打印作业完成后显示消息，Windows网络就根据你登录时产生的NetBIOS名字决定你当前登录的计算机，并显示已经完成的消息（你可以测试，假如你并发登录20个用户，只会有一台计算机接到这个消息。）。NTName就是根据这个原理来实现的，在程序运行时，它把用户名作为一个参数处理，检查这个名字是否属于当前计算机所有。如果没有任何输出，就返回ErrorLevel 0。如果输入了名字所属的系统名称，返回ErrorLevel 1，这往往意味着指定的用户名已经在另一台计算机中登录，当然你可以要求另一台计算机注销。为此，你可以在用户的登录脚本中添加以下几行：
</textarea>
						<div style="BACKGROUND-COLOR: #eeeeee">
								<pre class="text5">NTName %USERNAME% &gt;%TEMP%\LOGONEDPC.TXT ;重定向到logonedpc.txt文件
If not errorlevel 1 goto Logon_OK
For /f %%f in(‘TYPE %TEMP%\LOGONEDPC.TXT’) do @echo 已经登录到%%f %0..\logout.exe
：Logon_OK
</pre>
						</div>
						<textarea class="content" style="WIDTH: 967px; HEIGHT: 456px" rows="22" readonly="" cols="105">    当然，你还可以使用前面提到的Kixtart修饰一下这个程序。但有一点要注意，如果允许用户看提示信息的时间过长，意味着用户有足够的时间来终止logout.exe的执行。
    但是，这个NTName存在明显的不足，就是在多域的情况下，它会影响另一个域中同名账号的登录。比如，Sales域中的John没有注销，Markets域中的John将不能登录。然而，我们还是找到了解决的办法。NTName2支持自定义的NetBIOS名字，如前所述，这个名字是你登录时是由系统自动添加的。但NTName2允许你自己指定一个值，默认值为Byte 16=oxCE。由于程序需要根据这个值来确定名字冲突，这样执行速度稍微会有一点慢，另一个美中不足的是，自定义的Byte 16值可能与其他NetBIOS应用程序发生冲突。
    三、Microsoft
    事实上，很多Windows管理员都希望Microsoft提供一个自己的解决方案。最终，Microsoft在Windows 2000 Server Resource Kit中提供了一个命名为CConnect的程序。注意，CConnect虽然在Windows 2000中才出现，但它支持Windows NT，但对系统方面有些特殊需求，主要包括必须是NT SP4或者更高，Windows Script Host，WBEM，MDAC 2.0以上版本。Windows 2000本身已经满足这些条件。这也是目前唯一由Microsoft自己实现的一个解决方案，主要提供了这些功能：
    ü 跟踪所有用户已经登录的计算机
    ü 允许把并发连接限制到每用户或者每组方式
    ü 所有的信息被保存地SQL数据库中
    ü 跟踪用户最后登录的计算机
    ü 监视用户已经登录到哪台服务器
    程序以典型的客户/服务器方式运行。因此，它要求在客户端正确地配置组策略并安装客户端软件，如图1所示。这些组策略选项由CConnect软件包中的CConnect.adm文件提供，并不是由Windows 2000自带的。因此，你必须把这个文件添加到相应的组策略中。打开活动目录用户与计算机管理单元，选择适当的组策略（只有这个策略受到作用的用户才会生效，所以一般我们选择Default Domain Policy），展开用户配置，右击管理员模板*属性*添加，从相应的文件夹中找到CConnect.adm文件，最后，从查看菜单中清除“仅显示策略”。图1中看到的是Windows 2000中组策略选项配置界面，如果你使用的是WinNT 4.0，应该使用Poledit.exe程序打开这个模板。每位管理员可以根据实际要求来配置这些选项，决定启用哪些功能。策略中提供调试与日志记录功能，这对高要求的环境提供了进一步的支持，当然，你可能需要做进一步的配置，如指定日志记录的位置。策略中的“Track Last User”是非常有意思的，有时候计算机可能意外停机（如停电），导致用户没有及时注销，此时用户登录的信息仍然保留在数据库中，此时如果用户试图登录到其他计算机，登录将被拒绝，因为策略认为你仍然登录在另一台计算机上，此时你必须从数据库中搜索相关信息，并予以删除后方可登录。但如果你是登录到同一台计算机（来电后重新登录），数据库信息会被自动更新，并不需要额外的工作。
</textarea>
						<div>
								<img src="http://www.microsoft.com/china/community/Column/image/53-1.jpg" align="top" />
								<span class="text6">
								</span>
						</div>
						<textarea class="content" style="WIDTH: 995px; HEIGHT: 263px" rows="14" readonly="" cols="109">图1：Con-Connect Limiter提供的组策略选项
    对于服务器端，你还需要正确配置SQL服务器，为CConnect指定一个具有与sa平等权限的登录账号，这些账号登录信息被保存在每台计算机的下列位置：
HKEY_CURRENT_USER\Software\Microsoft\CConnect\SQLSERVER
HKEY_CURRENT_USER\Software\Microsoft\CConnect\SQLUSER
HKEY_CURRENT_USER\Software\Microsoft\CConnect\SQLPASSWORD
    Windows 2000的客户计算机可以从VB Script中获益。CConnect软件包中提供了CConnect.vbs（登录）与CClogoff.vbs（注销）两个脚本文件。脚本程序可以实现简单的并发登录限制与远程注销功能，但如果你希望实现CConnect实现的所有功能，建议你安装CConnect Client程序。
图2显示的是CConnect的管理界面，很容易看出可以实现什么功能。在这里我不再详细地描述整个配置过程，有兴趣的读者可以使用随CConnect提供的文档来配置。总体来说，还是非常简单的。
    但我们从上面的一些关键信息的描述中不难看出CConnect中存在的问题：安全—所有的SQL连接信息以明文方式被保存在注册表中，这显然是一件令人提心吊胆的事。其次，对于略通注册表的用户，通过修改注册表就可以解除登录限制，除非你在组策略中限制用户修改注册表。但从解决并发登录限制角度来说，CConnect从可管理性角度讲，是一个不错的选择，而且最新版本（ 2.0）还实现对终端用户的限制支持。
</textarea>
						<div>
								<img src="http://www.microsoft.com/china/community/Column/image/53-2.jpg" align="top" />
								<span class="text6">
								</span>
						</div>
						<textarea class="content" readonly="">    以上是对并发登录限制三个方案的简单比较，很明显，不论是Windows管理员自己还是Microsoft，都在进步，我们期待更完美的解决方案。如果你有更好的方案，不妨与我们共享一下？</textarea>
						<div style="BACKGROUND-COLOR: #eeeeee">
								<pre class="text5">CLS
AT (1,1)
If @INWIN = 2          ; 表示客户计算机是Windows 95/98
    $L = "@LSERVER" + "\" + "NETLOGON" + "\" + "WINSET.EXE"
    shell "$L USERNAME=@USERID"
    shell "$L HOMEDRIVE=X:"  ; 你为用户映射的网络驱动器
    shell "$L HOMEPATH=@HOMEDIR"
    shell "$L HOMESHARE=@HOMESHR"
    shell "$L COMPUTERNAME=@WKSTA"
    shell "$L USERDOMAIN=@DOMAIN"
    shell "$L LOGONSERVER=@LSERVER"
    shell "$L USERPROFILE=@HOMESHR"
    shell "$L OS=Windows_98"
    setl "USERNAME=@USERID"
    setl "HOMEDRIVE=X:"
    setl "HOMEPATH=@HOMEDIR"
    setl "HOMESHARE=@HOMESHR"
    setl "COMPUTERNAME=@WKSTA"
    setl "USERDOMAIN=@DOMAIN"
    setl "LOGONSERVER=@LSERVER"
    setl "USERPROFILE=@HOMESHR"
    setl "OS=Windows_98"
endif
If @WKSTA &lt;&gt; "@LSERVER"      ; 如果客户的工作站不是这台计算机
    settime "@LSERVER"      ; 把工作站的时间设置成服务器时间
endif
use X: "@HOMESHR"      ;这是Kixtart中自带的Net use命令
$S = "@LSERVER" + "\" + "NETLOGON" + "\" + "users.txt"
IF INGROUP("users") and EXIST("$S")
    Display "$S"
    AT (23,1) "按任何键继续"
    GET $A
endif
$B = "@LSERVER" + "\" + "NETLOGON" + "\" + "LOGBAT.BAT"
shell "$B"     
CLS
BIG
$X = 1
DO
    COLOR w/n
    AT ( $X,$X*2 ) "@USERID"
    $X = $X+1
    UNTIL $X = 6
COLOR g+/n
AT ( $X,$X*2 ) "@USERID"
sleep 3
AT (23,0)
SMALL
$K=”@LSERVER”+”\”+”NETLOGON”+”\”+Onlyonce.txt”
$J=”x:\”+”@USERID”+”.txt”
if exist(“J$”)
goto done
endif
CLS
Display “$K”
Sleep 3
$RC=shutdown(“”,”正在关闭系统！”,0,1,0)
：done
cookie1 ; 需要通知Windows 98计算机当通过LMSCRIPT时脚本已经运行完毕
exit
</pre>
						</div>
				</div>
		</div>
<img src ="http://www.cnitblog.com/lym520/aggbug/13495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-07-11 12:51 <a href="http://www.cnitblog.com/lym520/archive/2006/07/11/13495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解开拒绝本地登录的“死结”</title><link>http://www.cnitblog.com/lym520/archive/2006/07/11/13494.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Tue, 11 Jul 2006 04:50:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/07/11/13494.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/13494.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/07/11/13494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/13494.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/13494.html</trackback:ping><description><![CDATA[
		<div class="text1">解开拒绝本地登录的“死结”</div>
		<hr color="#cccccc" size="1" />
		<div class="text2">目录</div>
		<div class="text4">
		</div>
		<ul class="list1">
				<li class="list2">
						<b>
						</b>前言 
</li>
				<li class="list2">
						<b>
						</b>被域策略拒绝本地登录时的解决办法 
</li>
				<li class="list2">
						<b>
						</b>被本地安全策略拒绝本地登录时的解决办法 
</li>
				<li class="list2">
						<b>
						</b>secedit简介 
</li>
				<li class="list2">
						<b>
						</b>补充说明 
</li>
				<li class="list2">
						<b>
						</b>参考资料 
</li>
				<li class="list2">
						<b>
						</b>关于作者</li>
		</ul>
		<hr color="#cccccc" size="1" />
		<div class="text2">前言</div>
		<div class="text4">
		</div>
		<div class="text4">在Windows 2000环境下，被组策略拒绝本地登录一直是件比较令人头疼的事情。本文将介绍一种所有用户都被拒绝本地登录后的解决方法。</div>
		<div class="text4">在Windows2000中，如果某个用户被取消了本地登录权限，当这个用户本地登录计算机时，系统就会提示"此系统的本地策略不允许您采用交互式登录"，导致登录失败。遇到这种情况，通常请管理员在组策略中重新设置一下，将该用户从"拒绝本地登录"列表中删除或添加到"在本地登录"列表中即可。但如果因为操作失误或其它方面的原因，我们将所有用户的本地登录权限都禁止了(通常是禁止了users组（非域环境下）或domain users组（域环境下）)，那就有点麻烦了。这种情形看起来像一个解不开的"死结"：要解除禁止本地登录的组策略设置，必须以管理员身份本地登录；要以管理员身份本地登录，就必须先解除禁止本地登录的组策略设置。</div>
		<div class="text4">但实际上，事情并没有我们想象的那么糟。经过查询相关资料和测试，我发现借助网络的帮助,这个"死结"还是可以解开的。因为域安全策略与本地安全策略的数据保存机制不同，下面分两种情况分别进行说明。</div>
		<hr color="#cccccc" size="1" />
		<div class="text2">被域策略拒绝本地登录时的解决办法</div>
		<div class="text4">
		</div>
		<div class="text4">域策略的安全设置部分都保存在一个名为"GptTmpl.inf"的安全模板中，这是一个文本文件，存放在DC（域控制器）的SYSVOL（物理目录指向DC的“c:\winnt\sysvol\sysvol"）共享中。要解除对所有用户本地登录限制，在不能本地登录的情况下，最快捷的办法可能就是直接编辑这个文本文件。</div>
		<div class="text4">具体操作如下：</div>
		<ul class="list1">
				<li class="list2">
						<b>
						</b>在另一台计算机（Win9X/2000/XP均可）上，使用域管理员账号连接到DC的SYSVOL共享，在"\\&lt;DC name&gt;\sysvol\&lt;Domain name&gt;\Policies\&lt;policy GUID&gt;\MACHINE\Microsoft\Windows NT\SecEdit"下找到该文本文件"GptTmpl.inf"。(路径中的"DC name"是你放置该组策略的域控制器的名字，"Domain name"是你的域的名字，"Policy GUID"是你要编辑的组策略对象的GUID，类似于"{31B2F340-016D-11D2-945F-05C04FB98439}")。 
</li>
				<li class="list2">
						<b>
						</b>使用记事本打开"GptTmpl.inf"文件，找到文件中"Privilege Rights"小节下的 "SeDenyInteractiveLogonRight"关键字，它的值就是被拒绝本地登录的用户或组的SID，将这些SID删除，使 "SeDenyInteractiveLogonRight"关键字的值为空。修改完毕将文件保存回原位置。 
</li>
				<li class="list2">
						<b>
						</b>使用记事本打开位于"\\&lt;DC name&gt;\sysvol\&lt;Domain name&gt;\Policies\&lt;policy GUID&gt;"下的 "GPT.INI"文件，提高"General"小节下的"Version"关键字的值，通常是加1000。这是我们修改的这个组策略对象的版本号，版本号提高后可以保证我们的更改被复制到其它DC上。修改完毕将文件保存回原位置。 
</li>
				<li class="list2">
						<b>
						</b>域策略刷新后，问题即告解决。 
</li>
				<li class="list2">
						<b>
						</b>本地登录DC重新设置域策略中的相关项目。</li>
		</ul>
		<hr color="#cccccc" size="1" />
		<div class="text2">被本地安全策略拒绝本地登录时的解决办法</div>
		<div class="text4">
		</div>
		<div class="text4">由于在Windows2000中，不支持对计算机本地策略的安全设置部分进行远程管理（详见组策略白皮书），而且本地安全策略的安全设置通常存放在一个二进制的安全数据库secedit.sdb中，这个安全数据库的结构我们无从知道，因此象第一部分那样直接编辑secedit.sdb文件的办法是无能为力了，我们需要采用迂回进攻的策略，"曲线救国"。</div>
		<div class="text4">具体操作如下：</div>
		<ul class="list1">
				<li class="list2">
						<b>
						</b>假设故障计算机的IP地址是"192.168.0.111"。在另一台计算机(Windows9X/2000/XP均可)上，使用"Telnet 192.168.0.111"命令使用管理员账号连接到故障计算机。（如果故障计算机的telnet"服务没有启动，可以通过网络使用"服务"MMC启动，具体方法不在详述） 
</li>
				<li class="list2">
						<b>
						</b>通过telnet在故障计算机上执行"net share tmp$=d:\tmp"命令，将故障计算机上的"d:\tmp"隐藏共享为"tmp$"，共享权限缺省是everyone完全控制（此时要特别注意网络安全）。当然你也可以共享其它的目录。 
</li>
				<li class="list2">
						<b>
						</b>通过telnet在故障计算机上执行"secedit /export /CFG d:\tmp\sec.inf"命令，将故障计算机的本地安全策略配置导入"d:\tmp\sec.inf"安全模板文件中，这是一个文本文件。 
</li>
				<li class="list2">
						<b>
						</b>连接到故障计算机上的tmp$共享，用记事本打开共享文件夹中的"sec.inf"文件。找到文件中"Privilege Rights"小节下的“SeDenyInteractiveLogonRight"关键字，它的值就是被拒绝本地登录的用户或组的SID，将这些SID删除，使"SeDenyInteractiveLogonRight"关键字的值为空或者是随便另设置一个无关的值。文件修改完毕保存回原位置。 
</li>
				<li class="list2">
						<b>
						</b>通过telnet在故障计算机上执行"secedit /configure /db c:\secedit.sdb /CFG d:\tmp\sec.inf"命令，使用新的安全模板和安全数据库重新配置故障计算机的本地安全策略。 
</li>
				<li class="list2">
						<b>
						</b>通过telnet在故障计算机上执行"secedit /refreshpolicy machine_policy /enforce"命令，强制在故障计算机上刷新策略设置，问题即告解决。 
</li>
				<li class="list2">
						<b>
						</b>本地登录故障计算机后，删除我们建立的Tmp$共享，重新设置本地安全策略中的相关项目。</li>
		</ul>
		<hr color="#cccccc" size="1" />
		<div class="text2">secedit简介</div>
		<div class="text4">
		</div>
		<div class="text4">secedit.exe，Windows2000自带的自动化安全配置任务命令行工具，功能强大。我们可以用它来分析系统的安全性、配置系统安全性、刷新安全性设置、导出安全性设置和验证安全配置文件。它的具体用法请使用"secedit /?"查看其帮助文件。</div>
		<hr color="#cccccc" size="1" />
		<div class="text2">补充说明</div>
		<div class="text4">
		</div>
		<div class="text4">上面所说的两种方法，都是以有权限用户（如管理员）没有被禁止从网络登录为前提的，如果你的策略把从网络登录也禁止了，让故障计算机成了真正的"孤家寡人"，那问题解决起来要麻烦的多，但同样不是一个解不开的"死结"。具体的解决办法，我会另具文说明，在此不再细说。</div>
		<hr color="#cccccc" size="1" />
		<div class="text2">参考资料</div>
		<div class="text4">
		</div>
		<ul class="list1">
				<li class="list2">
						<b>
						</b>参考资料1：微软KB数据库文章Q226243、Q257346、Q267553。 
</li>
				<li class="list2">
						<b>
						</b>参考资料2：微软msnews新闻组microsoft.public.win2000.setup、security和general。 
</li>
				<li class="list2">
						<b>
						</b>参考资料3：Windows2000中文帮助。</li>
		</ul>
<img src ="http://www.cnitblog.com/lym520/aggbug/13494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-07-11 12:50 <a href="http://www.cnitblog.com/lym520/archive/2006/07/11/13494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinXP SP2与P2P</title><link>http://www.cnitblog.com/lym520/archive/2006/07/11/13493.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Tue, 11 Jul 2006 04:48:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/07/11/13493.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/13493.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/07/11/13493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/13493.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/13493.html</trackback:ping><description><![CDATA[
		<h2 style="MARGIN: auto 0cm">
				<span lang="EN-US">
						<font face="宋体">WinXP SP2与P2P</font>
				</span>
		</h2>
		<p class="postmeta" style="MARGIN: auto 0cm">
				<span lang="EN-US">
						<font face="宋体">2004-08-20 By </font>
						<a title="Posts by Dark" href="http://dark.supercn.net/index.php/author/dark/">
								<font face="宋体">Dark</font>
						</a>
						<font face="宋体"> Posted in </font>
						<a title="View all posts in TeCH·技术" href="http://dark.supercn.net/index.php/category/tech/">
								<font face="宋体">TeCH·技术</font>
						</a>
				</span>
		</p>
		<h3 style="MARGIN: auto 0cm">
				<font face="宋体">第一个问题：<span lang="EN-US">ICF(albatross@dRL)</span></font>
		</h3>
		<p>
				<span lang="EN-US">
						<font face="宋体">SP2的ICF有两大改进，一个是支持自反型连接，也即是程序的动态端口使用，一个就是默认关闭非认证端口，这次的修改就是打开原本关闭非认证端口的设置，效果就像是原来的ICF+动态端口支持，理论上来说安全性是有所下降，但以前的ICF下有多少被攻破的概率呢？我认为个人用的话这样的安全级也就够了，毕竟对于个人来说应用第一。如果是用来做服务器的系统还是不要改了。</font>
				</span>
		</p>
		<p>
				<font face="宋体">速度的变化大还是小要看你用的是哪一类软件，同样的协议有不同的软件，工作方式也有所不同，我的速度是用<span lang="EN-US">BitComet测出的，其它的软件没有对比过，不过只要是有外部发起的连接的情况就必定有影响，在BitComet中很清楚，不改的时候，可用连接数有100多，连接上了40多，但速度是0，慢慢的原本连接上的数目也越来越少，都超时断开了，这一情况也可以用</span></font>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">netstat -a</span>
				</code>
				<font face="宋体">来监测，很清楚的。</font>
		</p>
		<p>
				<span lang="EN-US">
						<font face="宋体">SP2的增强了的网络安全性上!它对于从外部发起的对本机的连接进行的限制，只有认证了的端口如135、21这类的才给予放行，而对于不定端口的连接则全部丢弃，而这类连接却是前面所提到的应用所要用到的!那怕你禁用防火墙的功能或是在防火墙里把BT这类软件添加到允许列表也不成，因为这个允许是从内向外的，而不是从外向内的!</font>
				</span>
		</p>
		<p>
				<font face="宋体">怎么办呢？有办法，下面请各位先做下准备：</font>
		</p>
		<ul type="disc">
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">去微软官方</span>
						<span lang="EN-US">
								<a href="http://download.microsoft.com/download/win2000platform/Getsid/1.0/NT5/EN-US/getsid.exe">
										<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载</span>GetSid.exe</a>
						</span>
				</li>
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装这个程序，默认安装在</span>
						<span class="moz">
								<span lang="EN-US">c:\program files</span>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面</span>
						<span lang="EN-US">
						</span>
				</li>
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行</span>
						<span lang="EN-US">CMD </span>
				</li>
		</ul>
		<p>
				<font face="宋体">进入：<span class="moz"><span lang="EN-US">c:\program files\Resource Kit\</span></span>目录，</font>
				<span lang="EN-US">
						<br />
						<font face="宋体">运行：<span class="moz">getsid.exe \\xx yy \\xx yy</span><br />(说明：xx=你的主机名，yy=你的用户名)，例如：我的主机名=xp 用户名=bill[补充说明：因为一台XP上可能有不同的用户隶属于不同的权限组,所以定义本机(local machine)比较好!适用于全部本地用户,直接用<span class="moz">\\xx xx</span>这个参数就行了]运行结果如下：</font>
				</span>
		</p>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-identifier">
										<span lang="EN-US">C</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">:\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">Program Files</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">Resource Kitget</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">sid</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">.</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">exe</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US"> \\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xp xp</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US"> \\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xp xp<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-identifier">
										<span lang="EN-US">The SID </span>
								</span>
								<span class="hl-reserved">
										<span lang="EN-US">for </span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">account Xp</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xp matches account Xp</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xp<o:p></o:p></span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-identifier">
										<span lang="EN-US">The SID </span>
								</span>
								<span class="hl-reserved">
										<span lang="EN-US">for </span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">account Xp</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xp is S</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">1</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">5</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">21</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">1060284298</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">2147108755</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">854245398<o:p></o:p></span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-identifier">
										<span lang="EN-US">The SID </span>
								</span>
								<span class="hl-reserved">
										<span lang="EN-US">for </span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">account Xp</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">\</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xp is S</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">1</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">5</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">21</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">1060284298</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">2147108755</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">-</span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">854245398</span>
								</span>
						</font>
				</font>
		</pre>
		<p>
				<font face="宋体">然后在命令行窗口点右键，选标记，把</font>
				<span lang="EN-US">
						<br />
						<font face="宋体">
								<span class="moz">S-1-5-21-1060284298-2147108755-854245398</span>选中，然后按回车</font>
				</span>
		</p>
		<ul type="disc">
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行里输入</span>
						<span lang="EN-US">gpedit.msc</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，打开项目：<span class="moz">计算机配置</span></span>
						<span class="moz">
								<span lang="EN-US">/</span>
						</span>
						<span class="moz">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">管理模板</span>
								<span lang="EN-US">/</span>
						</span>
						<span class="moz">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络</span>
								<span lang="EN-US">/</span>
						</span>
						<span class="moz">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络连接</span>
								<span lang="EN-US">/Windows</span>
						</span>
						<span class="moz">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">防火墙</span>
								<span lang="EN-US">/</span>
						</span>
						<span class="moz">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">允许通过验证的</span>
								<span lang="EN-US">IPSec</span>
						</span>
						<span class="moz">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">旁路</span>
						</span>
						<span lang="EN-US">
								<br />
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选中启用，在空行里填入：</span>
						<span class="moz">
								<span lang="EN-US">O:DAG:DAD:(A;;RCGW;;;S-1-5-21-1060284298-2147108755-854245398)</span>
						</span>
						<span lang="EN-US">
						</span>
				</li>
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">确定，关闭组策略编辑器，关闭</span>
						<span lang="EN-US">CMD</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">窗口，打开</span>
						<span lang="EN-US">BT</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">软件，试一下吧</span>
						<span lang="EN-US">! </span>
				</li>
		</ul>
		<h3 style="MARGIN: auto 0cm">
				<font face="宋体">第二个问题：<span lang="EN-US">tcpip.sys(Syllable@CCF)</span></font>
		</h3>
		<p>
				<font face="宋体">先参看<span lang="EN-US"><a href="http://www.lvllord.de/4226fix/4226fix.htm">这篇文章</a>并下载该补丁(英语及德语,注意程序默认是Patch为50并发,可以在CMD中用<span class="moz">-?</span>参数来定义取值范围)</span></font>
		</p>
		<p>
				<span lang="EN-US">
						<font face="宋体">SP2后修改注册表或者替换tcpip.sys都无法解除tcp并发线程的限制。根本原因是因为sp2建立了Service Pack 2 OOB Messages动态链接库，实时监控每一个进程的并发线程数目，只要超过了它认为的安全线程数目就开始蔽屏掉部分线程。这是为了防止震荡波这类的蠕虫病毒，但是bt、emule这类的多线程的点对点工具也一起陪绑了，对于注册表的说明</font>
						<a href="http://support.microsoft.com/default.aspx?kbid=314053">
								<font face="宋体">微软有个说明在这里</font>
						</a>
						<font face="宋体">：</font>
				</span>
		</p>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-identifier">
										<span lang="EN-US">TcpNumConnections</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">
												<o:p>
												</o:p>
										</span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-default">项：</span>
								<span class="hl-identifier">
										<span lang="EN-US">TcpipParameters</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">
												<o:p>
												</o:p>
										</span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-default">数值类型：</span>
								<span class="hl-identifier">
										<span lang="EN-US">REG_DWORD</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US"> 数字<o:p></o:p></span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-default">有效范围：</span>
								<span class="hl-number">
										<span lang="EN-US">0</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US"> - </span>
								</span>
								<span class="hl-number">
										<span lang="EN-US">0</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xfffffe</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">
												<o:p>
												</o:p>
										</span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-default">默认值：</span>
								<span class="hl-number">
										<span lang="EN-US">0</span>
								</span>
								<span class="hl-identifier">
										<span lang="EN-US">xfffffe</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US">
												<o:p>
												</o:p>
										</span>
								</span>
						</font>
				</font>
		</pre>
		<pre>
				<font size="2">
						<font face="黑体">
								<span class="hl-default">说明：此参数限制 </span>
								<span class="hl-identifier">
										<span lang="EN-US">TCP</span>
								</span>
								<span class="hl-default">
										<span lang="EN-US"> 能同时打开的最大连接数。</span>
								</span>
						</font>
				</font>
		</pre>
		<p>
				<span lang="EN-US">
						<font face="宋体">sp2的并发网络限制不是在这个上面，而是在动态连接上面，所以上面的那个补丁是来破解动态的限制的，的确有很多人没有遇到这个问题，但是有很多的人在开了BT、EM之后连网页都打不开，或者速度极慢，用这个可以破解。</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
<img src ="http://www.cnitblog.com/lym520/aggbug/13493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-07-11 12:48 <a href="http://www.cnitblog.com/lym520/archive/2006/07/11/13493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[注册表]解除程序运行锁定</title><link>http://www.cnitblog.com/lym520/archive/2006/07/04/13227.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Tue, 04 Jul 2006 05:19:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/07/04/13227.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/13227.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/07/04/13227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/13227.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/13227.html</trackback:ping><description><![CDATA[
		<strong>
				<br />
				<!---->
				<br />
		</strong>
		<span class="tpc_content">　　近日在书上看到一篇控制用户运行程序的文章，该书提到在组策略中设置“只运行许可的Windows应用程序”，可以限制某些程序不能运行，笔者将该配置设为“启用”后，结果导致所有程序都不能运行（包括“gpedit”和“regedit”）。 <br /><br />　　经笔者潜心研究，找出了完美解决该问题的方法：首先重启计算机，按F8键进入“带命令行的安全模式”，以超级管理员身份输入密码登录，然后输入“regedit”后回车，打开注册表编辑器，依次展开HKEY＿CURRENT＿USER＼software＼microsoft＼ windows＼CurrentVersion＼PolicIEs＼Explorer分支，将右侧窗口中的“RestrictRun”键值修改为“0”。然后退出注册表编辑器，重启计算机即可解除程序锁定。最后在正常模式下以管理员身份登录系统，打开组策略，将设置改回为“未配置”即可。</span>
<img src ="http://www.cnitblog.com/lym520/aggbug/13227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-07-04 13:19 <a href="http://www.cnitblog.com/lym520/archive/2006/07/04/13227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOS命令应用集 </title><link>http://www.cnitblog.com/lym520/archive/2006/05/09/10263.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Tue, 09 May 2006 09:21:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/05/09/10263.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/10263.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/05/09/10263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/10263.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/10263.html</trackback:ping><description><![CDATA[
		<p>FTP命令使用大全<br />FTP命令是Internet用户使用最频繁的命令之一，不论是在DOS还是UNIX操 作系统下使用FTP，都会遇到大量的FTP内部命令。 熟悉并灵活应用FTP的内部 命令，可以大大方便使用者，并收到事半功倍之效。c FTP的命令行格式为： ftp -v -d -i -n -g [主机名] ，其中<br />-v 显示远程服务器的所有响应信息；<br />-n 限制ftp的自动登录，即不使用；<br />.n etrc文件；<br />-d 使用调试方式；<br />-g 取消全局文件名。</p>
		<p>ftp使用的内部命令如下(中括号表示可选项):</p>
		<p>1.![cmd[args]]：在本地机中执行交互shell，exit回到ftp环境，如： !ls*.zip.<br />2.$ macro-ame[args]：执行宏定义macro-name.<br />3.account[password]：提供登录远程系统成功后访问系统资源所需的补 充口令。<br />4.append local-file[remote-file]：将本地文件追加到远程系统主机， 若未指定远程系统文件名，则使用本地文件名。<br />5.ascii：使用ascii类型传输方式。<br />6.bell：每个命令执行完毕后计算机响铃一次。<br />7.bin：使用二进制文件传输方式。<br />8.bye：退出ftp会话过程。<br />9.case：在使用mget时，将远程主机文件名中的大写转为小写字母。<br />10.cd remote-dir：进入远程主机目录。<br />11.cdup：进入远程主机目录的父目录。<br />12.chmod mode file-name：将远程主机文件file-name的存取方式设置为 mode，如：chmod 777<br />a.out 。<br />13.close：中断与远程服务器的ftp会话(与open对应)。<br />14.cr：使用asscii方式传输文件时，将回车换行转换为回行。<br />15.delete remote-file：删除远程主机文件。<br />16.debug[debug-value]：设置调试方式， 显示发送至远程主机的每条命 令，如： deb up 3，若设为0，表示取消debug。<br />17.dir[remote-dir][local-file]：显示远程主机目录，并将结果存入本 地文件local-file。<br />18.disconnection：同close。<br />19.form format：将文件传输方式设置为format，缺省为file方式。<br />20.get remote-file[local-file]： 将远程主机的文件remote-file传至 本地硬盘的local-file。<br />21.glob：设置mdelete，mget，mput的文件名扩展，缺省时不扩展文件名， 同命令行的-g参数。<br />22.hash：每传输1024字节，显示一个hash符号(#)。<br />23.help[cmd]：显示ftp内部命令cmd的帮助信息，如：help get。<br />24.idle[seconds]：将远程服务器的休眠计时器设为[seconds]秒。<br />25.image：设置二进制传输方式(同binary)。<br />26.lcd[dir]：将本地工作目录切换至dir。<br />27.ls[remote-dir][local-file]：显示远程目录remote-dir， 并存入本 地文件local-file。<br />28.macdef macro-name：定义一个宏，遇到macdef下的空行时，宏定义结 束。<br />29.mdelete[remote-file]：删除远程主机文件。<br />30.mdir remote-files local-file：与dir类似，但可指定多个远程文件， 如： mdir *.o.*.zipoutfile 。<br />31.mget remote-files：传输多个远程文件。<br />32.mkdir dir-name：在远程主机中建一目录。<br />33.mls remote-file local-file：同nlist，但可指定多个文件名。<br />34.mode[modename]：将文件传输方式设置为modename， 缺省为stream方 式。<br />35.modtime file-name：显示远程主机文件的最后修改时间。<br />36.mput local-file：将多个文件传输至远程主机。<br />37.newer file-name： 如果远程机中file-name的修改时间比本地硬盘同 名文件的时间更近，则重传该文件。<br />38.nlist[remote-dir][local-file]：显示远程主机目录的文件清单，并 存入本地硬盘的local-file。<br />39.nmap[inpattern outpattern]：设置文件名映射机制， 使得文件传输 时，文件中的某些字符相互转换，如：nmap $1.$2.$3&amp;1，$2;.&amp;2，$3;，则 传输文件a1.a2.a3时，文件名变为a1，a2。该命令特别适用于远程主机为非UNIX 机的情况。<br />40.ntrans[inchars[outchars]]：设置文件名字符的翻译机制，如ntrans 1R，则文件名LLL将变为RRR。<br />41.open host[port]：建立指定ftp服务器连接，可指定连接端口。<br />42.passive：进入被动传输方式。<br />43.prompt：设置多个文件传输时的交互提示。<br />44.proxy ftp-cmd：在次要控制连接中，执行一条ftp命令， 该命令允许 连接两个ftp服务器，以在两个服务器间传输文件。第一条ftp命令必须为open， 以首先建立两个服务器间的连接。<br />45.put local-file[remote-file]：将本地文件local-file传送至远程主 机。<br />46.pwd：显示远程主机的当前工作目录。<br />47.quit：同bye，退出ftp会话。<br />48.quote arg1，arg2...：将参数逐字发至远程ftp服务器，如： quote syst.<br />49.recv remote-file[local-file]：同get。<br />50.reget remote-file[local-file]：类似于get，但若local-file存在， 则从上次传输中断处续传。<br />51.rhelp[cmd-name]：请求获得远程主机的帮助。<br />52.rstatus[file-name]：若未指定文件名，则显示远程主机的状态，否 则显示文件状态。<br />53.rename文章出处：bbs.nju.edu.cn[to]：更改远程主机文件名。<br />54.reset：清除回答队列。<br />55.restart marker：从指定的标志marker处，重新开始get或put，如： restart 130。<br />56.rmdir dir-name：删除远程主机目录。<br />57.runique：设置文件名唯一性存储，若文件存在，则在原文件后加后缀 .1，.2等。<br />58.send local-file[remote-file]：同put。<br />59.sendport：设置PORT命令的使用。<br />60.site arg1，arg2...：将参数作为SITE命令逐字发送至远程ftp主机。<br />61.size file-name：显示远程主机文件大小，如：site idle 7200。<br />62.status：显示当前ftp状态。<br />63.struct[struct-name]：将文件传输结构设置为struct-name， 缺省时 使用stream结构。<br />64.sunique：将远程主机文件名存储设置为唯一(与runique对应)。<br />65.system：显示远程主机的操作系统类型。<br />66.tenex：将文件传输类型设置为TENEX机的所需的类型。<br />67.tick：设置传输时的字节计数器。<br />68.trace：设置包跟踪。<br />69.type[type-name]：设置文件传输类型为type-name，缺省为ascii，如： type binary，设置二进制传输方式。<br />70.umask[newmask]：将远程服务器的缺省umask设置为newmask，如： umask 3。<br />71.user user-name[password][account]：向远程主机表明自己的身份， 需要口令时，必须输入口令，如：user anonymous <a href="mailto:my@email"><font color="#999966">my@email</font></a>。<br />72.verbose：同命令行的-v参数，即设置详尽报告方式，ftp服务器的所有 响应都将显示给用户，缺省为on.<br />73.?[cmd]：同help. 梦雨紫轩</p>
		<p>COPY命令的用法</p>
		<p>1.这个是操作系统提供的帮助，都说这是个简单的命令</p>
		<p>E:\&gt;copy /?<br />将一份或多份文件复制到另一个位置。</p>
		<p>COPY [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]<br />[+ source [/A | /B] [+ ...]] [destination [/A | /B]]</p>
		<p>source 指定要复制的文件。<br />/A 表示一个 ASCII 文本文件。<br />/B 表示一个二进位文件。<br />destination 为新文件指定目录和/或文件名称。<br />/V 验证新文件写得正确。<br />/N 当复制一份带有非 8dot3 名称的文件，<br />如果可能的话，使用短文件名。<br />/Y 取消提示以确认您希望改写<br />一份现存目录文件。<br />/-Y 引起提示确认您想改写一份<br />现存目标文件。<br />/Z 用可重新启动模式复制已联网的文件。</p>
		<p>命令选项 /Y 可以在 COPYCMD 环境变量中预先设定。<br />这可能会被命令行上的 /-Y 替代。除非 COPY<br />命令是在一个批文件脚本中执行的，默认应为<br />在改写时提示。</p>
		<p>要附加文件，请为目标指定一个文件，为源指定<br />数个文件(用通配符或 file1+file2+file3 格式)。</p>
		<p>2. COPY /B 选项</p>
		<p>一旦文件保存以后，文件的日期和时间就写到文件中，可以用dir /t来查看这个日期和时间。<br />我们可以通过copy命令来更改这个日期和时间，命令格式如下：<br />C:\&gt;COPY /B filename+,,<br />如果要将当前的时间和日期指派给文件而不修改文件，你就可以使用这个命令。</p>
		<p>顺便说一下，如果你不想将时间日期更改为今天的日期时间，你可以用DATE和TIME命令将日期和时间修改成必要的时刻。<br />然后用"C:\&gt;COPY /B+,,"修改，然后别忘了把时间改回来。</p>
		<p>3.合并选项</p>
		<p>　　一般情况下，它主要用于合并相同类型的文件，比如将两个文本文件合并为一个文本文件、将两个独立的MPEG视频文件合并为一个连续的视频文件等。那么，如果用它合并两个不同类型的文件，结果会怎样呢？</p>
		<p>　比如你有一段私人信息要隐藏起来，请先录入并保存为文本文件，假设保存为001.txt。另找一个非文本文件，最好为图片文件或可执行文件。以图片文件为例，假设它的文件名为002.jpg。如果把它们都放到D盘根目录下，那么在Windows的MS-DOS方式</p>
		<p>下执行以下命令：</p>
		<p>　　d:\Copy 002.jpg/b + 001.txt/a 003.jpg</p>
		<p>　　其中参数/b指定以二进制格式复制、合并文件；参数/a指定以ASCII格式复制、合并文件。<br />这里要注意文件的顺序，二进制格式的文件应放在加号前，文本格式的文件放在加号后。</p>
		<p>　　执行该命令后，生成了一个新文件003.jpg。回到Windows中用图片浏览软件打开这个它，你会发现它与002.jpg的显示结果一模一样。然后用记事本打开003.jpg，你看到什么了？一堆乱码吗？没错！但如果你按下Ctrl+End键将光标移至文件的尾部，你再看看！是不是001.txt文件中的内容？</p>
		<p>　　按照这种方法，你可以轻松地把一些重要信息隐藏起来，比如用户ID、密码、重要私人信息等。</p>
		<p>　　有一点要提醒大家：就是这个文本文件的前面最好空上3行以上，这样它头部的内容就不会丢失。这主要是由于WINDOWS的文件保留块处理的问题，类似的UNIX命令是DD.</p>
		<p>记不记得有的光盘打开看都是图片，可是用指定的浏览器就可以看到其他的东西，其实没有什么神秘的，我们也可以试试看。</p>
		<p>4.COPY CON<br />COPY CON，拷贝一个DOS设备。<br />COPY CON filename<br />这个命令将保存接下来的输入到文件中。<br />DOS有很多设备，CON指屏幕和键盘.</p>
		<p>同样，你可以用COPY命令把文件输出到屏幕上<br />COPY filename CON<br />这个命令类似于UNIX上VI的部分功能</p>
		<p>5.COPY时在文件名上附加时间</p>
		<p>有人问过COPY时怎么附加时间到文件上，可以这样实现<br />C:\&gt;COPY filename filename%date:~4,10%<br />类似的你可以试试<br />C:\&gt;MD %date%<br />C:\&gt;MD %date:~4,10%<br />C:\&gt;MD %date:~0,3%<br />看看你需要什么。</p>
		<p>DATE命令的用法粗解<br />DATE命令的用法</p>
		<p>1.系统帮助<br />C:\&gt;date /?<br />显示或设置日期。</p>
		<p>DATE [/T | date]</p>
		<p>仅键入 DATE 而不加参数，可以显示当前日期设置，并且提示<br />您输入新的日期。按 ENTER 键即可保持原有日期。</p>
		<p>如果命令扩展名被启用，DATE 命令会支持 /T 命令选项；该命令选项告诉<br />命令只输出当前日期，但不提示输出新日期。</p>
		<p>2.DATA /T 参数说明</p>
		<p>此参数输出当前日期，例如：</p>
		<p>C:\&gt;DATE /T<br />2002-10-28 星期一</p>
		<p>这个日期格式可能不同与环境变量中的日期格式，如</p>
		<p>C:\&gt;echo %DATE%<br />星期一 2002-10-28</p>
		<p>用for命令，可以组合出不同的表达，例如：</p>
		<p>C:\&gt;for /f "tokens=1,2" %a in ('date/t') do set date=%a</p>
		<p>C:\&gt;set date=2002-10-28<br />这条语句所做的的就是在date/t中取出不含星期的部分。</p>
		<p>我们可以用更简单的命令得出相同的结果，如：</p>
		<p>C:\&gt;echo %DATE%<br />星期一 2002-10-28</p>
		<p>C:\&gt;echo %DATE:~4,10%<br />2002-10-28</p>
		<p>如果想在批处理中以日期建立文件夹或者文件名都可以简单的做到了，如</p>
		<p>C:\&gt;mkdir %DATE:~4,10%<br />C:\&gt;dir 2*<br />驱动器 C 中的卷是 本地磁盘<br />卷的序列号是 402A-3A7E</p>
		<p>C:\ 的目录</p>
		<p>2002-10-28 19:34 &lt;DIR&gt; 2002-10-28<br />0 个文件 0 字节<br />1 个目录 79,282,176 可用字节</p>
		<p>C:\&gt;copy mylist mylist%DATE:~4,10%<br />已复制 1 个文件。</p>
		<p>C:\&gt;dir my*<br />驱动器 C 中的卷是 本地磁盘<br />卷的序列号是 402A-3A7E</p>
		<p>C:\ 的目录</p>
		<p>2002-09-15 10:00 38 mylist<br />2002-09-15 10:00 38 mylist2002-10-28<br />3 个文件 446 字节<br />0 个目录 79,282,176 可用字节</p>
		<p>这对于Oracle中的某些自动操作是很有用的。</p>
		<p>可以看到，通过简单的DOS命令的组合，我们可以做到很多看似复杂的事情，只是我们的思维</p>
		<p>并不总是能够到达那里。</p>
		<p>3.关于%DATE:~4,10%的格式</p>
		<p>这个命令的意思就是在DATE的输出中，取4-10中间的字符。<br />对于不同的机器，可能有不同的时间格式，这个可以在控制面板里设置。<br />可以通过ECHO命令察看当前设置，如：</p>
		<p>C:\&gt;echo %DATE%<br />星期一 2002-10-28</p>
		<p>当然，我们可以同样取到星期的值：</p>
		<p>C:\&gt;echo %DATE:~0,3%<br />星期一</p>
		<p>当然也可以从不同方向来：</p>
		<p>C:\&gt;echo %DATE:~-10%<br />2002-10-28</p>
		<p>C:\&gt;echo %DATE:~0,-10%<br />星期一</p>
		<p>NBTSTAT和NETSTAT这两个命令有什么区别？</p>
		<p>--------------------------------------------------------------------------------</p>
		<p>icech搜集　2002-8-12 20:44:58　pchome.net</p>
		<p>netstat和nbtstat可以说都是Windows下的网络检测工具，他们的输入形式很相似而且都是需要在安装了TCP/IP协议以后才可以使用的，但两者的功能却不同。首先我们来看看netstat这个命令：<br />C:＼&gt;netstat -h</p>
		<p>Displays protocol statistics and current TCP/IP network connections.<br />显示协议统计和当前的 TCP/IP 网络连接。</p>
		<p>NETSTAT [-a] [-e] [-n] [-s] [-p proto] [-r] [interval]</p>
		<p>-a Displays all connections and listening ports.<br />显示所有连接和侦听端口。<br />此命令可以显示出你的计算机当前所开放的所有端口，其中包括TCP端口和UDP端口。有经验的管理员会经常的使用它，以此来查看计算机的系统服务是否正常，是否被“黑客”留下后门，木马等。比如说我就有一个习惯，在刚刚装了系统配置好服务器以后我就会运行一下netstat -a看看系统开放了什么端口，并记录下来，以便以后作为参考使用，当发现有不明的端口时就可以及时的做出对策。由于这个参数同时还会显示出当前计算机有什么人的IP正连接着你的服务器，所以也是一种实时入侵检测工具，如发现有个IP连接着不正常的端口，你也可以及时做出有效对策。示例：<br />C:＼&gt;netstat -a</p>
		<p>Active Connections</p>
		<p>Proto Local Address Foreign Address State<br />TCP iceblood:ftp iceblood.yofor.com:0 LISTENING<br />TCP iceblood:telnet iceblood.yofor.com:0 LISTENING<br />TCP iceblood:smtp iceblood.yofor.com:0 LISTENING<br />TCP iceblood:http iceblood.yofor.com:0 LISTENING<br />TCP iceblood:https iceblood.yofor.com:0 LISTENING<br />………………<br />TCP iceblood:1171 iceblood.yofor.com:3306 ESTABLISHED<br />TCP iceblood:ms-sql-s iceblood.yofor.com:0 LISTENING<br />TCP iceblood:3306 iceblood.yofor.com:1171 ESTABLISHED<br />………………<br />UDP iceblood:ms-sql-m *:*<br />UDP iceblood:4000 *:*<br />UDP iceblood:4001 *:*<br />UDP iceblood:4002 *:*<br />从上面的情况就可以知道我的计算机现在开放的TCP端口有ftp(21),telnet(23),smtp(25),http(80),https(443),1171连接着自己的mysql(3306)，ms-sql-s(1433),UDP端口有ms-sql-m(1433),4000-4002都是我的OICQ。：P</p>
		<p>-e Displays Ethernet statistics. This may be combined with the -s option.<br />显示以太网统计。该参数可以与 -s 选项结合使用。<br />这个参数正如所说的，将在下面再跟大家说。</p>
		<p>-n Displays addresses and port numbers in numerical form.<br />以数字格式显示地址和端口号（而不是尝试查找名称）。<br />大家如果只输入netstat的话就会看见如下类似的结果：<br />C:＼&gt;netstat</p>
		<p>Active Connections</p>
		<p>Proto Local Address Foreign Address State<br />TCP iceblood:1171 iceblood.yofor.com:3306 ESTABLISHED<br />TCP iceblood:3306 iceblood.yofor.com:1171 ESTABLISHED<br />TCP iceblood:1219 202.109.72.40:6667 ESTABLISHED<br />TCP iceblood:3566 SERVER-2:microsoft-ds ESTABLISHED<br />你会发现这些和netstat -a有相同的地方，只不过netstat可以很清楚的列举出来当前和你连接的所有计算机，在Local Address和Foreign Address里你也发现大多数给出的只是计算机NetBios名，却还是不知道当前和你连接的IP，但如果你加上-n参数就不同了，示例如下：<br />C:＼&gt;netstat -n</p>
		<p>Active Connections</p>
		<p>Proto Local Address Foreign Address State<br />TCP 127.0.0.1:1171 127.0.0.1:3306 ESTABLISHED<br />TCP 127.0.0.1:3306 127.0.0.1:1171 ESTABLISHED<br />TCP 192.168.1.21:1219 202.109.72.40:6667 ESTABLISHED<br />TCP 192.168.1.21:3566 192.168.1.3:445 ESTABLISHED<br />TCP 192.168.1.21:3577 202.107.208.187:110 TIME_WAIT<br />TCP 192.168.1.21:3578 192.168.1.24:445 ESTABLISHED<br />看！是不是很明了了？对方的IP全部都出来了。其实-n参数其实也就是告诉netstat不解析对方计算机的NetBios名。</p>
		<p>-p proto Shows connections for the protocol specified by proto; proto may be TCP or UDP. If used with the -s option to display<br />per-protocol statistics, proto may be TCP, UDP, or IP.<br />显示由 protocol 指定的协议的连接；protocol 可以是 tcp 或 udp。如果与 -s 选项一同使用显示每个协议的统计，protocol 可以是 tcp udp、icmp 或 ip。<br />这个参数你可以指定查看什么协议的连接状态，比如我想查看当前计算机正在连接的所有TCP端口，示例如下：<br />C:＼&gt;netstat -p tcp</p>
		<p>Active Connections</p>
		<p>Proto Local Address Foreign Address State<br />TCP iceblood:1171 iceblood.yofor.com:3306 ESTABLISHED<br />TCP iceblood:3306 iceblood.yofor.com:1171 ESTABLISHED<br />TCP iceblood:1219 202.109.72.40:6667 ESTABLISHED<br />…………</p>
		<p>-r Displays the routing table.<br />显示路由表的内容。<br />这个没有特别的，可以输入netstat -r以后自己研究。</p>
		<p>-s Displays per-protocol statistics. By default, statistics are shown for TCP, UDP and IP; the -p option may be used to specify a subset of the default.<br />显示每个协议的统计。默认情况下，显示 TCP、UDP、ICMP 和 IP 的统计。-p 选项可以用来指定默认的子集。<br />这个参数让我们来配合-e来使用。<br />C:＼&gt;netstat -s -e<br />Interface Statistics</p>
		<p>Received Sent</p>
		<p>Bytes 505385542 41745793<br />Unicast packets 150106 150547<br />Non-unicast packets 313008 807<br />Discards 0 0<br />Errors 0 0<br />Unknown protocols 327149</p>
		<p>IP Statistics</p>
		<p>Packets Received = 379906<br />Received Header Errors = 0<br />Received Address Errors = 215043<br />Datagrams Forwarded = 0<br />Unknown Protocols Received = 0<br />Received Packets Discarded = 0<br />Received Packets Delivered = 166002<br />Output Requests = 151620<br />Routing Discards = 0<br />Discarded Output Packets = 0<br />Output Packet No Route = 0<br />Reassembly Required = 0<br />Reassembly Successful = 0<br />Reassembly Failures = 0<br />Datagrams Successfully Fragmented = 0<br />Datagrams Failing Fragmentation = 0<br />Fragments Created = 0</p>
		<p>TCP Statistics</p>
		<p>Active Opens = 1556<br />Passive Opens = 1<br />Failed Connection Attempts = 4<br />Reset Connections = 143<br />Current Connections = 4<br />Segments Received = 141243<br />Segments Sent = 140462<br />Segments Retransmitted = 477</p>
		<p>UDP Statistics</p>
		<p>Datagrams Received = 15125<br />No Ports = 9634<br />Receive Errors = 0<br />Datagrams Sent = 10628<br />看！嘿嘿！你的网络基本状态都在这里面，比如你接受了多少数据包，多少字节，有多少TCP端口打开，有多少UDP端口打开，太丰富了……这些就留给各位高手自己慢慢琢磨去了。</p>
		<p>interval Redisplays selected statistics, pausing interval seconds between each display. Press CTRL+C to stop redisplaying statistics. If omitted, netstat will print the current configuration information once.<br />重新显示所选的统计，在每次显示之间暂停 interval 秒。按 CTRL+B 停止重新显示统计。如果省略该参数，netstat 将打印一次当前的配置信息。<br />这个就是自己定义检查网络状况的时间的参数，比如我想每过10秒检查一次我的计算机当前TCP连接的状态你就输入netstat 10 -p tcp这样netstat就会每过10秒就把你所有的TCP端口检查一次。</p>
		<p>--------------------</p>
		<p>C:＼&gt;nbtstat<br />Displays protocol statistics and current TCP/IP connections using NBT (NetBIOS over TCP/IP).<br />该诊断命令使用 NBT（TCP/IP 上的 NetBIOS）显示协议统计和当前 TCP/IP 连接。</p>
		<p>NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [interval] ]</p>
		<p>-a (adapter status) Lists the remote machine\''s name table given its name<br />使用远程计算机的名称列出其名称表。<br />此参数可以通过远程计算机的NetBios名来查看他的当前状态。示例<br />C:＼&gt;nbtstat -a iceblood</p>
		<p>本地连接:<br />Node IpAddress: [192.168.1.2] Scope Id: []</p>
		<p>NetBIOS Remote Machine Name Table</p>
		<p>Name Type Status<br />---------------------------------------------<br />ICEBLOOD &lt;00&gt; UNIQUE Registered<br />WORK &lt;00&gt; GROUP Registered<br />ICEBLOOD &lt;20&gt; UNIQUE Registered<br />WORK &lt;1E&gt; GROUP Registered<br />ICEBLOOD &lt;03&gt; UNIQUE Registered<br />ICEBLOOD$ &lt;03&gt; UNIQUE Registered<br />LIU_ICEBLOOD &lt;03&gt; UNIQUE Registered</p>
		<p>MAC Address = 00-D0-09-52-91-DC<br />看见了？从上面就可以知道我的计算机当前计算机的NetBios名为iceblood属于work组或域，当前有liu_iceblood登陆的该计算机，嘿嘿~全都出来了。当然你也可以把计算机名换为IP也就是netstat -a 192.168.1.21，效果和上面的一样。这就有点像UNIX/Linux的finger了，如果你经常去netstat -a一台NT主机，你也可以收集到一些对方计算机中的用户列表了。</p>
		<p>-A (Adapter status) Lists the remote machine\''s name table given its IP address.<br />使用远程计算机的 IP 地址并列出名称表。<br />这个和-a不同的是就是这个只能使用IP，其实-a就包括了-A的功能了，我也不再介绍。</p>
		<p>-c (cache) Lists NBT\''s cache of remote [machine] names and their IP addresses<br />给定每个名称的 IP 地址并列出 NetBIOS 名称缓存的内容。<br />这个参数表示的是在你的NetBIOS里缓存的你连接过的计算机的IP。示例：<br />C:＼&gt;nbtstat -c</p>
		<p>本地连接:<br />Node IpAddress: [192.168.1.21] Scope Id: []</p>
		<p>NetBIOS Remote Cache Name Table</p>
		<p>Name Type Host Address Life [sec]<br />------------------------------------------------------------<br />WORK &lt;20&gt; UNIQUE 192.168.1.20 597<br />从上面就可以知道你刚刚和IP为192.168.1.20的计算机的NetBIOS连接过。而这个命令也提供给了“黑客”在入侵了对方的主机以后进而入侵到内部网的一个有利的线索。因为NetBIOS的Cache里储存的IP是对方已经信任你的计算机的IP。聪明的“黑客”当然也会从这个方便的地方入手了。</p>
		<p>-n Lists local NetBIOS names.<br />列出本地 NetBIOS 名称。<br />此参数和netstat -a类似，只是这个是检查本地的，如果把netstat -a后面的IP换为自己的就和netstat -n的效果是一样的了。</p>
		<p>-r Lists names resolved by broadcast and via WINS<br />列出 Windows 网络名称解析的名称解析统计。在配置使用 WINS 的 Windows 2000 计算机上，此选项返回要通过广播或 WINS 来解析和注册的名称数。<br />这个正如上面所说的，列出当前Windows 网络名称解析的名称解析统计。</p>
		<p>-R Purges and reloads the remote cache name table<br />清除 NetBIOS 名称缓存中的所有名称后，重新装入 Lmhosts 文件。<br />这个参数就是清除netstat -c所能看见的Cache里的IP缓存的。</p>
		<p>-S Lists sessions table with the destination IP addresses<br />显示客户端和服务器会话，只通过 IP 地址列出远程计算机。<br />此参数可以查看计算机当前正在会话的NetBIOS。示例：<br />C:＼&gt;nbtstat -S</p>
		<p>本地连接:<br />Node IpAddress: [192.168.1.21] Scope Id: []</p>
		<p>NetBIOS Connection Table</p>
		<p>Local Name State In/Out Remote Host Input Output</p>
		<p>----------------------------------------------------------------------------</p>
		<p>ICEBLOOD &lt;00&gt; Connected Out 192.168.1.22 8MB 316KB<br />ICEBLOOD &lt;03&gt; Listening<br />ICEBLOOD$ &lt;03&gt; Listening<br />LIU_ICEBLOOD &lt;03&gt; Listening</p>
		<p>从上面就可以知道我的计算机现在正在和192.168.1.22进行会话，看得出是在复制文件，而且是从对方往自己的计算机里复制。通过以上参数所看到的信息到了“黑客”的手中也是非常重要的线索了。</p>
		<p>-s Lists sessions table converting destination IP<br />显示客户端和服务器会话。尝试将远程计算机 IP 地址转换成使用主机文件的名称。<br />此参数和-S差不多，只是这个会把对方的NetBIOS名给解析出来。</p>
		<p>-RR (ReleaseRefresh) Sends Name Release packets to WINs and then, starts Refresh<br />释放在 WINS 服务器上注册的 NetBIOS 名称，然后刷新它们的注册。</p>
		<p>interval Redisplays selected statistics, pausing interval seconds between each display. Press Ctrl+C to stop redisplaying statistics.<br />重新显示所选的统计，在每次显示之间暂停 interval 秒。按 CTRL+B 停止重新显示统计。如果省略该参数，netstat 将打印一次当前的配置信息。<br />此参数和netstat的一样，nbtstat的是配合-s和-S一起使用的</p>
		<p>　</p>
		<p>　</p>
		<p>Nslookup 命令使用浅析</p>
		<p>Nslookup 是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具。它在 Windows NT/2000/XP 中均可使用,但在Windows 98中却没有集成这一个工具。<br />　　Nslookup 必须要安装了TCP/IP 协议的网络环境之后才能使用。下面笔者就举一个实例来介绍Nslookup的具体操作过程。<br />　　现在网络中已经架设好了一台 DNS 服务器，主机名称为 linlin ,它可以把域名 <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> 解析为 192.168.0.1 的IP地址，这是我们平时用得比较多的正向解析功能。<br />检测步骤如下：<br />在 Windows 2000 中单击“开始”－&gt;“程序”－&gt;“附件”－&gt;“命令提示符”，在 C:\&gt;　的后面键入 Nslookup <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> ，“回车”之后即可看到如下结果：<br />　　Server: linlin<br />　　Address: 192.168.0.5<br />　　Name: <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a><br />　　Address: 192.168.0.1<br />　　以上结果显示，正在工作的 DNS 服务器的主机名为 linlin ，它的 IP 地址是192.168.0.5 ，而域名<a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> 所对应的 IP 地址为 192.168.0.1 。那么，在检测到 DNS 服务器 linlin 已经能顺利实现正向解析的情况下，它的反向解析是否正常呢? 也就是说，能否把IP地址192.168.0.1反向解析为域名<a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> ?我们在命令提示符C:\&gt;的后面键入 Nslookup 192.168.0.1 ，得到结果如下：<br />　　Server: linlin<br />　　Address: 192.168.0.5<br />　　Name: <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a><br />　　Address: 192.168.0.1<br />这说明，DNS 服务器 linlin 的反向解析功能也正常。</p>
		<p>然而，有的时候，我们键入Nslookup <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> ，却出现如下结果：<br />Server: linlin<br />Address: 192.168.0.5<br />*** linlin can't find <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a>: Non-existent domain</p>
		<p>这种情况说明网络中DNS服务器 linlin 在工作，却不能实现域名 <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a>的正确解析。此时，要...渲们榭觯词欠?/a&gt; <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> 这一条域名对应的 IP 地址记录已经添加到了DNS的数据库中。</p>
		<p>还有的时候，我们键入Nslookup <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> ，会出现如下结果：<br />*** Can't find server name for domain: No response from server<br />*** Can't find <a href="http://www.company.com/"><font color="#999966">www.company.com</font></a> : Non-existent domain<br />这时，说明测试主机在目前的网络中，根本没有找到可以使用的 DNS 服务器。此时，我们要对整个网络的连通性作全面的检测，并检查DNS服务器是否处于正常工作状态，采用逐步排错的方法，找出 DNS 服务不能启动的根源。</p>
		<p>除了可以在命令行下直接进行基本的DNS查询之外，直接启动nslookup将进入一个交互模式，在这里能查询各种类型的DNS数据。<br />　　DNS的名字解析数据可以有各种不同的类型，有设置这个zone的参数的SOA类型数据，有设置名字对应的IP地址的A类型数据，有设置邮件交换的MX类型数据。这些不同类型的数据均可以通过nslookup的交互模式来查询，在查询过程中可以使用 set type命令设置相应的查询类型。</p>
		<p>如：<br />C:&gt;nslookup<br />Default Server: ns.hazzptt.net.cn<br />Address: 202.102.224.68</p>
		<p>&gt; set type=mx<br />&gt; yahoo.com<br />Server: ns3.bta.net.cn<br />Address: 202.106.196.115</p>
		<p>Non-authoritative answer:<br />yahoo.com 　　　　　　MX preference = 5, mail exchanger = mx4.mail.yahoo.com<br />yahoo.com　　　 　　　MX preference = 10, mail exchanger = mta-v18.mail.yahoo.com<br />yahoo.com 　　　　　　MX preference = 1, mail exchanger = mx1.mail.yahoo.com<br />yahoo.com 　　　　　　MX preference = 1, mail exchanger = mx2.mail.yahoo.com<br />yahoo.com 　　　　　　MX preference = 1, mail exchanger = mx3.mail.yahoo.com</p>
		<p>yahoo.com 　　　　　　　 nameserver = ns1.yahoo.com<br />yahoo.com 　　　　　　　 nameserver = ns3.europe.yahoo.com<br />yahoo.com 　　　　　　 　nameserver = ns5.dcx.yahoo.com<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.11<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.13<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.12<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.4<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.17<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.18<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.15<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.14<br />mx4.mail.yahoo.com 　　　internet address = 216.136.129.16<br />mta-v18.mail.yahoo.com 　internet address = 216.136.129.11<br />mx1.mail.yahoo.com 　　　internet address = 64.157.4.87<br />mx1.mail.yahoo.com 　　　internet address = 64.157.4.89<br />mx1.mail.yahoo.com 　　　internet address = 64.157.4.86<br />mx2.mail.yahoo.com 　　　internet address = 64.157.4.83<br />mx2.mail.yahoo.com 　　　internet address = 64.157.4.84<br />mx2.mail.yahoo.com 　　　internet address = 64.157.4.85<br />mx3.mail.yahoo.com 　　　internet address = 64.157.4.81<br />mx3.mail.yahoo.com 　　　internet address = 64.157.4.82<br />ns1.yahoo.com 　　　　　 internet address = 204.71.200.33<br />&gt;</p>
		<p>这个例子使用nslookup来查询yahoo.com这个zone的邮件服务器，需要将类型设置为mx来执行查询。</p>
		<p>如果所要查的某域名的MX记录不存在，则出现与以下类似的提示：<br />C:&gt;nslookup<br />Default Server: ns3.bta.net.cn<br />Address: 202.106.196.115</p>
		<p>&gt; set type=mx<br />&gt; 5555555.com.cn<br />Server: ns3.bta.net.cn<br />Address: 202.106.196.115</p>
		<p>DNS request timed out.<br />timeout was 2 seconds.<br />*** ns3.bta.net.cn can't find 5555555.com.cn: Non-existent domain</p>
<img src ="http://www.cnitblog.com/lym520/aggbug/10263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-05-09 17:21 <a href="http://www.cnitblog.com/lym520/archive/2006/05/09/10263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络测试命令详解</title><link>http://www.cnitblog.com/lym520/archive/2006/05/09/10262.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Tue, 09 May 2006 09:17:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/05/09/10262.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/10262.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/05/09/10262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/10262.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/10262.html</trackback:ping><description><![CDATA[
		<span class="bold">
				<span class="smalltxt">
						<strong>
								<font face="Arial" size="2">网络测试命令详解<br /><br /></font>
						</strong>
				</span>
		</span>网管常用的网络命令 <br />如果你玩过路由器的话，就知道路由器里面那些很好玩的命令缩写。 <br />例如，"sh int" 的意思是 "show interface"。 <br />现在 Windows 2000 也有了类似界面的工具，叫做 netsh。 <br /><br />我们在 Windows 2000 的 cmd shell 下<br />输入 netsh <br />就出来：<b>netsh&gt;</b> 提示符， <br />输入 int ip <br />就显示： <b>interface ip&gt; </b><br /><br />然后输入<b> dump</b> ，我们就可以看到当前系统的网络配置：<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff"># ---------------------------------- <br /># Interface IP Configuration <br /># ---------------------------------- <br />pushd interface ip <br /><br /><br /># Interface IP Configuration for "Local Area Connection" <br /><br />set address name = "Local Area Connection" source = static addr = 192.168.1.168 <br />mask = 255.255.255.0 <br />add address name = "Local Area Connection" addr = 192.1.1.111 mask = 255.255.255.0 <br />set address name = "Local Area Connection" gateway = 192.168.1.100 gwmetric = 1 <br />set dns name = "Local Area Connection" source = static addr = 202.96.209.5 <br />set wins name = "Local Area Connection" source = static addr = none <br /><br /><br />popd <br /># End of interface IP configuration </td></tr></tbody></table></td></tr></tbody></table></center><br />上面介绍的是通过交互方式*作的一种办法。 <br />我们可以直接输入命令： <br />"<font size="4"><font color="blue">netsh interface ip add address "Local Area Connection" 10.0.0.2 255.0.0.0" </font></font><br />来添加 IP 地址。 <br /><br />如果不知道语法，不要紧的哦！ <br />在提示符下，输入 ? 就可以找到答案了。方便不方便啊？ <br /><br /><br />原来微软的东西里面，也有那么一些让人喜欢的玩意儿。可惜，知之者甚少啊！ <br /><br /><br /><b><font color="brown">Windows网络命令行程序 <br />这部分包括： <br /><br />使用 ipconfig /all 查看配置 <br />使用 ipconfig /renew 刷新配置 <br />使用 ipconfig 管理 DNS 和 DHCP 类别 ID <br />使用 Ping 测试连接 <br />使用 Arp 解决硬件地址问题 <br />使用 nbtstat 解决 NetBIOS 名称问题 <br />使用 netstat 显示连接统计 <br />使用 tracert 跟踪网络连接 <br />使用 pathping 测试路由器 <br />使用 ipconfig /all 查看配置 </font></b><br /><br />发现和解决 TCP/IP 网络问题时，先检查出现问题的计算机上的 TCP/IP 配置。可以 <br />使用 ipconfig 命令获得主机配置信息，包括 IP 地址、子网掩码和默认网关。 <br /><br /><b>注意 </b><br /><br />对于 Windows 95 和 Windows 98 的客户机，请使用 winipcfg 命令而不是 ipconfig 命令。 <br /><br />使用带 /all 选项的 ipconfig 命令时，将给出所有接口的详细配置报告，包括任何 <br />已配置的串行端口。使用 ipconfig /all，可以将命令输出重定向到某个文件，并将 <br />输出粘贴到其他文档中。也可以用该输出确认网络上每台计算机的 TCP/IP 配置，或 者进一步调查 TCP/IP 网络问题。 <br /><br />例如，如果计算机配置的 IP 地址与现有的 IP 地址重复，则子网掩码显示为 0.0.0 .0。 <br /><br />下面的范例是 ipconfig /all 命令输出，该计算机配置成使用 DHCP 服务器动态配置 TCP/IP，并使用 WINS 和 DNS 服务器解析名称。<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">Windows 2000 IP Configuration <br /><br />Node Type.. . . . . . . . : Hybrid <br />IP Routing Enabled.. . . . : No <br />WINS Proxy Enabled.. . . . : No <br /><br />Ethernet adapter Local Area Connection: <br /><br />Host Name.. . . . . . . . : corp1.microsoft.com <br />DNS Servers . . . . . . . : 10.1.0.200 <br />Description. . . . . . . : 3Com 3C90x Ethernet Adapter <br />Physical Address. . . . . : 00-60-08-3E-46-07 <br />DHCP Enabled.. . . . . . . : Yes <br />Autoconfiguration Enabled.: Yes <br />IP Address. . . . . . . . . : 192.168.0.112 <br />Subnet Mask. . . . . . . . : 255.255.0.0 <br />Default Gateway. . . . . . : 192.168.0.1 <br />DHCP Server. . . . . . . . : 10.1.0.50 <br />Primary WINS Server. . . . : 10.1.0.101 <br />Secondary WINS Server. . . : 10.1.0.102 <br />Lease Obtained.. . . . . . : Wednesday, September 02, 1998 10:32:13 AM <br />Lease Expires.. . . . . . : Friday, September 18, 1998 10:32:13 AM </td></tr></tbody></table></td></tr></tbody></table></center><br />如果 TCP/IP 配置没有问题，下一步测试能够连接到 TCP/IP 网络上的其他主机。 <br /><br /><b><font color="green">使用 ipconfig /renew 刷新配置 </font></b><br />解决 TCP/IP 网络问题时，先检查遇到问题的计算机上的 TCP/IP 配置。如果计算机 <br />启用 DHCP 并使用 DHCP 服务器获得配置，请使用 ipconfig /renew 命令开始刷新租 <br />约。 <br /><br />使用 ipconfig /renew 时，使用 DHCP 的计算机上的所有网卡（除了那些手动配置的 <br />适配器）都尽量连接到 DHCP 服务器，更新现有配置或者获得新配置。 <br /><br />也可以使用带 /release 选项的 ipconfig 命令立即释放主机的当前 DHCP 配置。<br /><br /><br /><b>注意 </b><br /><br />对于启用 DHCP 的 Windows 95 和 Windows 98 客户，请使用 winipcfg 命令的 release 和 renew 选项，而不是 ipconfig /release 和 ipconfig /renew 命令，手动释放或更新客户的 IP 配置租约。 <br />使用 ipconfig 管理 DNS 和 DHCP 类别 ID <br />也可以使用 ipconfig 命令： <br /><br />显示或重置 DNS 缓存。<br /><br />刷新已注册的 DNS 名称。 <br /><br />显示适配器的 DHCP 类别 ID。  <br /><br />设置适配器的 DHCP 类别 ID。  <br /><br /><font color="maroon">使用 Ping 测试连接 </font>''<br /><br />Ping 命令有助于验证 IP 级的连通性。发现和解决问题时，可以使用 Ping 向目标主 机名或 IP 地址发送 ICMP 回应请求。需要验证主机能否连接到 TCP/IP 网络和网络 资源时，请使用 Ping。也可以使用 Ping 隔离网络硬件问题和不兼容配置。 <br /><br />通常最好先用 Ping 命令验证本地计算机和网络主机之间的路由是否存在，以及要连 接的网络主机的 IP 地址。Ping 目标主机的 IP 地址看它是否响应，如下： <br /><br />ping IP_address <br /><br /><br /><br /><b>使用 Ping 时应该执行以下步骤： </b><br /><br />Ping 环回地址验证是否在本地计算机上安装 TCP/IP 以及配置是否正确。 <br />ping 127.0.0.1 <br /><br />Ping 本地计算机的 IP 地址验证是否正确地添加到网络。 <br />ping IP_address_of_local_host <br /><br />Ping 默认网关的 IP 地址验证默认网关是否运行以及能否与本地网络上的本地主机通 <br />讯。 <br />ping IP_address_of_default_gateway <br /><br />Ping 远程主机的 IP 地址验证能否通过路由器通讯。 <br />ping IP_address_of_remote_host <br /><br /><br /><br />Ping 命令用 Windows 套接字样式的名称解析将计算机名解析成 IP 地址，所以如果 用地址成功，但是用名称 Ping 失败，则问题出在地址或名称解析上，而不是网络连 通性的问题。<br /><br /><br />如果在任何点上都无法成功地使用 Ping，请确认： <br /><br />安装和配置 TCP/IP 之后重新启动计算机。 <br />“Internet 协议 (TCP/IP) 属性”对话框“常规”选项卡上的本地计算机的 IP 地址 有效而且正确。 <br />启用 IP 路由，并且路由器之间的链路是可用的。 <br />您可以使用 Ping 命令的不同选项来指定要使用的数据包大小、要发送多少数据包、 <br />是否记录用过的路由、要使用的生存时间 (TTL) 值以及是否设置“不分段”标志。可 以键入 ping -? 查看这些选项。 <br /><br /><br /><br />下例说明如何向 IP 地址 172.16.48.10 发送两个 Ping，每个都是 1,450 字节：<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">C:\&gt;ping -n 2 -l 1450 172.16.48.10 <br />Pinging 172.16.48.10 with 1450 bytes of data: <br /><br />Reply from 172.16.48.10:bytes=1450 time&lt;10ms TTL=32 <br />Reply from 172.16.48.10:bytes=1450 time&lt;10ms TTL=32 <br /><br />Ping statistics for 157.59.8.1: <br />Packets:Sent = 2, Received = 2, Lost = 0 (0% loss), <br />Approximate roundtrip times in milli-seconds: <br />Minimum = 0ms, Maximum = 10ms, Average = 2ms </td></tr></tbody></table></td></tr></tbody></table></center><br /><font color="red">默认情况下，在显示“请求超时”之前，Ping 等待 1,000 毫秒（1 秒）的时间让每个响应返回。如果通过 Ping 探测的远程系统经过长时间延迟的链路，如卫星链路，则响应可能会花更长的时间才能返回。可以使用 -w （等待）选项指定更长时间的超时。</font><br /><br /><br /><br /><b><font color="green">使用 Arp 解决硬件地址问题 </font></b><br /><br />“地址解析协议 (ARP)”允许主机查找同一物理网络上的主机的媒体访问控制地址，如果给出后者的 IP 地址。为使 ARP 更加有效，每个计算机缓存 IP 到媒体访问控制地址映射消除重复的 ARP 广播请求。 <br /><br />可以使用 arp 命令查看和修改本地计算机上的 ARP 表项。arp 命令对于查看 ARP 缓存和解决地址解析问题非常有用。 <br /><br /><br /><br /><br /><b><font color="purple">使用 nbtstat 解决 NetBIOS 名称问题 </font></b><br /><br />TCP/IP 上的 NetBIOS (NetBT) 将 NetBIOS 名称解析成 IP 地址。TCP/IP 为 NetBIOS 名称解析提供了很多选项，包括本地缓存搜索、WINS 服务器查询、广播、DNS 服务器查询以及 Lmhosts 和主机文件搜索。 <br /><br />Nbtstat 是解决 NetBIOS 名称解析问题的有用工具。可以使用nbtstat 命令删除或更正预加载的项目： <br /><br />nbtstat -n 显示由服务器或重定向器之类的程序在系统上本地注册的名称。 <br />nbtstat -c 显示 NetBIOS 名称缓存，包含其他计算机的名称对地址映射。 <br />nbtstat -R 清除名称缓存，然后从 Lmhosts 文件重新加载。 <br />nbtstat -RR 释放在 WINS 服务器上注册的 NetBIOS 名称，然后刷新它们的注册。 <br />nbtstat -a name 对 name 指定的计算机执行 NetBIOS 适配器状态命令。适配器状态命令将返回计算机的本地 NetBIOS 名称表，以及适配器的媒体访问控制地址。 <br />nbtstat -S 列出当前的 NetBIOS 会话及其状态（包括统计），如下例所示：<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff"><br />NetBIOS connection table <br /><br />Local name State In/out Remote Host Input Output <br />------------------------------------------------------------------ <br />CORP1 &lt;00&gt; Connected Out CORPSUP1&lt;20&gt; 6MB 5MB <br />CORP1 &lt;00&gt; Connected Out CORPPRINT&lt;20&gt; 108KB 116KB <br />CORP1 &lt;00&gt; Connected Out CORPSRC1&lt;20&gt; 299KB 19KB <br />CORP1 &lt;00&gt; Connected Out CORPEMAIL1&lt;20&gt; 324KB 19KB <br />CORP1 &lt;03&gt; Listening </td></tr></tbody></table></td></tr></tbody></table></center><br /><b>使用 netstat 显示连接统计 </b><br />可以使用 netstat 命令显示协议统计信息和当前的 TCP/IP 连接。netstat -a 命令将显示所有连接，而 netstat -r 显示路由表和活动连接。netstat -e 命令将显示Ethernet 统计信息，而 netstat -s 显示每个协议的统计信息。如果使用 netstat -n，则不能将地址和端口号转换成名称。下面是 netstat 的输出示例：<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">C:\&gt;netstat -e <br />Interface Statistics <br /><br />Received Sent <br />Bytes 3995837940 47224622 <br />Unicast packets 120099 131015 <br />Non-unicast packets 7579544 3823 <br />Discards 0 0 <br />Errors 0 0 <br />Unknown protocols 363054211 <br /><br />C:\&gt;netstat -a <br /><br />Active Connections <br /><br />Proto Local Address Foreign Address State <br />TCP CORP1:1572 172.16.48.10:nbsession ESTABLISHED <br />TCP CORP1:1589 172.16.48.10:nbsession ESTABLISHED <br />TCP CORP1:1606 172.16.105.245:nbsession ESTABLISHED <br />TCP CORP1:1632 172.16.48.213:nbsession ESTABLISHED <br />TCP CORP1:1659 172.16.48.169:nbsession ESTABLISHED <br />TCP CORP1:1714 172.16.48.203:nbsession ESTABLISHED <br />TCP CORP1:1719 172.16.48.36:nbsession ESTABLISHED <br />TCP CORP1:1241 172.16.48.101:nbsession ESTABLISHED <br />UDP CORP1:1025 *:* <br />UDP CORP1:snmp *:* <br />UDP CORP1:nbname *:* <br />UDP CORP1:nbdatagram *:* <br />UDP CORP1:nbname *:* <br />UDP CORP1:nbdatagram *:* <br /><br />C:\&gt;netstat -s <br />IP Statistics <br /><br />Packets Received = 5378528 <br />Received Header Errors = 738854 <br />Received Address Errors = 23150 <br />Datagrams Forwarded = 0 <br />Unknown Protocols Received = 0 <br />Received Packets Discarded = 0 <br />Received Packets Delivered = 4616524 <br />Output Requests = 132702 <br />Routing Discards = 157 <br />Discarded Output Packets = 0 <br />Output Packet No Route = 0 <br />Reassembly Required = 0 <br />Reassembly Successful = 0 <br />Reassembly Failures = <br />Datagrams Successfully Fragmented = 0 <br />Datagrams Failing Fragmentation = 0 <br />Fragments Created = 0 <br /><br />ICMP Statistics <br />Received Sent <br />Messages 693 4 <br />Errors 0 0 <br />Destination Unreachable 685 0 <br />Time Exceeded 0 0 <br />Parameter Problems 0 0 <br />Source Quenches 0 0 <br />Redirects 0 0 <br />Echoes 4 0 <br />Echo Replies 0 4 <br />Timestamps 0 0 <br />Timestamp Replies 0 0 <br />Address Masks 0 0 <br />Address Mask Replies 0 0 <br /><br />TCP Statistics <br /><br />Active Opens = 597 <br />Passive Opens = 135 <br />Failed Connection Attempts = 107 <br />Reset Connections = 91 <br />Current Connections = 8 <br />Segments Received = 106770 <br />Segments Sent = 118431 <br />Segments Retransmitted = 461 <br /><br />UDP Statistics <br /><br />Datagrams Received = 4157136 <br />No Ports = 351928 <br />Receive Errors = 2 <br />Datagrams Sent = 13809 </td></tr></tbody></table></td></tr></tbody></table></center><br /><b><font color="red">使用 tracert 跟踪网络连接 </font></b><br /><br />Tracert（跟踪路由）是路由跟踪实用程序，用于确定 IP 数据报访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 <br /><br /><b>Tracert 工作原理</b><br />通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包，Tracert 诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时，路由器应该将“ICMP 已超时”的消息发回源系统。 <br /><br />Tracert 先发送 TTL 为 1 的回应数据包，并在随后的每次发送过程将 TTL 递增 1，直到目标响应或 TTL 达到最大值，从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包，这在Tracert 实用程序中看不到。 <br /><br />Tracert 命令按顺序打印出返回“ICMP 已超时”消息的路径中的近端路由器接口列表。如果使用 -d 选项，则 Tracert 实用程序不在每个 IP 地址上查询 DNS。 <br /><br />在下例中，数据包必须通过两个路由器（10.0.0.1 和 192.168.0.1）才能到达主机 172.16.0.99。主机的默认网关是 10.0.0.1，192.168.0.0 网络上的路由器的 IP 地 址是 192.168.0.1。<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">C:\&gt;tracert 172.16.0.99 -d <br />Tracing route to 172.16.0.99 over a maximum of 30 hops <br />1 2s 3s 2s 10,0.0,1 <br />2 75 ms 83 ms 88 ms 192.168.0.1 <br />3 73 ms 79 ms 93 ms 172.16.0.99 <br />Trace complete. </td></tr></tbody></table></td></tr></tbody></table></center><br /><b>用 tracert 解决问题 </b><br />可以使用 tracert 命令确定数据包在网络上的停止位置。下例中，默认网关确定 192.168.10.99 主机没有有效路径。这可能是路由器配置的问题，或者是 192.168.10. 0 网络不存在（错误的 IP 地址）。<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">C:\&gt;tracert 192.168.10.99 <br /><br />Tracing route to 192.168.10.99 over a maximum of 30 hops <br /><br />1 10.0.0.1 reportsestination net unreachable. <br /><br />Trace complete. </td></tr></tbody></table></td></tr></tbody></table></center><br />Tracert 实用程序对于解决大网络问题非常有用，此时可以采取几条路径到达同一个点。 <br /><br /><b>Tracert 命令行选项</b><br />Tracert 命令支持多种选项，如下所示。 <br /><br /><b>tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name </b><br /><br /><b>选项 描述</b><br /><br />-d 指定不将 IP 地址解析到主机名称。 <br />-h maximum_hops 指定跃点数以跟踪到称为 target_name 的主机的路由。 <br />-j host-list 指定 Tracert 实用程序数据包所采用路径中的路由器接口列表。 <br />-w timeout 等待 timeout 为每次回复所指定的毫秒数。 <br />target_name 目标主机的名称或 IP 地址。 <br /><br /><br /><br /><b><font color="navy"><br />使用 pathping 测试路由器 </font></b><br /><br />pathping 命令是一个路由跟踪工具，它将 ping 和 tracert 命令的功能和这两个工具所不提供的其他信息结合起来。pathping 命令在一段时间内将数据包发送到到达最终目标的路径上的每个路由器，然后基于数据包的计算机结果从每个跃点返回。由于命令显示数据包在任何给定路由器或链接上丢失的程度，因此可以很容易地确定可能导致网络问题的路由器或链接。某些选项是可用的，如下表所示。 <br /><br />选项 名称           功能 <br />-n Hostnames 不将地址解析成主机名。 <br />-h Maximum hops 搜索目标的最大跃点数。 <br />-g Host-list 沿着路由列表释放源路由。 <br />-p Period 在 ping 之间等待的毫秒数。 <br />-q Num_queries 每个跃点的查询数。 <br />-w Time-out 为每次回复所等待的毫秒数。 <br />-T Layer 2 tag 将第 2 层优先级标记（例如，对于 IEEE 802.1p）连接到数据包并将它发送到路径中的每个网络设备。这有助于标识没有正确配置第 2 层优先级的网络设备。-T 开关用于测试服务质量 (QoS) 连通性。 <br />-R RSVP isbase Che检查以确定路径中的每个路由器是否支持“资源保留协议 (RSVP)”，此协议允许主机为数据流保留一定量的带宽。 -R 开关用于测试服务质量 (QoS) 连通性。 <br /><br />默认的跃点数是 30，并且超时前的默认等待时间是 3 秒。默认时间是 250 毫秒，并且沿着路径对每个路由器进行查询的次数是 100。 <br /><br />以下是典型的 pathping 报告。跃点列表后所编辑的统计信息表明在每个独立路由器上数据包丢失的情况。<br /><br /><center><table cellspacing="0" cellpadding="0" width="90%" border="0"><tbody><tr><td>  Quote:</td></tr><tr><td><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">D:\&gt;pathping -n msw <br /><br />Tracing route to msw [7.54.1.196] <br />over a maximum of 30 hops: <br />0 172.16.87.35 <br />1 172.16.87.218 <br />2 192.68.52.1 <br />3 192.68.80.1 <br />4 7.54.247.14 <br />5 7.54.1.196 <br /><br />Computing statistics for 125 seconds... <br />Source to Here This Node/Link <br />Hop RTT Lost/Sent = Pct Lost/Sent = Pct Address <br />0 172.16.87.35 <br />0/ 100 = 0% | <br />1 41ms 0/ 100 = 0% 0/ 100 = 0% 172.16.87.218 <br />13/ 100 = 13% | <br />2 22ms 16/ 100 = 16% 3/ 100 = 3% 192.68.52.1 <br />0/ 100 = 0% | <br />3 24ms 13/ 100 = 13% 0/ 100 = 0% 192.68.80.1 <br />0/ 100 = 0% | <br />4 21ms 14/ 100 = 14% 1/ 100 = 1% 10.54.247.14 <br />0/ 100 = 0% | <br />5 24ms 13/ 100 = 13% 0/ 100 = 0% 10.54.1.196 <br /><br />Trace complete. </td></tr></tbody></table></td></tr></tbody></table></center><br />当运行 pathping 时，在测试问题时首先查看路由的结果。此路径与 tracert 命令所显示的路径相同。然后 pathping 命令对下一个 125 毫秒显示忙消息（此时间根据跃点计数变化）。在此期间，pathping 从以前列出的所有路由器和它们之间的链接之间收集信息。在此期间结束时，它显示测试结果。 <br /><br />最右边的两栏 This Node/Link Lost/Sent=Pct 和 Address 包含的信息最有用。172.16.87.218（跃点 1）和 192.68.52.1（跃点 2）丢失 13% 的数据包。 所有其他链接工作正常。在跃点 2 和 4 中的路由器也丢失寻址到它们的数据包（如 This Node /Link 栏中所示），但是该丢失不会影响转发的路径。 <br /><br />对链接显示的丢失率（在最右边的栏中标记为 |）表明沿路径转发丢失的数据包。该丢失表明链接阻塞。对路由器显示的丢失率（通过最右边栏中的 IP 地址显示）表明这些路由器的 CPU 可能超负荷运行。这些阻塞的路由器可能也是端对端问题的一个因素，尤其是在软件路由器转发数据包时。<br /><br /><br /><font color="#800080"><strong>nbtstat -na这个命令可以防止wins中缓存造成的名称解析错误。通常ping -a是从wins服务器拿取信息，隐含的危险就是如果wins服务器没有即时更新缓存，就会产生同一个ip地址有不同bios名称的错误。<br /><br /><br /><br /></strong><strong><span class="bold"><span class="smalltxt"><font face="Arial" color="#000000" size="2">要特别提一下tracert命令<br /><br /></font></span></span><font color="purple">这是一个功能强大的命令，尤其在解决外部网路连接问题的时候，你甚至可以凭借它的测试结果，向你的ISP供应商发难！————didi_a语</font><br /><br /></strong><font color="#000000">用 tracert 解决问题 <br />可以使用 tracert 命令确定数据包在网络上的停止位置。下例中，默认网关确定 19 <br />2.168.10.99 主机没有有效路径。这可能是路由器配置的问题，或者是 192.168.10. <br />0 网络不存在（错误的 IP 地址）。 <br /><br />C:\&gt;tracert 192.168.10.99 <br /><br />Tracing route to 192.168.10.99 over a maximum of 30 hops <br /><br />1 10.0.0.1 reportsestination net unreachable. <br /><br />Trace complete. <br /><br />Tracert 实用程序对于解决大网络问题非常有用，此时可以采取几条路径到达同一个 <br />点。 <br /><br />Tracert 命令行选项 <br />Tracert 命令支持多种选项，如下表所示。 <br /><br />tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name <br /><br />选项 描述 <br />-d 指定不将 IP 地址解析到主机名称。 <br />-h maximum_hops 指定跃点数以跟踪到称为 target_name 的主机的路由。 <br />-j host-list 指定 Tracert 实用程序数据包所采用路径中的路由器接口列表。 <br />-w timeout 等待 timeout 为每次回复所指定的毫秒数。 <br />target_name 目标主机的名称或 IP 地址。 <br /><br />详细信息，请参阅使用 tracert 命令跟踪路径。</font><br /><font color="#000000"><strong>ARP（地址转换协议）的使用技巧<br /><br /></strong>    ARP是一个重要的TCP/IP协议，并且用于确定对应IP地址的网卡物理地址。实用arp命令，我们能够查<br /><br />看本地计算机或另一台计算机的ARP高速缓存中的当前内容。此外，使用arp命令，也可以用人工方式输入<br /><br />静态的网卡物理/IP地址对，我们可能会使用这种方式为缺省网关和本地服务器等常用主机进行这项作，<br /><br />有助于减少网络上的信息量。 <br /><br />    按照缺省设置，ARP高速缓存中的项目是动态的，每当发送一个指定地点的数据报且高速缓存中不存<br /><br />在当前项目时，ARP便会自动添加该项目。一旦高速缓存的项目被输入，它们就已经开始走向失效状态。<br /><br />例如，在Windows NT/2000网络中，如果输入项目后不进一步使用，物理/IP地址对就会在2至10分钟内失<br /><br />效。因此，如果ARP高速缓存中项目很少或根本没有时，请不要奇怪，通过另一台计算机或路由器的ping<br /><br />命令即可添加。所以，需要通过arp命令查看高速缓存中的内容时，请最好先ping 此台计算机（不能是本<br /><br />机发送ping命令）。 <br /><br />    ARP常用命令选项： <br /><br />　　·arp -a或arp –g<br />　　用于查看高速缓存中的所有项目。-a和-g参数的结果是一样的，多年来-g一直是UNIX平台上用来显示<br /><br />ARP高速缓存中所有项目的选项，而Windows用的是arp -a（-a可被视为all，即全部的意思），但它也可<br /><br />以接受比较传统的-g选项。 <br /><br />　　·arp -a IP<br />　　如果我们有多个网卡，那么使用arp -a加上接口的IP地址，就可以只显示与该接口相关的ARP缓存项<br /><br />目。 <br /><br />　　·arp -s IP 物理地址<br />　　我们可以向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态，或<br /><br />者在出现错误时，人工配置的物理地址将自动更新该项目。 <br /><br />　　·arp -d IP<br />　　使用本命令能够人工删除一个静态项目。 <br /><br />　　例如我们在命令提示符下，键入 Arp –a；如果我们使用过 Ping 命令测试并验证从这台计算机到 IP <br /><br />地址为 10.0.0.99 的主机的连通性，则 ARP 缓存显示以下项：<br /><br />　　Interface:10.0.0.1 on interface 0x1<br />　　Internet Address　　　Physical Address　　　Type<br />　　10.0.0.99　　　　　　 00-e0-98-00-7c-dc　　 dynamic<br /><br />    在此例中，缓存项指出位于 10.0.0.99 的远程主机解析成 00-e0-98-00-7c-dc 的媒体访问控制地址<br /><br />，它是在远程计算机的网卡硬件中分配的。媒体访问控制地址是计算机用于与网络上远程 TCP/IP 主机物<br /><br />理通讯的地址。<br /><br />    至此我们可以用ipconfig和ping命令来查看自己的网络配置并判断是否正确、可以用netstat查看别<br /><br />人与我们所建立的连接并找出ICQ使用者所隐藏的IP信息、可以用arp查看网卡的MAC地址。</font><br /></font><img src ="http://www.cnitblog.com/lym520/aggbug/10262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-05-09 17:17 <a href="http://www.cnitblog.com/lym520/archive/2006/05/09/10262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XPE系统特性</title><link>http://www.cnitblog.com/lym520/archive/2006/05/09/10246.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Tue, 09 May 2006 04:12:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/05/09/10246.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/10246.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/05/09/10246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/10246.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/10246.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Windows XP Embedded				构建在已经通过验证的				Windows 2000				代码库基础之上，				Windows 2000				使用				32				位计算体系结构以及受到全面保护的内存模型。可靠性增强包括下列内容：																Windows 				文件保护：保护核心系统文件不会在应用程序安装时被...&nbsp;&nbsp;<a href='http://www.cnitblog.com/lym520/archive/2006/05/09/10246.html'>阅读全文</a><img src ="http://www.cnitblog.com/lym520/aggbug/10246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-05-09 12:12 <a href="http://www.cnitblog.com/lym520/archive/2006/05/09/10246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows XP Embedded开发过程概述</title><link>http://www.cnitblog.com/lym520/archive/2006/04/13/9107.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Thu, 13 Apr 2006 05:14:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/04/13/9107.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/9107.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/04/13/9107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/9107.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/9107.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" height="100%" cellspacing="0" cellpadding="6" width="99%" align="center">
				<tbody>
						<tr height="100%">
								<td valign="top" bgcolor="#ffffff" colspan="6">
										<strong>
												<span class="tpc_title">Windows XP Embedded开发过程概述</span>
												<br />
												<!---->
												<br />
										</strong>
										<span class="tpc_content">
												<font size="2">您使用Windows Embedded工具套件的最终目的是创建一种能够部署在目标设备上的运行时映像。这篇概述将讲述构建运行时映像所需的一般步骤。 <br /><br />以下列出的是Windows Embedded Studio中所包含的几种开发工具。 <br /><br />1. 组件数据库：一个包含组件定义及其他支持数据的数据库。 <br /><br />2. 目标设计器：一种特定工具，它使用从数据库中选取的组件对运行时映像加以定制，并组装成实际的运行时映像。 <br /><br />3. 组件设计器：一种用来创建组件定义的工具。 <br /><br />4. 组件数据库管理器：一种将组件定义导入到数据库中的工具。 <br /><br />5. 平台特有的工具：这些工具将协助进行硬件分析、映像部署和数据转换（例如将INF文件转换成组件）。 <br /><br />具体过程如下： <br /><br />1. 识别目标设备上的硬件 <br /><br />您必须首先进行这一步骤，这样一来，运行时映像中才能够包含合适的组件。您可以通过手工方式在目标设计器中选择硬件组件，也可以使用平台提供的硬件分析工具（如目标分析器）来识别硬件。目标分析器会对您的系统进行检测，并创建一个硬件定义，这个定义可以导入到组件设计器或目标设计器中，用于启动您的配置。 <br /><br />2. 选择运行时映像中所需的特性与功能 <br /><br />在系统安装时，您只有极少有关所含特性的候选方案，与系统安装不同，嵌入式平台却提供了大量可供选择的特性。例如，在Windows XP Embedded中，您即可以选择包含底层系统特性，如FAT或NTFS，也可以选择包含各种应用程序，如Windows MediaTM Player或Internet Explorer。 <br /><br />借助目标设计器，您也可以通过组件设置对组件的行为加以定制。这些设置由组件的创作者定义，但是设置的取值可以由用户来设定。例如，如果您的配置中含有Internet Explorer组件，那么，您就可以设置浏览器的主页和标题栏。 <br /><br />3. 确定目标设备中所需要的嵌入式系统特性 <br /><br />大多数情况下，嵌入式操作系统（OS）的祖先平台最初是打算在标准个人计算机上运行的。而嵌入式设备经常与个人计算机有着截然不同的需求。例如，某些嵌入式设备没有配备显示器或可写硬盘。每种平台都为满足这些差异提供了相关特性，即嵌入式支持特性。 <br /><br />嵌入式支持特性通常以组件的形式进行发布。您可以使用目标设计器将它们添加到运行时映像中。 <br /><br />4. 包含自定义组件 <br /><br />通常情况下，平台所提供的组件无法满足您的目标设备需求。因此，您需要在运行时映像中增加某些定制化组件，用来支持附加硬件或应用程序。这些组件可以： <br /><br />A. 来自第三方厂家，并直接导入到组件数据库中。 <br />B. 通过导入INF文件的方式进行创建 <br />C. 使用组件设计器以及Windows Embedded Studio或平台特有的工具进行创建 <br /><br />5. 构建您自己的运行时映像 <br /><br />使用Windows Embedded Studio工具创建运行时映像有别于通过源代码构建应用程序。目标设计器并非通过编译OS源代码的方式来创建新的映像，它只是将OS的组件部分重新进行组装。 <br /><br />运行时映像中包含所选组件的相关资源、注册表设置以及从知识库中复制而来的文件。该映像放置在您所指定的路径中，并且必须在启动前传输到嵌入式设备中（如需了解更多细节信息，请参考下面的内容）。 <br /><br />具体构建过程主要包括以下步骤： <br /><br />A. 检查并解决相关性问题。在构建运行时映像过程中，您需要在目标设计器中进行相关性检查。这只需几分钟时间，这一步骤能够确保包含所有适当的组件。 <br />B. 组装文件与资源。目标设计器将创建目录结构，将这些文件复制到合适的运行时映像目录中，并创建相应的注册表结构。 <br /><br />6. 部署运行时映像 <br /><br />由于运行时映像是在开发系统中创建的，因此，您必须将其传输到目标设备中。您可以使用平台提供的部署工具来传输相应的运行时映像，或是简单的将其复制到您的设备中。 <br /><br />在完成上述步骤之后，您已经成功的在自己的嵌入式设备中构建并部署了一个运行时映像。Windows Embedded Studio工具能够使这一过程变得更为简单，并为嵌入式开发人员提供高度定制化能力。</font>
										</span>
										<br />
										<!---->
								</td>
						</tr>
						<tr valign="bottom" bgcolor="#ffffff">
								<td colspan="6">
										<!---->
								</td>
						</tr>
						<tr valign="bottom" bgcolor="#ffffff">
								<td colspan="5">
										<!---->
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/lym520/aggbug/9107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-04-13 13:14 <a href="http://www.cnitblog.com/lym520/archive/2006/04/13/9107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Microsoft Windows XP Embedded 开发工具概述</title><link>http://www.cnitblog.com/lym520/archive/2006/04/13/9106.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Thu, 13 Apr 2006 05:13:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/04/13/9106.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/9106.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/04/13/9106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/9106.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/9106.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">Microsoft Windows XP Embedded 开发工具概述</span>
				<br />
				<!---->
				<br />
		</strong>
		<span class="tpc_content">
				<font size="2">简介 <br />Microsoft? Windows? XP 是继 Windows 2000 和 Windows Millennium Edition 后推出的又一个 Windows 版本。Windows XP 通过将 Windows 2000 中的强大功能（包括基于标准的安全性、易管理性以及可靠性）与 Windows 98 和 Windows Millennium Edition 中的最佳功能（如即插即用、易于使用的用户界面以及具有创新意义的支持服务）进行集成，将 Windows 操作系统 (OS) 的精华有机地组织在一起。Microsoft Windows XP Embedded 是一个完全组件化的 Windows XP 操作系统。 <br /><br />有了 Windows XP Embedded 工具，您可以开发出自定义嵌入式应用程序，以及完全满足您应用程序环境需求的运行时 Windows XP 操作系统映像。 <br /><br />例如，您可能正在开发一个作为 kiosk 运行的应用程序，以便用于某个特定用途。kiosk 应用程序可能需要一个触摸屏监视器、一个串行端口、一个 CD-ROM 以及一个调制解调器，但可能不需要网络连接、Internet 访问或特殊功能选项，如高级配置和电源接口 (ACPI)。对于该示例应用程序，您应使用 Windows XP Embedded 中提供的工具来配置自定义应用程序（即 kiosk），并只需添加创建应用程序所需要的 Windows XP 组件。 <br /><br />主要设计目标 <br />Microsoft 围绕三个主要设计目标来开发 Windows XP Embedded： <br /><br />推出广泛组件化的 Microsoft Windows XP 操作系统，使设备制造商从大量的功能和特性中进行选择时具有更大的灵活性和选择权。 <br /><br /><br />在 Windows XP 发布后的 90 天内，将最具创新意义的先进的 Windows 技术投入嵌入式市场。 <br /><br /><br />推出一组功能强大的开发工具，帮助实现快速开发，并减少投入市场的时间。 <br />组件化 <br />由于 Windows XP Embedded 是 Windows 操作系统的组件化版本，所以它将标准的 Windows 操作系统划分为各个不同的组件，每个组件都描述了一个功能单元。它提供了一个嵌入启用功能，在创建将在嵌入式设备上启动的自定义运行时映像时，需要用到此功能。它还提供了一个开发工具，可用来扩展功能和生成运行时映像。 <br /><br />Windows XP Embedded 所提供的体系结构使得嵌入式开发人员可以在集成式开发环境中生成多个设备。此体系结构基于以下三个最基本的构造块： <br /><br />组件数据库，它是一个组件仓库，其中包含定义嵌入启用功能以及标准 Windows 二进制文件的信息，这些功能和二进制文件的形式是可包括在运行时映像中的组件。该数据库可以驻留在开发系统上，也可以驻留在服务器上，以便允许多个用户访问。 <br /><br />存储库，它是包含二进制文件的 cabinet (.cab) 文件，可按组件数据库中的组件定义引用这些二进制文件。存储库中包含生成过程中运行时映像所需要的二进制文件，并驻留在一个或多个服务器上，以便允许多个用户访问。 <br /><br />开发工具，可用来根据嵌入式系统硬件和软件的需求自定义 Windows 操作系统。还可以使用这些工具来扩展功能，并将运行时映像部署到嵌入式设备上。开发工具包括目标设计器、组件设计器、组件数据库管理器和目标分析器。 <br />使用 Windows XP Embedded，可以根据所选的预定义平台生成可启动的运行时映像。选择嵌入式设备所需要的功能，使运行时映像尽可能小。还可以添加由您或第三方供应商创建的应用程序或设备，对功能进行扩展。 <br /><br />Windows XP Embedded 还包括预定义示例配置，以帮助开发人员快速开始设计。预定义示例是作为宏组件包括进来的，因此可以一次实例化多个组件。在实例化宏组件时，与该宏相关联的所有组件都将被实例化。 <br /><br />而且，软硬件设计人员还可以使用 Windows XP Embedded 生成应用程序或设备，并且嵌入式系统开发人员或系统集成人员也可以使用这些应用程序或设备。系统集成人员可以使用它将其他人设计的硬件和软件集成到嵌入式设备中。 <br /><br />开发工具 <br />Windows XP Embedded 中包含以下新增的开发和创作工具： <br /><br />目标设计器 <br />使开发人员可以从所有可用的 Windows 组件数据库中选择必要的功能，将它们添加到运行时配置中，生成自定义操作系统映像。 <br /><br /><br />组件设计器 <br />使开发人员可以设计自定义操作系统组件，并将它们添加到运行时配置中。它还使开发人员可以将自定义应用程序添加到运行时配置中，以实现生成嵌入式系统所需要的灵活性。 <br /><br /><br />组件数据库管理器 <br />使嵌入式开发人员可以将它们自定义生成的操作系统组件导入 Windows XP Embedded 数据库存储库中。它还提供了诸多数据库管理任务（如更改服务器位置、查看数据库对象以及管理平台和存储库）所需的实用程序。 <br /><br /><br />目标分析器 <br />通过提供诸如所需要的目标系统的关键设备驱动程序等系统信息，在设计流程中为开发人员提供帮助。目标分析器快速识别关键操作系统组件和自定义操作系统映像所需的设备驱动程序之间的依存关系，帮助开发人员快速生成将在目标设备上成功启动的操作系统映像。 <br /><br />Microsoft Windows XP Embedded 操作系统和工具为生成下一代智能化的、32 位连接的 Windows Powered 设备提供了完善的软件平台，这些设备需要大量应用程序和 Internet 服务来实现高度灵活的解决方案。而且，Microsoft 提供了大量的程序和服务，以满足 Windows Embedded 客户、行业合作伙伴以及开发人员的特定需求。 <br /><br />开发过程 <br />目标设计器访问组件数据库，后者可用来选择需要添加到目标设备的运行时映像配置中的组件。组件数据库包含 Windows XP 操作系统中具有的全套组件。 <br /><br />生成目标设备的运行时映像后，可以使用 Windows XP Embedded 部署工具准备目标媒体，传送运行时映像，并启动目标设备。 <br /><br />创建和部署 Windows XP Embedded 运行时映像的开发过程包括七个主要步骤。必须按照以下顺序依次完成每个步骤。 <br /><br />生成运行时映像时主要涉及到以下步骤： <br /><br />1. 创建一个新的配置或使用已有的配置。使用新的配置，可以启动目标设备，然后运行目标分析器探测，从而创建包含已安装的每个硬件组件条目的设备列表。 <br /><br />2. 准备目标媒体。格式化目标设备，以便该设备可以从其永久启动媒体中启动。 <br /><br />3. 将设备列表移到开发系统，然后运行配置生成器脚本，以创建基本配置。如有必要，将组件添加到该配置中。 <br /><br />4. 运行相关性检查，并解决相关性问题。 <br /><br />5. 生成运行时映像。 <br /><br />6. 将运行时映像从开发系统传送或部署到目标设备。 <br /><br />7. 在目标设备上启动并测试运行时映像。 <br /><br />注意：在基于 Windows XP Embedded 开发嵌入式运行时映像时，可能需要执行此过程多次。 <br /><br />开发工具概述 <br />开发工具包括创作、分析以及可选的命令行工具。可以根据嵌入式系统硬件和软件的要求，使用这些工具自定义 Windows 操作系统。可以选择适当的 Windows 组件，生成并自定义自己的组件，以及生成仅包含所选功能的可启动运行时映像。这样，所生成的嵌入式系统比使用零售的完整 Windows 产品所创建的系统更小。然后，可以测试运行时映像，或者将它下载到您的硬件上。 <br /><br />目标设计器 <br />Microsoft 目标设计器是 Windows XP Embedded 中的主要开发工具。它所提供的开发环境可用来为目标设备创建基于 Windows XP 的可启动运行时映像。可以使用目标设计器执行以下操作： <br /><br />1. 在组件数据库中浏览并选择组件。 <br /><br />2. 为目标设备创建配置。可以在目标设备上运行目标分析器以创建组件列表，然后使用“目标分析器导入”功能创建基本配置。 <br /><br />3. 添加目标应用程序所需的组件。 <br /><br />4. 检查相关性，以确保配置具有创建运行时映像所需的适当组件。 <br /><br />5. 生成运行时映像。 <br />目标设计器用户界面融合了可简化开发过程的功能，如用户界面拖放、组件轻松搜索和筛选、自动相关性检查以及快速操作系统映像生成。 <br /><br />组件设计器 <br />Microsoft 组件设计器是一个开发工具，可用来定义应用程序或设备，并将其作为组件保存到组件数据库中。 <br /><br />应用程序或设备可以是由您开发的，也可以是由第三方供应商开发的。将组件保存到组件数据库后，可以使用目标设计器将其包括到嵌入式系统中。 <br /><br />可使用组件设计器执行以下任务： <br /><br />1. 通过添加自定义组件，扩展嵌入式设备的功能。 <br /><br />2. 对嵌入式设备中使用的软硬件产品进行市场推广。 <br /><br />3. 对嵌入式设备中使用的多种计算机配置（如某种单一设备的变体）进行市场推广。 <br /><br />在使用组件设计器之前，应确定将应用程序或驱动程序作为组件添加到组件数据库中的策略。 <br /><br />在确定了组件需求（包括文件、注册表项以及组件相关性）后，可以使用以下方法之一将元数据输入到组件设计器中： <br /><br />创建新的对象定义，将组件对象插入该定义中，然后手动输入元数据。 <br /><br /><br />复制一个类似组件的对象定义，然后适当地修改此信息，以满足您的组件的需要。 <br /><br /><br />将一个 .inf 文件转换为一个不完整的对象定义，然后完成此定义。 <br /><br /><br />根据组件数据库中的任意对象创建一个对象定义，然后修改此信息，以满足您的组件的需要。 <br /><br />组件数据库管理器 <br />组件数据库管理器应用程序提供对组件设计器和目标设计器工具所使用的组件数据库和存储库的管理功能。组件数据库可以驻留在开发系统或服务器上。组件数据库可以包含多个平台。使用组件数据库管理器，可以执行以下任务： <br /><br />1. 将组件数据载体 (.sld) 文件导入组件数据库中。 <br /><br />2. 更改数据库服务器位置。 <br /><br />3. 删除对象，如平台、程序包、组件和存储库。Microsoft 建议您不要删除数据库对象。 <br /><br />4. 选择一个组件数据库服务器，以便同时使用目标设计器和组件设计器。 <br /><br />5. 设置存储库。 <br /><br />6. 更改存储库搜索路径。 <br /><br />目标分析器 <br />对于任何给定的基于 x86 的计算机主板，如果只是简单地从外观看或阅读一组说明文档，可能很难确定它准确的设备结构。要作出这种判断，需要对计算机系统的每个设备都有深入的了解，而且，这可能是一个很耗费时间的过程。如果使用目标分析器，则可以很容易地通过编程方法确定其准确的体系结构。目标分析器可以在目标系统上收集数量相对较少的数据，根据 Windows XP Embedded 数据库中的组件生成平台描述。 <br /><br />使用 Windows XP Embedded 目标分析器工具确定目标设备的具体细节，并创建一个可由目标设计器嵌入运行时映像的相应配置。 <br /><br />目标分析器使用 TA.exe 程序。此探测程序运行在目标系统上，分析该平台的硬件配置，并创建一个表示目标硬件配置的可扩展标识语言 (XML) 文件。 <br /><br />此配置生成器脚本作为目标分析器中的一个导入程序运行在开发系统上，并读取由探测程序创建的 XML 文件，以查找数据库中的设备描述。最后生成的 Windows Embedded 配置 (.slx) 文件可作为生成目标设备的全功能运行时映像的基础。 <br /><br />整个目标分析过程创建一个可嵌入运行时映像的目标设备配置。 <br /><br />总结 <br />Windows XP Embedded 提供了一种方法，可以通过一组简单易用的开发工具和一种为大家所熟知的操作系统环境，来创建大量嵌入式应用程序。通过将 Windows XP 的高质量及可靠性与致力于应用程序的开发工具相结合，可以获得一种理想的开发环境，并可以很轻松地为应用程序部署一个运行时操作系统映像。</font>
		</span>
<img src ="http://www.cnitblog.com/lym520/aggbug/9106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-04-13 13:13 <a href="http://www.cnitblog.com/lym520/archive/2006/04/13/9106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XPe使用CF開機應注意事項</title><link>http://www.cnitblog.com/lym520/archive/2006/04/12/9074.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Wed, 12 Apr 2006 09:42:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/04/12/9074.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/9074.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/04/12/9074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/9074.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/9074.html</trackback:ping><description><![CDATA[
		<span class="postbody">
				<font size="2">XPe可以支援使用Compact Flash 或其他Flash type的Storage開機, <br />若是用CF的話,首先應注意以下幾點: <br />1. OS必須認為你的CF為Fixed device 而不是Removeable的,故若遇到後者的狀況,必須請CF原廠更新CF的firmware,使變成Fixed的 <br />2. 若CF是用DOS去格式化的話,必須用bootprep.exe將bootsector換成可支援XPe開機的(bootprepexe預設是在Program Files\Windows Embedded \Utilities內) <br />3. 凡是使用CF當開機媒體的話,建議要起動EWF(Enhanced Write Filter)的功能,以免造成CF重複讀寫太多次,導致CF掛掉,至於如何設定,請參考MSDN技術文章(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xpehelp/html/startpage.asp) </font>
				<br />
		</span>
<img src ="http://www.cnitblog.com/lym520/aggbug/9074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-04-12 17:42 <a href="http://www.cnitblog.com/lym520/archive/2006/04/12/9074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 Windows XP Embedded 中使用 Enhanced Write Filter (EWF) </title><link>http://www.cnitblog.com/lym520/archive/2006/04/12/9070.html</link><dc:creator>海之蓝</dc:creator><author>海之蓝</author><pubDate>Wed, 12 Apr 2006 08:15:00 GMT</pubDate><guid>http://www.cnitblog.com/lym520/archive/2006/04/12/9070.html</guid><wfw:comment>http://www.cnitblog.com/lym520/comments/9070.html</wfw:comment><comments>http://www.cnitblog.com/lym520/archive/2006/04/12/9070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lym520/comments/commentRss/9070.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lym520/services/trackbacks/9070.html</trackback:ping><description><![CDATA[
		<h1>在 Windows XP Embedded 中使用 Enhanced Write Filter (EWF) </h1>
		<h2 class="subtitle">
		</h2>
		<div class="date">发布日期： 11/8/2004<span class="datePipe"> | </span>更新日期： 11/8/2004</div>
		<div class="overview">
				<p>Stephen Berard<br />Microsoft Corporation</p>
				<p>适用于：<br />Microsoft® Windows XP® Embedded with Service Pack 1</p>
				<p>
						<b>摘要：</b>学习如何使用 Enhanced Write Filter (EWF) 并了解它的好处、它的限制以及一些有效使用它的技巧。</p>
		</div>
		<center>
				<img title="" height="6" alt="*" src="http://img.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" width="30" border="0" />
		</center>
		<div style="HEIGHT: 18px">
		</div>
		<h5 style="PADDING-TOP: 2px">本页内容</h5>
		<table style="MARGIN-TOP: 7px; MARGIN-BOTTOM: 12px" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EPB">
												<img height="9" alt="简介" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EPB">
												<font color="#002c99">简介</font>
										</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#ELC">
												<font color="#002c99">
														<img height="9" alt="覆盖的类型" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
												</font>
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#ELC">
												<font color="#002c99">覆盖的类型</font>
										</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EJE">
												<font color="#002c99">
														<img height="9" alt="配置基于磁盘的覆盖" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
												</font>
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EJE">
												<font color="#002c99">配置基于磁盘的覆盖</font>
										</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EVF">
												<font color="#002c99">
														<img height="9" alt="配置基于 RAM 的覆盖" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
												</font>
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EVF">
												<font color="#002c99">配置基于 RAM 的覆盖</font>
										</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#E1G">
												<font color="#002c99">
														<img height="9" alt="EWF 管理器应用程序" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
												</font>
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#E1G">
												<font color="#002c99">EWF 管理器应用程序</font>
										</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EBH">
												<font color="#002c99">
														<img height="9" alt="EWF 问题疑难解答" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
												</font>
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EBH">
												<font color="#002c99">EWF 问题疑难解答</font>
										</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EQH">
												<font color="#002c99">
														<img height="9" alt="成功技巧" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
												</font>
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EQH">
												<font color="#002c99">成功技巧</font>
										</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EBAAC">
												<font color="#002c99">
														<img height="9" alt="小结" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
												</font>
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#EBAAC">
												<font color="#002c99">小结</font>
										</a>
								</td>
						</tr>
				</tbody>
		</table>
		<a name="EPB">
		</a>
		<h2>简介</h2>
		<p>EWF 提供了一种保护卷以防止写入的手段。这使操作系统 (OS) 可以从只读媒体（如 CD ROM、写保护硬盘或闪存）中启动。所有对受到 EWF保护的卷进行的写入都被重定向到覆盖。这些写入被缓存在覆盖中并且作为卷的一部分提供。这会产生该卷可写的表象。覆盖可能存在于磁盘或随机访问内存 (RAM) 中。如果需要，可以将覆盖中存储的数据提交给受保护的卷。<b>图</b><b> 1</b> 概述了 EWF。</p>
		<div style="WIDTH: 380px">
				<img height="318" alt="ewf_winxp01" src="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/art/ewf_winxp01.gif" width="380" border="0" />
				<br />
				<p class="figureCaption">
						<b>图</b>
						<b> 1. EWF </b>
						<b>概述</b>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>有关 EWF 细节的详细信息，请参阅产品文档中的 <a href="http://msdn.microsoft.com/library/en-us/xpehelp/html/xeconEnhancedWriteFilter.asp" target="_blank"><font color="#002c99">Enhanced Write Filter</font></a>。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<font color="#002c99">返回页首</font>
				</a>
		</div>
		<a name="ELC">
		</a>
		<h2>覆盖的类型</h2>
		<p>Microsoft® Windows® XP Embedded with Service Pack 1 (XPE w/SP1) 中支持两个基本类型 EWF 覆盖。首先是基于磁盘的覆盖，它将所有写入操作重定向到硬盘上的不同分区。如果需要，可以将覆盖分区中存储的数据提交到受保护的卷。对于单个卷，可能存在多个磁盘覆盖，并且这些覆盖可能分层。通过这一机制，可以为磁盘创建多个检查点。您可以剥离覆盖层以便还原到以前的视图。这可以通过 EWF 管理器应用程序进行控制（有关详细信息，请参阅下面的“EWF 管理器应用程序”部分）。XPE w/SP1 每卷最多支持 9 个覆盖。</p>
		<p>第二种类型的覆盖是基于 RAM 的覆盖。基于 RAM 的覆盖将所有写入操作重定向到内存。通常，当计算机关闭或重新启动时，该数据会丢失。XPE w/SP1 能够使该数据在关机后继续存在。但是，如果计算机不是正常关机，则数据会丢失。每个卷只能配置 1 个 RAM 覆盖。</p>
		<p>下表概述了每个覆盖类型的优缺点：</p>
		<table class="dataTable" id="EQC" cellspacing="0" cellpadding="0">
				<thead>
						<tr class="stdHeader" valign="top">
								<td id="colESC"> </td>
								<td id="colEUC">基于磁盘的覆盖</td>
								<td id="colEYC" style="BORDER-RIGHT: #cccccc 1px solid">基于 RAM 的覆盖</td>
						</tr>
				</thead>
				<tbody>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">
												<b>优点</b>
										</p>
								</td>
								<td>
										<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>1.</p>
																</td>
																<td>
																		<p class="lastInCell">保护磁盘上的数据以避免被改变或破坏 </p>
																</td>
														</tr>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>2.</p>
																</td>
																<td>
																		<p class="lastInCell">提供磁盘内容的多个快照 </p>
																</td>
														</tr>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>3.</p>
																</td>
																<td>
																		<p class="lastInCell">允许将磁盘写入操作提交到受保护的卷 </p>
																</td>
														</tr>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>4.</p>
																</td>
																<td>
																		<p class="lastInCell">还原到以前的覆盖级别 </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>1.</p>
																</td>
																<td>
																		<p class="lastInCell">保护磁盘上的数据以避免被改变或破坏 </p>
																</td>
														</tr>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>2.</p>
																</td>
																<td>
																		<p class="lastInCell">启用无状态操作 </p>
																</td>
														</tr>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>3.</p>
																</td>
																<td>
																		<p class="lastInCell">使 XPE 能够在没有持久性存储的系统上运行 </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
						<tr class="evenRecord" valign="top">
								<td>
										<p class="lastInCell">
												<b>缺点</b>
										</p>
								</td>
								<td>
										<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>1.</p>
																</td>
																<td>
																		<p class="lastInCell">要求对驱动器进行分区以容纳覆盖分区 </p>
																</td>
														</tr>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>2.</p>
																</td>
																<td>
																		<p class="lastInCell">需要额外的系统开销，可能影响某些设备上的性能 </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>1.</p>
																</td>
																<td>
																		<p class="lastInCell">需要额外的内存，以存储在覆盖中缓存的数据 </p>
																</td>
														</tr>
														<tr valign="top">
																<td class="listNumber" nowrap="" align="right">
																		<p>2.</p>
																</td>
																<td>
																		<p class="lastInCell">当系统重新启动时，数据丢失 </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<div class="dataTableBottomMargin">
		</div>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<font color="#002c99">返回页首</font>
				</a>
		</div>
		<a name="EJE">
		</a>
		<h2>配置基于磁盘的覆盖</h2>
		<p>下列步骤详细说明了如何配置映像以支持 EWF 磁盘覆盖： </p>
		<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>1.</p>
								</td>
								<td>
										<p>在目标设计器中，向映像中添加 Enhanced Write Filter 组件。如果您要保护启动卷，则还需要包含 <i>EWF NTLDR</i> 组件。 </p>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>2.</p>
								</td>
								<td>
										<p>配置设备的设置，并选择 <b>DISK</b> 作为覆盖类型。在“EWF Volume Configuration”中，选择受保护的卷的数量和覆盖级别。根据您希望在覆盖中具有的空间量，设置分区大小。确保为每个受保护的卷输入磁盘号和分区号。还应该选中 <b>Start EWF Enabled</b> 复选框。有关所有字段的说明，请参阅 Windows XP Embedded 文档。 </p>
										<div style="WIDTH: 393px">
												<img height="347" alt="ewf_winxp02" src="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/art/ewf_winxp02.gif" width="393" border="0" />
												<br />
												<p class="figureCaption">
														<b>图</b>
														<b> 2. </b>
														<b>配置基于磁盘的覆盖</b>
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>3.</p>
								</td>
								<td>
										<p>配置、生成映像并将其部署到设备。需要对驱动器进行分区，以便在驱动器上的扩展分区中具有可用的空闲空间。这将由 EWF 用来在磁盘覆盖中存储数据。因此，它需要足够大以便容纳您的数据。例如，要使受保护的卷可以使用 100 MB 的覆盖，该分区必须起码为 100 MB。 </p>
										<p>
												<b>注</b> 如果扩展分区不存在，并且您具有的主分区少于四个，则将需要在驱动器上保留未分区的空间。</p>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>4.</p>
								</td>
								<td>
										<p>
												<i>启动设备。</i>在 FBA 期间，EWF 将基于注册表中的设置配置本身。它将创建并格式化 EWF 分区。 </p>
								</td>
						</tr>
				</tbody>
		</table>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<font color="#002c99">返回页首</font>
				</a>
		</div>
		<a name="EVF">
		</a>
		<h2>配置基于 RAM 的覆盖</h2>
		<p>下列步骤详细说明了如何配置映像以支持 EWF RAM 覆盖： </p>
		<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>1.</p>
								</td>
								<td>
										<p>在目标设计器中，向映像中添加 Enhanced Write Filter 组件。 </p>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>2.</p>
								</td>
								<td>
										<p>配置设备的设置，将 EWF 分区大小设置为 0，并且选择 <b>RAM</b> 作为覆盖类型。在“EWF Volume Configuration”中，选择受保护的卷的数量。将覆盖级别的数量设置为 1，将分区大小设置为 0。确保为每个受保护的卷输入磁盘号和分区号。而且，选中 <b>Start EWF Enabled</b>复选框。有关所有字段的说明，请参阅 Windows XP Embedded 文档。 </p>
										<div style="WIDTH: 392px">
												<img height="349" alt="ewf_winxp03" src="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/art/ewf_winxp03.gif" width="392" border="0" />
												<br />
												<p class="figureCaption">
														<b>图</b>
														<b> 3. </b>
														<b>配置基于</b>
														<b> RAM </b>
														<b>的覆盖</b>
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>3.</p>
								</td>
								<td>
										<p>配置、生成映像并将其部署到设备。您需要将驱动器分区，以便在该驱动器上的扩展分区中至少具有 32 KB 的可用空闲空间（有关详细信息，请参阅上一部分中的附注）。该空间将被 EWF 用于在前后两次启动之间存储 RAM 覆盖的配置数据。 </p>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>4.</p>
								</td>
								<td>
										<p>启动设备。在 FBA 期间，EWF 将基于注册表中的设置配置本身。它将创建一个最小的 EWF 分区来存储它的配置信息。 </p>
								</td>
						</tr>
				</tbody>
		</table>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<font color="#002c99">返回页首</font>
				</a>
		</div>
		<a name="E1G">
		</a>
		<h2>EWF 管理器应用程序</h2>
		<p>EWF 管理器应用程序是一个用于管理设备上的 EWF 的控制台实用工具，。它是一个可以添加到配置中的可选组件。它使您可以控制 EWF 操作。您可以通过发出以下命令来检查 EWF 状态：</p>
		<pre class="codeSample">Ewfmgr
</pre>
		<p>EWF 管理器显示类似于以下内容的结果：</p>
		<pre class="codeSample">Overlay Configuration
Volume Size             2048030208
Segments                8192
Segment Size            249856
Free segments           8192
Max Levels              3
Max Protected Volumes   1
Protected Volumes       1
Overlay volume  percent full 0.00
Protected volumes
Arc Path "\Device\HarddiskVolume1"
</pre>
		<p>您可以检查 EWF 卷和覆盖的状态，启用/禁用 EWF，设置检查点，以及提交和回滚更改。所有非状态命令都在下一次重新启动时生效。有关每个命令及其用法的详细信息，请参阅 Windows XP Embedded 文档。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<font color="#002c99">返回页首</font>
				</a>
		</div>
		<a name="EBH">
		</a>
		<h2>EWF 问题疑难解答</h2>
		<p>EWF 在 FBA 过程中向 FBAlog.txt 文件报告错误。在 FBA 已经完成之后，可以分析该文件，以了解有关 EWF 的状态的详细信息。检查该信息，以确保 EWF 能够创建分区、创建正确的覆盖类型以及保护所需的卷。</p>
		<h3>创建 EWF 分区时失败</h3>
		<p>最常见的错误之一是在创建 EWF 分区时失败。请确保在具有不到四个主分区的驱动器上，具有处于扩展分区中的可用空闲空间或者未分区的空间。EWF 将从该空间创建分区以存储配置信息。就磁盘覆盖而言，该分区还将存储写入受 EWF 保护的卷的任何数据。这分区或许可以在磁盘管理器中看到；但是，它将不具有驱动器号。</p>
		<h3>不停地重新启动</h3>
		<p>当 FBA 试图在已经包含以前的 EWF 分区的系统上配置 EWF 分区时，可能发生不停地重新启动这种情况。这通常发生在开发场所中 — 在这里，反复使用同一系统进行开发和测试。要解决该问题，请清除 EWF 分区。这可以用以下命令完成：</p>
		<pre class="codeSample">Etprep /delete
</pre>
		<h3>写入 EWF 分区时出错</h3>
		<p>在写入受到 EWF保护的分区时，可能得到以下错误信息：</p>
		<pre class="codeSample">Delayed Write Failed. Windows was unable to save all data for the file  
</pre>
		<p>在用完 EWF 分区中的空间时，会发生这种情况。增加 EWF 分区的大小（基于磁盘的覆盖）或者安装额外的内存（基于 RAM 的覆盖）将有助于避免该问题。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<font color="#002c99">返回页首</font>
				</a>
		</div>
		<a name="EQH">
		</a>
		<h2>成功技巧</h2>
		<p>下列主题讨论了一些与存储和磁盘卷有关的问题。</p>
		<h3>EWF 通常需要由一些持久性存储进行支持</h3>
		<p>大多数 EWF 配置必须将一些存储分配给 EWF。即使对于 RAM 覆盖而言，也是如此。这是因为 EWF 驱动程序需要在前后两次启动之间存储配置数据。对于磁盘覆盖而言，该数据存储在覆盖分区中。对于 RAM 覆盖而言，必须提供少量未分区的空间（大约 32 KB）。</p>
		<p>对于只有单个受保护卷的 RAM 覆盖而言，存在例外。在这种情况下，EWF 分区可能在 FBA 完成之后删除。这是为了适应诸如 El Torito 和从闪存中启动之类的情况。在这种情况下，设置被存储在注册表中。</p>
		<h3>EWF 只支持由受保护的卷报告的可用空间数量</h3>
		<p>在基于磁盘和基于 RAM 的覆盖中，EWF 只支持由基础的、受保护的卷报告的数据量的写入操作。无论系统可用的空闲磁盘或 RAM 的数量如何，都是如此。这是因为 EWF 假设数据可能必须在基础卷中持续保存。</p>
		<h3>从基于磁盘的覆盖所保护的 EWF 卷中启动要求使用 EWF NTLDR</h3>
		<p>在从由基于磁盘的覆盖所支持的、受到 EWF 保护的卷中启动时，必须使用 EWF NTLDR。使用该组件而不是标准的 NT 加载程序 (NTLDR)。在从由基于 RAM 的覆盖所支持的受保护卷中启动时，不需要使用 EWF NTLDR。从 El Torito CD 启动时不需要使用 EWF NTLDR。</p>
		<h3>EWF 只支持基本磁盘</h3>
		<p>EWF 组件只能使用基本磁盘。动态磁盘不受支持。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1ewfwinxp.mspx#top">
						<font color="#002c99">返回页首</font>
				</a>
		</div>
		<a name="EBAAC">
		</a>
		<h2>小结</h2>
		<p>Enhanced Write Filter 为嵌入式开发人员提供了一种灵活的工具，以便防止卷被写入。这使 OS 和其他需要读写媒体的软件无须修改即可操作。它的灵活性使其可以在多种情况下使用，这包括从闪存、CD ROM 和只读磁盘中启动。</p>
<img src ="http://www.cnitblog.com/lym520/aggbug/9070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lym520/" target="_blank">海之蓝</a> 2006-04-12 16:15 <a href="http://www.cnitblog.com/lym520/archive/2006/04/12/9070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>