Microsoft Windows Management Instrumentation (WMI)。中文名字叫Windows管理规范。从Windows 2000开始,WMI(Windows 管理规范)就内置于操作系统中,并且成为了Windows系统管理的重要组成部分。所以大家很容易就能见到它的,因为我们至少也应该是个Windows 2000的使用者了。下面我将详细介绍它的每个细节,让你从不认识它到喜欢上它。
WMI能做什么?
WMI不仅可以获取想要的计算机数据,而且还可以用于远程控制。远程控制计算机可是大家都喜欢的东西。很多远程监视控制类软件通常的做法是:在远程计算机上运行服务端后台程序,在本地计算机上运行一个客户器端控制程序,通过这二个程序的勾结来实现对计算机的远程控制。这种作法的缺点是十分明显的,当服务端程序关了,这种远程监控就无法实现了,因为没有内线了。而WMI实现的远程监视和控制完全不需要另外装什么服务端的东西,系统默认就将WMI服务给开了。具体说来,WMI的本领如下:
1.获取本地和远程计算机的硬件软件信息。
2.监视本地和远程计算机的软件和服务等运行状况。
3.控制本地和远程计算机的软件和服务运行。
4.高级应用。
如何访问WMI?
当我们知道WMI的某些本领后,我们已经很想知道如何认识他并利用他了。利用WMI有许多途径,简单说来有三种了:
1.通过微软给我们提供的各种工具来实现普通查询和操作。主要包括命令提示符下面的WMIC,还有就是微软给我们提供的WMI TOOL,大家可以到微软的网站上免费下载,当然我也可以给大家免费提供。
2.通过自己编写脚本来实现更灵活操作。要想真正灵活实用,对WSH脚本的熟悉是必须的,当然如果你不熟悉也没有关系,稍后我会给大家详细解释的。
3. 通过编写我们自己的程序来访问并操作它。什么语言都行。如果用.NET类程序要简单些了,如果用VC等要复杂些了,起码我是这么认为的。
4.还有个访问它的方法,就是到它的一个巢穴。在C:\WINDOWS\system32\wbem目录中的东西都和它有密切联系,有日志和各种工具,在里面你可以找到很多答案的。不过这些东西一般都不适合我们新手玩了,感觉有点吓人。
我们今天的任务?
今天我们的任务有五个:
任务一:利用WMIC列出远程计算机上的所有进程。
任务二:利用WMIC关闭本地进程。
任务三:通过WMIC把远程主机的进程信息保存在一个网页中
任务四:利用脚本实时监视对方进程
任务五:利用脚本给对方开放共享
查看和监视进程,还要把进程给杀掉,最后还要给对方开个共享,我们这位朋友快把坏事做尽了。明白了我们的任务,我们就可以上路了。这次我们将主要借助WMIC和脚本来实现我们的任务,所以我们将主要分为两大部分来讲解。在五个任务的实战中我们将更加深入地理解它,没有基础没有关系,我将尽力去解释所有的所谓的基础,让大家能很轻松地和这位朋友交流。
第一部分:利用WMIC来认识WMI
WMIC是Windows Management Instrumentation Commandline的简称,WMIC扩展WMI,提供了从命令行接口和批命令脚本执行系统管理的支持。为WMI名称空间提供了一个强大的、友好的命令行接口。有了WMIC,WMI就显的平易近人了。
执行“WMIC”命令将启动WMIC命令行环境。第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令将以交互的方式执行。如果你不知道该如何和它交互,请敲个“/?”,细细看完全部的说明,你就知道了。WMIC也可以按照非交互的模式运行。如果要执行某个单步的任务,或者运行批命令中的一系列WMIC命令,非交互模式就很有用。要使用非交互模式,只要在同一个命令行上启动WMIC并输入要执行的命令就可以了。
1.任务一:利用WMIC列出远程计算机上的所有进程
这是一个实现起来很简单的任务,和你用一个DOS命令一样简单,因为我们要循序渐进嘛,所以安排了这么一个热身任务。在命令提示符下敲入下面的命令,我们将看到。
WMIC /node:192.168.1.2 /user:net process
解说:
1)上面命令中的NODE和USER是全局开关。如果你不愿意另外输一次密码,你也可以用PASSWORD开关,后面写上密码就可以了(WMIC /node:192.168.1.2 /user:net /password:password process)。千万要注意,这里的用户名和密码都必须是管理员级别的,其它的无效。WMIC提供了大量的全局开关、别名、动词、命令和丰富的命令行帮助增强用户接口。全局开关是用来配置整个WMIC会话的选项。
2)Process是个别名,执行了一个Win32_process类的WQL查询,至于说是WMI的类是什么东西,感兴趣的就自己找资料多多了解,如果你很懒的话,就等我有时间给你开课讲解。别名是用户和WMI名称空间一个简化语法的中间层。当你指定一个别名时,动词(Verb)表示要执行的动作。
3)如果你愿意,你可以在该后面加上个动词等,比如 LIST FULL等(如:WMIC /node:192.168.1.2 /user:net /password:password process),这样你就看得更清楚了。
小提示:安装了WMIC的机器可以连接到任何一台安装了WMI的机器,被连接的机器不需要安装WMIC。
2.任务二:利用WMIC关闭本地进程
执行下面的命令将关闭正在运行的QQ。我比较胆小,所以不敢关别人的QQ,只能拿我的QQ试验了,如果你的智商还够用的话,胆子比较大的话,你很快就会去关别人的了。
WMIC
process where name=”qq.exe” call terminate
解说:
1)这次我们是用交互式的方法来执行任务,具体界面我就不多说了,图上画的比我说的好多了。
2)Call也是个动词,这个动词可是厉害了,控制类的没有不用它的,它就是可以调用各种类的各种方法的大将。这里我们调用了terminate方法。从字面上你就可以看出是恶狠狠的。
3)Where能够让你查询和筛选。在超级多的实例中找到你想要的。实例就是指每个类的具体实现了。前面的例子中看到的各个进程都分别算是WIN32_PROCESS中的一个实例。
3.任务三:通过WMIC把远程主机的进程信息保存在一个网页中
这个任务和任务一中的大致相同,是任务一的加强。在任务一中信息以文本的形式显示出来了。其实除了文本形式的输出之外,WMIC还能够以其他形式返回命令执行结果,例如XML、HTML或者CSV(逗号分隔的文本文件),如图3所示。我们可以敲入下面的命令:
wmic /output:C:\1.html /node:192.168.1.2 /user:net process list full /format:hform.xsl
输入密码 :******
解释:
1)全局开关OUTPUT指明将这些信息保存在什么地方。
2)全局开关FORMAT指明了用什么样的格式,至于说有那些格式可以用,你可以参看C:\WINDOWS\system32\wbem目录中的*.xsl文件,你甚至不用管它们从哪里来的,用就是了。挨着看看,一定可以找到你喜欢的。
第二部分:利用脚本来认识WMI
命令提示符的工具确实好用,但是却显示不出我们是高手,高手都是能利用程序来实现目的的。下面我们就开始用脚本来实现我们的任务,功能将更加强大,操作将更加灵活。
无论脚本还是真正意义上的程序,要检索 WMI 托管资源信息进而查询并利用WMI,都需要遵循以下三个步骤的。
1.连接到 WMI 服务。建立一个到目标计算机上的 Windows 管理服务的连接。
2.检索 WMI 托管资源的实例。主要取决于要执行的任务。
3.显示WMI 某实例属性和调用其方法。
1.任务四:利用脚本实时监视对方进程
在任务一和任务三中我们都是在查看对方的进程,出来的结果对我们意义不是很大,在这个任务中我们要从现在开始每当他开一个任务我们就察觉到,并把它记录下来。我们要在他开进程的那一秒开始报告并记录,我们要清楚他所开的程序所在的位置,我们要比他更清楚地知道这些信息。
现在我们就按照前面提到的三个步骤来实现任务。
首先,我们连接到对方的WMI。在这里我们首先调用 VBScript 的中的Createobject()来得到一个对象,然后利用这个特殊的对象的方法来连接到远程的计算机上。这个特殊的对象就是wbemscripting.swbemlocator。
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
注意其中的strComputer就是你所要连接的计算机的名称或者IP地址,strUser,strPwd当然就是用户名和密码了,我们说过这个用户必须是具有管理员权限的才可以。root\cimv2是WMI的命名空间,关于WMI的命名空间,大家可以到“计算机管理\WMI控件”中看到,这里面的学问就大了,得慢慢琢磨,为了我们的任务快速实现,我就不多解释了。用这种方法连接到WMI,返回一个对SWbemServices对象的引用,一旦有一个对 SWbemServices对象的引用。我们就可以进行第二个步骤了。
在第二个步骤中,我们将得到WMI 托管资源的实例,我们利用WbemServices中的一个方法ExecNotificationQuery可以查询我们所要的类,进而可以得到该类中实例。
Set colMonitoredProcesses = wbemServices. _
ExecNotificationQuery("select * from __instancecreationevent " _
& " within 1 where TargetInstance isa ’Win32_Process’")
注意这里有个类似于SQL语言的查询语言,这里叫做WQL语言,懂SQL的一看就明白了,不懂的就在网上找找它的资料,满天都是。得到的colMonitoredProcesses是所查询的类的实例的集合。有了这些我们的第三个步骤就可以开始了。
在第三个步骤中,我们将显示出得到的实例中的属性。刚才我们得到的是实例的集合,在这里我们通过colMonitoredProcesses.NextEvent来获取每一个具体的实例,得到每一个具体的实例后,我们就可以显示出他们的属性,也就是我们想看的东西了。这里我们显示了CommandLine的属性值。
到现在你是否有些迷惑了,因为你还不知道到底WMI里面有那些类,具体类又有哪些属性,呵呵,没有关系的,用一些工具可以很轻松的得到这些信息。比如系统自带的wbemtest,在运行中敲入这个程序名,你就可以看到这些了,它也遵循连接、查询、枚举这三个步骤。自己慢慢玩吧,很快你就会发现WMI太大了,单是命名空间就有10多个,然后单是我们常用的空间root\CIMV2里面就有近1000个类,每个类里面又有好多的属性,有些类还有好多方法。哈哈,头晕了吧?没关系,其实你只需要知道其中的一些就好了。
看到这些估计你的头已经很大了,但是恭喜你,我们的这个任务已经完成了,是的,就是这么简单,下面我将完整代码奉献出来。
Set colArgs = WScript.Arguments
If WScript.arguments.count < 3 then
WScript.Echo "USAGE:" & vbCrLf & " Monitor Computer User Password files"
WScript.quit
End If
strComputer = wscript.arguments(0)
strUser = wscript.arguments(1)
strPwd = wscript.arguments(2)
strFile = wscript.arguments(3)
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
Set colMonitoredProcesses = wbemServices. _
ExecNotificationQuery("select * from __instancecreationevent " _
& " within 1 where TargetInstance isa ’Win32_Process’")
i = 0
Do While i = 0
Set objLatestProcess = colMonitoredProcesses.NextEvent
Wscript.Echo now & " " & objLatestProcess.TargetInstance.CommandLine
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objNewFile = objFS.OpenTextFile(strFile,8,true)
objNewFile.WriteLine Now() & " " & objLatestProcess.TargetInstance.CommandLine
objNewFile.Close
Loop
到这个程序的核心了吧?相信你已经懂了其中的很多,剩余的部分代码我稍后解释。我们先来感性认识一下,先看它该怎么用吧!把上面的代码拷贝到记事本中,然后保存为monitor.vbs的文件,然后在命令提示符下输入:
CSCRIPT monitor.vbs
回车,你就会看到帮助,下面举例说明这个脚本的具体用法:
CSCRIPT monitor.vbs 192.168.1.2 user password C:\1.txt
在命令提示符下敲入上面的命令就OK了,每当对方开一个程序的时候,你就可以看到时间,程序路径和程序名。如果你没有时间去看这些信息,你还可以等有时间的时候到C:\1.txt看到这些信息。
小知识:
每次使用脚本,都必须敲入CSCRIPT和脚本的后缀名,很麻烦。这是因为系统默认的执行引擎是WSCRIPT,可以将它改成CSCRIPT。另外一个让人不爽的是脚本执行后总要显示微软的说明,好像脚本不是我们写的一样。不过你可以通过在命令提示符下敲入下面的命令来解决这个问题:
cscript //nologo //h:cscript //s
这样你以后再运行这些脚本的时候就不用在敲入CSCRIPT了,也不用在写入.vbs的后缀名了,就上面的例子来说,你可以这样用:
monitor 192.168.1.2 user password C:\1.txt
解释:
1)前面的那几行,大概就是为了显示帮助和处理我们在后面输入的参数。应用到了WScript.Arguments这个对象,利用它我们可以来获取并处理脚本的参数。
2)那个死循环是为了让我们一直监视他(她),每当他开一个程序,我们就得到一个新的实例,我们就可以知道他更多的信息,哈哈,够狠吧。这样你也就知道了,当我们这个脚本运行后,只有通过我们人为中止才能中断监视,人为中止的方法大家可以用CTRL+C来完成,也可以用各种野蛮的方法来中止。
3)在代码中出现的另外一个核心对象就是FileSystemObject,应该是大家的老朋友了吧,我这里就不再做解释了,我们在这里应用它主要是为了将结果同时保存到一个文件中,我们利用它来创建或打开一个文件,将信息追加进去。
4)至于那个NOW,虽然体积很小,但是却正是它给我们提供了时间这个重要的信息。
5)如果你想要监视的是自己的计算机而不是远程的计算机(据我所知,这个应用还是很广的)。那么请将计算机名的参数写为一个小点,用户名和密码留为空。如下所示:
monitor . "" "" C:\1.txt
2.任务五:利用脚本给对方开放共享
有了任务四的基础,这次我们就先看代码吧:
Set colArgs = WScript.Arguments
If WScript.arguments.count < 5 then
WScript.Echo "USAGE:" & vbCrLf & " Rshare Computer User Password SharePath ShareName"
WScript.quit
End If
strComputer = wscript.arguments(0)
strUser = wscript.arguments(1)
strPwd = wscript.arguments(2)
strPath = wscript.arguments(3)
strShareName = wscript.arguments(4)
intMaximumAllowed = 1
strDescription = "Temporary share"
Const SHARED_FOLDER = 0
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
Set objSWbemObject = wbemServices.Get("Win32_Share")
intReturnValue = objSWbemObject.Create(strPath, _
strShareName, _
SHARED_FOLDER, _
intMaximumAllowed, _
strDescription)
if(intReturnValue = 0) Then
WScript.Echo "The share have been created successfully"
End If
解说:
1)我们可以看出来前面的那几行是为显示帮助和处理输入参数而存在的。
2)紧接着设置了几个变量,为以后做参数用的。这里我们可以先不理会它。
3)连接到主机的WMI,然后就是查询。前面已经说的很详细了。
4)这次得到实例集后,我们用了它的一个方法,也就是这个方法让共享成为了可能,联系到第二部分的内容,我们不难知道第一个参数表示要共享的路径和文件名,第二个参数表示共享名,第三个参数为0就可以了,第四个参数是指可以连接的人数,第五个参数是共享描述了,而我们只关心前面的两个参数。如果手头有MSDN那就好办了,到MSDN中可以查到该方法的更详细的内容。
5)这次我们根据第四步的返回值来得到共享是否成功,并给出提示。不同的返回值代表不同的意义。这个信息在MSDN中可以很清楚地查到。比如0代表成功返回,2代表拒绝访问,9代表用户名错误,25代表主机名没有找到等等。
6)这次我们要注意的是,用这个脚本来实现远程文件共享,要求远程存在这个文件,否则无法共享。当然你也可以利用教本创建自己的文件夹,很容易的,自己创建吧。
7)如上脚本创建后的共享是完全共享。就是可以删除修改文件的。
8)用法举例:share netp net swswsw C:\dodo marsh
好了,到现在为止,大家应该对这位朋友有些了解了,我的介绍任务也就告一段落了,如果大家想进一步认识它,那就主要靠大家的主动性了。这次我们主要通过WMIC和脚本来认识它,下次我将带领大家通过真正的程序代码来认识它,让它也有个象Windows一样漂亮的脸蛋。今天我所提到的估计只能算是WMI的万分之一,都算不上是冰山一角。剩余的要靠自己来发挥了。如果你肯利用你的所学,那么奇迹就会产生。
Sql Server
· ODBC
o 标准连接(Standard Security):
“Driver={SQL Server};Server=Aron1;Database=pubs;Uid=sa;Pwd=asdasd;”
1)当服务器为本地时Server可以使用(local);
“Driver={SQL Server};Server=(local);Database=pubs;Uid=sa;Pwd=asdasd;”
2)当连接远程服务器时,需指定地址、端口号和网络库
“Driver={SQL Server};Server=130.120.110.001;Address=130.120.110.001,1052;Network=dbmssocn;Database=pubs;Uid=sa;Pwd=asdasd;”
注:Address参数必须为IP地址,而且必须包括端口号
o 信任连接(Trusted connection): (Microsoft Windows NT 集成了安全性)
“Driver={SQL Server};Server=Aron1;Database=pubs;Trusted_Connection=yes;”
或者
“Driver={SQL Server};Server=Aron1;Database=pubs; Uid=;Pwd=;”
o 连接时弹出输入用户名和口令对话框:
Conn.Properties(“Prompt”) = adPromptAlways
Conn.Open “Driver={SQL Server};Server=Aron1;DataBase=pubs;”
· OLE DB, OleDbConnection (.NET)
o 标准连接(Standard Security):
“Provider=sqloledb;Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;”
o 信任连接(Trusted connection):
“Provider=sqloledb;Data Source=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;”
(如果连接一个具体的已命名SQLServer实例,使用Data Source=Servere Name\Instance Name;但仅适用于 SQLServer2000)例如:”Provider=sqloledb;Data Source=MyServerName\MyInstanceName;Initial Catalog=MyDatabaseName;User Id=MyUsername;Password=MyPassword;”
o 连接时弹出输入用户名和口令对话框:
Conn.Provider = “sqloledb”
Conn.Properties(“Prompt”) = adPromptAlways
Conn.Open “Data Source=Aron1;Initial Catalog=pubs;”
o 通过IP地址连接:
“Provider=sqloledb;Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;”
(DBMSSOCN=TCP/IP代替Named Pipes, Data Source的末尾是需要使用的端口号(缺省为1433))
· SqlConnection (.NET)
o 标准连接(Standard Security):
“Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;”
或者
“Server=Aron1;Database=pubs;User ID=sa;Password=asdasd;Trusted_Connection=False”
(这两个连接串的结果相同)
o 信任连接(Trusted connection):
“Data Source=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;”
或者
“Server=Aron1;Database=pubs;Trusted_Connection=True;”
(这两个连接串的结果相同)
(可以用serverName\instanceName代替Data Source,取值为一个具体的SQLServer实例,但仅适用于 SQLServer2000)
o 通过IP地址连接:
“Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;”
(DBMSSOCN=TCP/IP代替Named Pipes, Data Source的末尾是需要使用的端口号(缺省为1433))
o SqlConnection连接的声明:
C#:
using System.Data.SqlClient;
SqlConnection SQLConn = new SqlConnection();
SQLConn.ConnectionString=”my connectionstring”;
SQLConn.Open();
VB.NET:
Imports System.Data.SqlClient
Dim SQLConn As SqlConnection = New SqlConnection()
SQLConn.ConnectionString=”my connectionstring”
SQLConn.Open()
· Data Shape
o MS Data Shape
“Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=Aron1;Initial Catalog=pubs;User ID=sa;Password=asdasd;”
· 更多
o 如何定义使用哪个协议
§ 举例:
“Provider=sqloledb;Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;”
名称 网络协议库
dbnmpntw Win32 Named Pipes
dbmssocn Win32 Winsock TCP/IP
dbmsspxn Win32 SPX/IPX
dbmsvinn Win32 Banyan Vines
dbmsrpcn Win32 Multi-Protocol (Windows RPC)
§ 重要提示
当通过SQLOLEDB提供者进行连接时使用以下语法:
Network Library=dbmssocn
但通过MSDASQL提供者进行连接时使用以下语法:
Network=dbmssocn
o 所有SqlConnection连接串属性
§ 下表显示了ADO.NET SqlConnection对象的所有连接串属性. 其中大多数的属性也在ADO中使用.所有属性和描述来自于msdn.
名称 缺省值 描述
Application Name 应用程序名称或者当没有提供应用程序时为.Net SqlClient数据提供者
AttachDBFilename或者extended properties或者Initial File Name 主要文件的名字,包括相关联数据库的全路径。数据库名字必须通过关键字’database’来指定。
Connect Timeout或者Connection Timeout 15 在中止连接请求,产生错误之前等待服务器连接的时间(以秒为单位)
Connection Lifetime 0 当一个连接返回到连接池,当前时间与连接创建时间的差值,如果时间段超过了指定的连接生存时间,此连接就被破坏。它用于聚集设置中在运行服务器和准备上线的服务器之间强制负载平衡。
Connection Reset ‘true’ 当连接从连接池移走时决定是否重置数据库连接。当设置为’false’时用于避免获得连接时的额外服务器往复代价。
Current Language SQL Server语言记录名称
Data Source或Server或Address或Addr或Network Address 要连接的SQL Server实例的名字或者网络地址
Enlist ‘true’ 为真时,连接池自动列出创建线程的当前事务上下文中的连接。
Initial Catalog或Database 数据库名
Integrated Security或者Trusted_Connection ‘false’ 连接是否为信任连接。其取值为’true’, ‘false’和’sspi’(等于’true’).
Max Pool Size 100 连接池中允许的最大连接数
Min Pool Size 0 连接池中允许的最小连接数
Network Library或Net ‘dbmssocn’ 网络库用于建立与一个 SQL Server实例的连接。值包括dbnmpntw (命名管道), dbmsrpcn (多协议), dbmsadsn (Apple Talk), dbmsgnet (VIA), dbmsipcn (共享内存) 和 dbmsspxn (IPX/SPX), 和 dbmssocn (TCP/IP). 所连接的系统必须安装相应的动态链接库。如果你没有指定网络,当你使用一个局部的服务器 (例如, “.” 或者 “(local)”),将使用共享内存
Packet Size 8192 与 SQL Server的一个实例通讯的网络包字节大小
Password-或Pwd SQL Server帐户登录口令
Persist Security Info ‘false’ 设置为’false’,当连接已经打开或者一直处于打开状态时,敏感性的安全信息 (如口令)不会返回作为连接的一部分信息。
Pooling ‘true’ 为真时,从合适的连接池中取出SQLConnection对象,或者必要时创建SQLConnection对象并把它增加到合适的连接池中。
User ID SQL Server登录用户
Workstation ID the local computer name 连接到SQL Server的工作站名称
§ 注意:
使用分号分隔每个属性
如果一个名字出现多于两次,在连接串中的最后一次出现的值将被使用。
如果你通过在应用中由用户输入字段的值来构建连接串,你必须保证用户不会通过用户值里的另一个值插入到一个额外的属性来改变连接串。
Access
· ODBC
o 标准连接(Standard Security):
“Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;”
o 组(系统数据库)连接 (Workgroup):
两种方法分别为:在连接串或在打开数据集中指定用户名和口令
“Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;SystemDB=C:\mydatabase.mdw;”,”admin”, “”
或
if(pDB.Open(“Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;SystemDB=C:\mydatabase.mdw;”, “”, “DatabaseUser”, “DatabasePass”))
{DoSomething();
pDB.Close();
}
o 独占方式(Exclusive):
“Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Exclusive=1;Uid=admin;Pwd=”
· OLE DB, OleDbConnection (.NET)
o 标准连接(Standard Security):
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb;User Id=admin;Password=;”
o 组连接 (系统数据库)
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb;Jet OLEDB:System Database=system.mdw;”,”admin”, “”
o 带口令的连接:
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb;Jet OLEDB:Database Password=MyDbPassword;”,”admin”, “”
· Oracle
· ODBC
o 新版本:
“Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=Username;Pwd=asdasd;”
o 旧版本:
“Driver={Microsoft ODBC Driver for Oracle};ConnectString=OracleServer.world;Uid=myUsername;Pwd=myPassword;”
· OLE DB, OleDbConnection (.NET)
o 标准连接(Standard Security):
“Provider=msdaora;Data Source=MyOracleDB;User Id=UserName;Password=asdasd;”
这是Microsoft的格式, 下面是Oracle的格式(提供者不同)
“Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=Username;Password=asdasd;”
注意:”Data Source=” 必须根据相应的命名方法设置为Net8名称。例如对于局部命名,它是tnsnames.ora中的别名,对于Oracle命名,它是Net8网络服务名
o 信任连接(Trusted Connection):
“Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;OSAuthent=1;”
或者设置user ID为 “/”
“Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=/;Password=;”
· OracleConnection (.NET)
o 标准连接:
“Data Source=Oracle8i;Integrated Security=yes”;
这只对Oracle 8i release 3或更高版本有效
o OracleConnection声明:
C#:
using System.Data.OracleClient;
OracleConnection OracleConn = new OracleConnection();
OracleConn.ConnectionString = “my connectionstring”;
OracleConn.Open();
VB.NET:
Imports System.Data.OracleClient
Dim OracleConn As OracleConnection = New OracleConnection()
OracleConn.ConnectionString = “my connectionstring”
OracleConn.Open()
· Data Shape
o MS Data Shape:
“Provider=MSDataShape.1;Persist Security Info=False;Data Provider=MSDAORA;Data Source=orac;user id=username;password=mypw”
· MySQL
· ODBC
o 本地数据库:
“Driver={mySQL};Server=mySrvName;Option=16834;Database=mydatabase;”
Sever参数也可以使用localhost作为其值
o 远程数据库:
“Driver={mySQL};Server=data.domain.com;Port=3306;Option=131072;Stmt=;Database=my-database;Uid=username;Pwd=password;”
Option值 取值的含义
1 客户端不能处理MyODBC返回一列真实宽度的情况
2 客户端不能处理MySQL返回影响的行的真实值的情况如果设置此标志,MySQL返回’found rows’。 MySQL 3.21.14或更新版才能生效
4 在c:\myodbc.log中生成一个调试日志。这与在`AUTOEXEC.BAT’中的设置MYSQL_DEBUG=d:t:O,c::\myodbc.log相同
8 对于结果和参数不设置任何包限制
16 不使驱动器弹出问题
32 使用或去除动态游标支持。这在MyODBC 2.50中是不允许的
64 在’database.table.column’中忽略数据库名字的使用
128 强制使用ODBC管理器游标
256 去除扩展取值(fetch)的使用
512 充满char字段满长度
1024 SQLDescribeCol()函数返回完全满足条件的列名
2048 使用压缩的服务器/客户端协议
4096 告诉服务器在函数后和’(‘前忽略空格 (PowerBuilder需要)。这将产生所有函数名关键词
8192 使用命名管道连接运行在NT上的Mysqld服务器
16384 将LONGLONG列改为INTl列(有些应用不能处理LONGLONG列)
32768 从SQLTables中返回’user’作为Table_qualifier和Table_owner
66536 从客户端读参数,从`my.cnf’读ODBC群
131072 增加一些额外的安全性检查
如果你需要许多选项,你应该把以上标志相加。
· OLE DB, OleDbConnection (.NET)
o 标准连接:
“Provider=MySQLProv;Data Source=mydb;User Id=UserName;Password=asdasd;”
Data Source是MySQL数据库的名字,也可以使用server=localhost;DB=test
· MySqlConnection (.NET)
o eInfoDesigns.dbProvider:
“Data Source=server;Database=mydb;User ID=username;Password=pwd;Command Logging=false”
只适用于 eInfoDesigns dbProvider, 附加到 .NET
o MySqlConnection的声明:
C#:
using eInfoDesigns.dbProvider.MySqlClient;
MySqlConnection MySqlConn = new MySqlConnection();
MySqlConn.ConnectionString = “my connectionstring”;
MySqlConn.Open();
VB.NET:
Imports eInfoDesigns.dbProvider.MySqlClient
Dim MySqlConn As MySqlConnection = New MySqlConnection()
MySqlConn.ConnectionString = “my connectionstring”
MySqlConn.Open()
· Interbase
· ODBC, Easysoft
o 本地计算机:
“Driver={Easysoft IB6 ODBC};Server=localhost;Database=localhost:C:\mydatabase.gdb;Uid=username;Pwd=password”
o 远程计算机:
“Driver={Easysoft IB6 ODBC};Server=ComputerName;Database=ComputerName:C:\mydatabase.gdb;Uid=username;Pwd=password”
· ODBC, Intersolv
o 本地计算机:
“Driver={INTERSOLV InterBase ODBC Driver (*.gdb)};Server=localhost;Database=localhost:C:\mydatabase.gdb;Uid=username;Pwd=password”
o 远程计算机:
“Driver={INTERSOLV InterBase ODBC Driver (*.gdb)};Server=ComputerName;Database=ComputerName:C:\mydatabase.gdb;Uid=username;Pwd=password”
这个驱动器现在由 DataDirect Technologies来提供 (以前由Intersolv提供)
· OLE DB, SIBPROvider
o 标准连接:
“provider=sibprovider;location=localhost:;data source=c:\databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey”
o 指定字符集:
“provider=sibprovider;location=localhost:;data source=c:\databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey;character set=ISO8859_1″
o 指定角色:
“provider=sibprovider;location=localhost:;data source=c:\databases\gdbs\mygdb.gdb;user id=SYSDBA;password=masterkey;role=DIGITADORES”
· 需要了解更多请链接到Interbase的如下Borland开发者网络文章http://community.borland.com/article/0,1410,27152,00.html
· IBM DB2
· OLE DB, OleDbConnection (.NET) from ms
o TCP/IP:
“Provider=DB2OLEDB;Network Transport Library=TCPIP;Network Address=XXX.XXX.XXX.XXX;Initial Catalog=MyCtlg;Package Collection=MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW”
o APPC:
“Provider=DB2OLEDB;APPC Local LU Alias=MyAlias;APPC Remote LU Alias=MyRemote;Initial Catalog=MyCtlg;Package Collection=MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW”
AS400
· ODBC
” Driver={Client Access ODBC Driver (32-bit)};System=myAS400;Uid=myUsername;Pwd=myPassword”
· OLE DB, OleDbConnection (.NET)
“Provider=IBMDA400;Data source=myAS400;User Id=myUsername;Password=myPassword;”
· Sybase
· ODBC
o Sybase System 12 (或 12.5) Enterprise Open Client标准连接:
“Driver={SYBASE ASE ODBC Driver};Srvr=Aron1;Uid=username;Pwd=password”
o Sybase System 11标准连接:
“Driver={SYBASE SYSTEM 11};Srvr=Aron1;Uid=username;Pwd=password;”
o Intersolv 3.10:
“Driver={INTERSOLV 3.10 32-BIT Sybase};Srvr=Aron1;Uid=username;Pwd=password;”
o Sybase SQL Anywhere (以前为Watcom SQL ODBC driver):
“ODBC; Driver=Sybase SQL Anywhere 5.0; DefaultDir=c:\dbfolder\;Dbf=c:\mydatabase.db;Uid=username;Pwd=password;Dsn=”"”"”
注意: 对于在末尾紧跟着DSN 参数被引用的双引号(VB语法), 你必须改变符合你所使用的语言所指定的引用符号语法。DSN参数为空实际上非常重要,如果不包括的话将导致7778错误。
· OLE DB
o Adaptive Server Anywhere (ASA):
“Provider=ASAProv;Data source=myASA”
o Adaptive Server Enterprise (ASE)(带数据源为.IDS文件):
“Provider=Sybase ASE OLE DB Provider; Data source=myASE”
注意你必须使用数据管理器来创建一个数据源.IDS文件.这些.IDS 文件类似于ODBC DSNs.
Visual FoxPro(dBASE)
· ODBC
o dBASE:
” Driver={Microsoft dBASE Driver (*.dbf)}; DriverID=277;Dbq=c:\\DatabasePath”
注意在书写sql语句时必须指定文件名(如“Select Name, Address From Clients.dbf”).
o Visual Foxpro(有数据库容器):
” Driver={Microsoft Visual Foxpro Driver};UID=; SourceType=DBC;SourceDB=C:\\DatabasePath\\MyDatabase.dbc;Exclusive=No “
o Visual Foxpro(无数据库容器):
” Driver={Microsoft Visual Foxpro Driver};UID=; SourceType=DBF;SourceDB=C:\\DatabasePath\\MyDatabase.dbc;Exclusive=No”
· OLE DB, OleDbConnection (.NET)
o 标准连接:
“Provider=vfpoledb;Data Source=C:\\DatabasePath\\MyDatabase.dbc;”
Excel
· ODBC
o 标准连接(Standard Security):
” Driver={Microsoft Excel Driver (*.xls)};DriverId=790; Dbq =C:\\DatabasePath\\DBSpreadSheet.xls;DefaultDir=c:\\databasepath;”
· OLE DB Provider for Microsoft Jet
o 标准连接(Standard Security):
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DatabasePath\\DBSpreadSheet.xls;Extended Properties=\”\”Excel 8.0;HDR=Yes;\”\”;”
注意:如果”HDR=Yes”,那么提供者不会在记录集中包括选择的第一行,如果,那么提供者将在记录集中包括单元范围(或已经命名范围)的第一行
Text
· ODBC
o 标准连接(Standard Security):
” Driver={Microsoft Text Driver (*.txt; *.csv)}; Dbq=C:\\DatabasePath\\;Extensions=asc,csv,tab,txt;”
如果文本文件使用tab作为分隔符,你必须创建schema.ini文件,你必须在连接串中使用Format=TabDelimited选项。
注意:你必须在sql语句中指定文件名(例如”Select Name, Address From Clients.csv”)
· OLE DB Provider for Microsoft Jet
o 标准连接(Standard Security):
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DatabasePath\\;Extended Properties=\”\”text;”HDR=Yes;FMT=Delimited;\”\”;”
注意在书写sql语句时必须指定文件名(如“Select Name, Address From Clients.txt”).
ODBC DSN
” DSN=MyDSN;Uid=MyUsername;Pwd=MyPassword;”
OLE DB Provider for ODBC Databases
连接Access:
“Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\\DatabasePath\\MyDatabase.mdb;Uid=MyUsername;Pwd=MyPassword;”
连接SQL Server:
“Provider=MSDASQL;Driver={SQL Server};Server=MyServerName;Database=MyDatabaseName;Uid=MyUsername;Pwd=MyPassword;”
使用DSN进行连接:
“Provider=MSDASQL;PersistSecurityInfo=False;Trusted_Connection=Yes;Data Source=MyDSN;catalog=MyDatabase;”
OLE DB Provider for OLAP
“Provider=MSOLAP;Data Source=MyOLAPServerName;Initial Catalog=MyOLAPDatabaseName;”
通过http连接:
这个特征允许客户端应用程序通过在客户端应用程序连接字符串的Data Source参数中指定一个URL并使用IIS连接到一个分析服务器。这种连接方法允许PivotTable服务通过防火墙或者代理服务器连接到分析服务器。一个特殊的ASP页面Msolap.asp通过IIS进行连接。当连接到服务器时,这个文件一定在这个目录中并且作为URL的一部分(例如http://www.myserver.com/myolap/)。
使用url连接:
“Provider=MSOLAP;Data Source=http://MyOLAPServerName/;Initial Catalog=MyOLAPDatabaseName;”
使用ssl连接:
“Provider=MSOLAP;Data Source=https://MyOLAPServerName/;Initial Catalog=MyOLAPDatabaseName;”
OLE DB Provider for Active Directory
“Provider=ADSDSOObject;User Id=myUsername;Password=myPassword;”
OLE DB Provider for Index Server
“provider=msidxs;Data Source=MyCatalog;”
OLE DB Data Link Connections
“File Name=c:\\DataBasePath\\DatabaseName.udl;”
Outlook 2000 personal mail box
“Provider=Microsoft.Jet.OLEDB.4.0;Outlook 9.0;MAPILEVEL=;DATABASE=C:\\Temp\\;”
使用任何临时文件夹代替c:\temp。这将在那个文件夹创建一个模式文件,当你打开它时,它会显示可以得到的所有字段。空的mapilevel表明最高层的文件夹。
Exchange mail box
“Provider=Microsoft.Jet.OLEDB.4.0;Exchange 4.0;MAPILEVEL=Mailbox – Pat Smith|;DATABASE=C:\\Temp\\;”
使用任何临时文件夹代替c:\temp.
注意:你能象数据库一样对mail store输入查询
举例:”SQL “SELECT Contacts.* FROM Contacts;”
翻译 CptFan
这篇文章中的信息适用于:
Microsoft Windows NT Server 3.1
Microsoft Windows NT Workstation 3.1
Microsoft Windows NT Advanced Server
Microsoft Windows NT Workstation
Microsoft Windows NT Server
小结
这篇文章阐述了 FAT,HPFS 和 Windows NT 下的 NTFS 区别,包括它们的优点和不足。它可分成下面几个部分:
FAT 概述
HPFS 概述
NTFS 概述
注意:HPFS 只在Windows NT versions 3.1, 3.5 和 3.51 中被支持。Windows NT 4.0 并不支持且不能访问 HPFS 分区。同样,FAT32 文件系统只是被 Windows 95/98 和 Windows 2000(现在包括了XP) 支持。
更多信息
(译者注:本文中所指的 FAT 是 FAT16 而不是 FAT32)
FAT 概述
FAT 是目前为止被 Windows NT 支持的最简单的文件系统。FAT 文件系统被称作 file allocation table(FAT),事实上它确实是位于卷(分区)最顶部的一个表格。为了保护卷,保存有两份 FAT 以防万一其中一个被损坏。此外,FAT 表和根目录必须保存在一个固定的区域来使系统的引导文件能正确地定位。
一个用 FAT 格式化的磁盘是分配在簇内的,它的大小决定于卷的大小。当一个文件被创建后,一个在目录中的入口就被创建了此外第一个包含数据的簇的号码也被确认了。这个在 FAT 表中的入口要么表示这是文件的最后一个簇,要么指向下一个簇。
更新 FAT 表和时间消耗一样是十分重要的。如果 FAT 表不是经常被更新的话,会导致数据丢失。有时间消耗是因为每次 FAT 表更新磁盘读写磁头必须重新定位到磁盘的逻辑 0 磁道。
FAT 目录结构是没有组织的,文件被保存到磁盘上的第一块空区域。此外,FAT 只支持 只读,隐藏,系统和文件存档属性。
FAT 命名规定
FAT 使用传统的 8.3 命名规则而且所有的文件名必须用 ASCII 字符集来创建。文件或目录的名字最多可以有八个字符常,然后是一个点(.) 分隔符,最后是一个最多可以有三个字符的扩展名。文件名必须以一个字符或者数字或者除了下列字符以外的任何字符开头:
. ” / \ [ ] : ; | = ,
如果其中的任何一个字符被使用了,可能会发生意想不到的结果。名字中不能包含任何空格。
下面的名字是保留的:
CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN, NUL
所有的字符都是大写的。
FAT 的优点
在所有被 Windows NT 支持的文件系统中要执行恢复操作是可能的。恢复工具尝试着直接读取硬件,而这样在 Windows NT 下是不行的。然而,如果文件存在于一个 FAT 分区,而且系统重启到了 MS-DOS 下,文件就可以恢复。 FAT 文件系统对于大约 200M 大小的驱动器或分区来说是最好的,因为 FAT 开始时的开销非常小。要获得更多关于 FAT 优点的讨论,请查阅下列资料:
微软 Windows NT Server “概念与计划指南(Concepts and Planning Guide)”第五章,标题是“选择文件系统(Choosing a File System)”的部分。
微软 Windows NT Workstation 4.0 资源包,第十八章,“选择文件系统(Choosing a File System)”。
微软 Windows NT Server 4.0 资源包 “资源指南(Resource Guide)”,第三章,标题是“哪个文件系统应该用在哪个卷上(Which File System to Use on Which Volumes)”的部分。
FAT 的缺点
更可取地,当使用地驱动器或分区大于 200 MB 时,FAT 文件系统就不应该被使用了。这是因为随着卷的容量增加, FAT 分区的性能迅速地下降。要对在 FAT 分区中的文件设置权限是不可能的。
FAT 分区 的容量在 Windows NT 下被限制 4G 以下,而在 MS-DOS 下则是 2G。要获得更多有关这个限制的信息,请查阅在微软知识库(Microsoft Knowledge Base)中的下列文章:
文章代号:Q118335
标题: MS-DOS 下分区的最大容量(Maximum Partition Size in MS-DOS)
要获得根多有关 FAT 缺点的讨论,请查阅下列资料:
微软 Windows NT Server “概念与计划指南(Concepts and Planning Guide)”第五章,标题是“选择文件系统(Choosing a File System)”的部分。
微软 Windows NT Workstation 4.0 资源包,第十八章,“选择文件系统(Choosing a File System)”。
微软 Windows NT Server 4.0 资源包 “资源指南(Resource Guide)”,第三章,标题是“哪个文件系统应该用在哪个卷上(Which File System to Use on Which Volumes)”的部分。
HPFS 概述
HPFS 文件系统第一次是随着 OS/2 1.2 被介绍的,为了获得对那时市场上出现的更大的硬盘更好的读取。此外,还有必要使用一个新的文件系统来为迅速增长的网络服务市场需求扩展命名系统,组织性和安全性。HPFS 保持了 FAT 的目录结构,但是增加了基于文件名的自动目录索引。文件名也被扩展到了 254 个双字符。 HPFS 同时也允许一个文件由“数据”和特殊的属性组成,为了在支持其它命名规则和安全性方面增加灵活性。此外,分配单位也从簇改成物理扇区(512 字节),这样做可以减少磁盘浪费。
在 HPFS 下,目录表比在 FAT 下的保存更多信息。属性文件也一样,它包含了关于修改,创建还有存取时间和日期。HPFS 下的目录入口指向 FNODE 而不是文件的第一个簇。 FNODE 可以包含文件的数据,或者包含指针,它的指向文件数据或其他最终指向文件数据的其它结构。
HPFS 会尽可能把一个文件分配在连续的扇区中。这样做是为了增加在顺序处理一个文件时的速度。
HPFS 把磁盘组织成一系列 8MB 大小的块,只要有可能一个文件就被包含在其中的一个块中。在那些块间隔的地方是 2K 大小的分配图,用它来表示块中的哪些扇区已经被分配了。分块增强了性能,因为磁头不用返回到磁盘的逻辑顶部(通常是 0 柱面),但是还是要到最近的块分配图来读取文件存放在哪里。
此外,HPFS 还包括两个唯一的特殊数据体:
超级块(Super Block)
超级块位于逻辑 16 扇区,并且包含一个指向根目录 FNODE 的指针。使用 HPFS 最大的危险之一是万一超级块丢失或由于一个坏扇区而损坏,对于分区中的内容也是一样,既使磁盘的其余部分是好的。如果把一切都拷贝到另外一个第 16 个扇区是好的磁盘上,然后重建超级块,这样是有可能恢复数据的,但这会是一个十分复杂的任务。
备用块 (Spare Block)
备用块位于逻辑 17 扇区,包括一个含有“热修复(hot fixes)”和备用目录块的表格。在 HPFS 下,当一个坏扇区被检测到时,“热修复”表目就用来逻辑地指向一个现存的好扇区来代替该坏扇区。这项用来处理写错误的技术被叫做热修复。
热修复是一项针对由于坏扇区而引起的错误的修复技术,文件系统会把坏扇区中的内容移到另一个扇区中并且把原扇区标记成坏的。这一切对于任何正在执行磁盘输入输出(I/O)的程序来说是透明的(即:应用程序从不知道硬盘有问题)。使用支持热修复的文件系统在遇到一个坏扇区的时候不会产生错误信息,就象那种在 FAT 中的“Abort, Retry, or Fail?”。
注意:Windows NT 中包含的 HPFS 版本是不支持热修复的。
HPFS 的优点
HPFS 对于 200-400MB 大小的驱动器是最好的。要获得更多有关 HPFS 优点的讨论,请查阅下列资料:
微软 Windows NT Server “概念与计划指南(Concepts and Planning Guide)”第五章,标题是“选择文件系统(Choosing a File System)”的部分。
微软 Windows NT Workstation 4.0 资源包,第十八章,“选择文件系统(Choosing a File System)”。
微软 Windows NT Server 4.0 资源包 “资源指南(Resource Guide)”,第三章,标题是“哪个文件系统应该用在哪个卷上(Which File System to Use on Which Volumes)”的部分。
HPFS 的缺点
由于 HPFS 中包含的开销,对小于 200MB 的卷不是一个很有效率的选择。此外,对于大于 400MB 的卷,就会有一些性能上的退化。你不可以在 Windows NT 下的 HPFS 中设置安全性。
HPFS 只是被 Windows NT versions 3.1, 3.5, 和 3.51 支持。Windows NT 4.0 不能存取 HPFS 文件系统。
要获得更多有关 HPFS 缺点的讨论,请查阅下列资料:
微软 Windows NT Server “概念与计划指南(Concepts and Planning Guide)”第五章,标题是“选择文件系统(Choosing a File System)”的部分。
微软 Windows NT Workstation 4.0 资源包,第十八章,“选择文件系统(Choosing a File System)”。
微软 Windows NT Server 4.0 资源包 “资源指南(Resource Guide)”,第三章,标题是“哪个文件系统应该用在哪个卷上(Which File System to Use on Which Volumes)”的部分。
NTFS 概述
从用户的角度来说,NTFS 仍旧把文件组织到经过索引的目录中,就像在 HPFS 中一样。然而,跟 FAT 和 HPFS 不同的是,磁盘上没有“特殊”的数据体而且不再依靠基本的硬件特性了,比如 512 字节的扇区。此外,磁盘上没有任何特定的位置,比如 FAT 表和 HPFS 的超级块。
NTFS 的目的是提供下列特性:
可靠性,这对于高级终端系统和文件服务器是非常重要的
一个增加了功能性的平台
支持 POSIX 需求
除去 FAT 和 HPFS 文件系统的限制
可靠性
为了保证 NTFS 可靠性,三个主要方面被涉及到:恢复能力,排除严重的单个扇区失效和热修复。
NTFS 是一个可恢复的文件系统,因为它会跟踪文件系统下的变化。当 CHKDSK 在检查 FAT 或 NTFS 时,目录内指针的一致性,分配和文件表都要检查。在 NTFS 下,这些要素的变化都被保存在日志中,所以 CHKDSK 只要把变化卷回到最近的一个记录点就可以恢复文件系统中的一致性。
在 FAT 或 HPFS 下,只要位于文件系统的特殊体中的一个扇区失效,简单扇区失效(single sector failure)就会发生。 NTFS 在两方面阻止这种情况的发生:第一,不在磁盘上使用特殊数据体且跟踪并保护磁盘上的所有对象。第二,在 NTFS 下,会保存有多份(数量是由卷的大小决定的)主文件表。
跟 OS/2 中的 HPFS 版本一样, NTFS 支持热修复。
增加了的功能性
Windows NT 的主要设计目标之一是在每一层都提供一个可增加和发展的平台, NTFS 也不例外。NTFS 提供了一个可以被其它文件系统使用的既丰富又可伸缩的平台。此外, NTFS 完全支持 Windows NT 的安全模型而且还支持多文件流。一个数据文件已经不再只是一个数据流了。最后,在 NTFS 下,一个用户可以对一个文件增加他(或她)自己的用户定义(user-defined)的属性。
POSIX 支持
NTFS 是 POSIX.1 在它所支持的文件系统中最应当使用的,应为它支持下列 POSIX.1 要求:
区分大小写的命名:
在 POSIX 下,README.TXT, Readme.txt, and readme.txt 都是不同的文件。
补充的时间戳:
补充了的时间戳支持文件最后存取的时间。
硬链接(Hard Links):
硬链接是当两个文件名不同时,它们可以位于不同的文件夹下面,却指向相同的数据。
消除限制
首先,大大增加了文件和卷的容量,因此它们现在最大可以达到 2^64 字节(16 exa字节或 18,446,744,073,709,551,616字节)。NTFS 同时也回到了 FAT 中的簇概念为了防止 HPFS 中由于固定的扇区容量引起的问题。这是可以做到的,因为Windows NT 是一个可移植操作系统而且不同的磁盘技术可能会在某种情况下遇到。因此,每个扇区 512 字节被认为很可能不是一个很适合的分配。这是靠把簇定义成硬件的本身的分配大小的几倍来实现的。最后,在 NTFS 中所有的文件名都是基于 Unicode 的,8.3文件名同长文件名一起被保留下来了。
NTFS 的优点
NTFS 对于大于等于 400MB 左右的卷是来说最好的应用。因为在 NTFS 下性能不会下降,而在拥有更大容量的 FAT 下却是如此。
在 NTFS 中设计的可恢复性可以使用户不在 NTFS 分区中使用任何磁盘修复工具。要获得更多有关 NTFS 优点的资料,请查阅下列资料:
微软 Windows NT Server “概念与计划指南(Concepts and Planning Guide)”第五章,标题是“选择文件系统(Choosing a File System)”的部分。
微软 Windows NT Workstation 4.0 资源包,第十八章,“选择文件系统(Choosing a File System)”。
微软 Windows NT Server 4.0 资源包 “资源指南(Resource Guide)”,第三章,标题是“哪个文件系统应该用在哪个卷上(Which File System to Use on Which Volumes)”的部分。
NTFS 的缺点
考虑到 NTFS 对磁盘空间开销的大小,所以不推荐在大约 400MB 以下的卷上使用 NTFS。这些磁盘空间开销是 NTFS 的系统文件,通常对于一个 100MB 的分区来说至少使用 4MB 的空间。
目前,还没有内建于 NTFS 中的加密(译者注:事实上现在 Windows 2000 中包含的 NTFS 5.0已经支持加密了)。因此,一些人就可以在 MS-DOS 下或其它的操作系统下启动,使用一个底层的磁盘编辑工具来查看在 NTFS 卷中存储的数据。
把一张软盘格式化成 NTFS 文件系统是可能哦;Windows NT 把所有的软盘用 FAT 文件系统格式化是因为 NTFS 中的开销使的它不适合用在软盘上。
要获得更多有关 NTFS 缺点的资料,请查阅下列资料:
微软 Windows NT Server “概念与计划指南(Concepts and Planning Guide)”第五章,标题是“选择文件系统(Choosing a File System)”的部分。
微软 Windows NT Workstation 4.0 资源包,第十八章,“选择文件系统(Choosing a File System)”。
微软 Windows NT Server 4.0 资源包 “资源指南(Resource Guide)”,第三章,标题是“哪个文件系统应该用在哪个卷上(Which File System to Use on Which Volumes)”的部分。
NTFS 命名规定
文件和目录名最多可以达到255 个字符,包括任何扩展名。名字会保留大小写,但不区分大小写。NTFS 并不基于于大小写区分文件名。文件名可以包括除了下列字符以外的任何字符:
? ” / \ < > * | :
目前,从命令行,你只能创建最多只有 253 个字符的文件名。
注意:基本的硬件限制可能会引起在任何文件系统中附加的分区容量限制。特别的,一个启动分区的容量(最大)只能是7.8G,而且在分区表里面有 2TB(terabyte) 的限制。
要获得更多有关Windows NT 所支持的信息,请查阅 Windows NT 资源包。