Windows 2000 Resource Kit 工具使用说明

Windows 2000 Resource Kit 工具使用说明 - 操作系统 - 电脑教程网

Windows 2000 Resource Kit 工具使用说明

日期:2006-11-21   荐:
Resource Kit 实际上是 Microsoft 为管理员提供的一套额外的工具集,包括了超过400个各种工具,vbs,dll,msc,涵盖了管理TCP/IP,网络,注册表,安全,远程管理,配置,Batch文件,以及操作系统的其他方面。可以让你更容易的管理一个NT系统。不得不承认这是一个非常庞大的工具集,包括到了已经被人们所遗忘2K所应该具有的功能。当你了解到了里面一些工具的性能以后,你将会知道即使仅仅只是一个C2级的操作系统也具有相当的安全性,对于细心配置的系统,攻击也只能伤其表面。但是,但是任何东西都有他的两面性,ResKit就非常具有代表性,在Hacker群体中大家习惯把这个玩意叫做“Hacker的工具箱”。当然如果你想当一个Hacker你得掌握里面的东西,而想当一个好的administrator你也得掌握里面的东西。

这个介绍的内容将会尽量多的写,但是个人能力有限,有什么问题大家赶快提出来进行改正和充实。

第一部分:管理你的计算机

1. Appsec.exe (Application Security)

Appsec.exe是一个基于GUI的应用程序,它允许管理员在一个多用户环境下限制普通用户访问一组网络上经预订的应用程序。启用这种应用程序安全性,将会导致系统拒绝普通用户执行或使用一个未经许可的应用程序。大家看这是不是一个很有用的工具呢?对某些特定的程序进行限制以后,可以减少一些Hacker入侵的可能,下面我们继续讨论

对于2000来说一个显著的特点就是引入了GPO(Group Policy)这种东西,实际上就是一个界面化了的注册表编辑器,但是因为GPO的存在2000大大提高了他的安全性。一般来说,我们可以通过配置GPO从启动菜单和桌面上隐藏一个应用程序,但是不能禁止用户用其它手段访问它,Appsec增加了这种安全性,可以禁止用户执行应用程序甚至是从命令行模式或者使用其他的应用程序。Microsoft的建议是和GPO一起使用,放在Terminal Server上运行或者说是在应用程序运行的机器上使用。

Appsec对于应用程序的限制还算严格,除了应用程序的名称以外还要包括该应用程序的全路径,只有二者都附和才能够运行。

下面提几点注意:

a. 只有管理员或管理员组的成员可以运行所有程序,用户(包括PowerUser组)只能运行列表中的应用程序。

b. Appsec第一次启用时,Terminal Server的会话必须中断,否则Appsec将不能在本次会话中启用。

c. 实际上Appsec只能限制调用CreateProcess方法的应用程序,不能限制使用NTCreateProcess方法的程序,但是这种程序非常的少见。

d. Appsec只能限制32位的程序,但是在默认情况下,一旦启用appsec任何对16位程序的访问都是禁止的,但是可以添加ntvdm.exe来使16位程序可以被访问。

e. 我想这个也是Appsec最大的缺点,Appsec并不对程序本身进行检查,也就是所如果将该有效程序进行替换的话,Appsec不会发现。所以说我们必须禁止用户替换和重命名应用程序,这可以用Security Template来做

f. 还有Appsec只可限制可执行文件,不可以是DLLs。

g. Appsec的使用是对于计算机的,也就是说一经启用使用本机的用户都要受到限制。

另外,应该要提到的一点是,按照Microsoft的要求,Appsec的列表中至少应该有:

\Wtsrv\explorer.exe
\Wtsrv\system32\cmd.exe
\Wtsrv\system32\net.exe
\Wtsrv\system32\regini.exe
\Wtsrv\system32\subst.exe
\Wtsrv\system32\systray.exe
\Wtsrv\system32\xcopy.exe

这么几项。

当然啦!你去掉也是可以的,但是会造成用户难以正常使用。嗯,以我个人的建议,如果你想防止Hacker入侵去掉net.exe会有意想不到的收获,呵呵!cmd.exe也是不错的选择,如果不想管理员以外的任何人访问就统统去掉就好,后果你们试试就知道了。

p.s. 这个程序所需要的文件Appsec.exe(这个倒是在),Appsec.hlp(这个也在),但是Appsec.dll,

psec.cnt,Instappsec.exe并没有包括在Resource Kit里面,要去网站上自己下载!!这简直是搞笑嘛!也

只有Microsoft干得出来。你可以在这个地方下载这个 hotfix: http://download.microsoft.com/download/win2000 ... 0/NT5/EN-US/appsec_hotfix.exe,安装以后就可以用了。

启用以后,换个用户(不是管理员组)登陆本机随便点个应用程序,你就可以看到Access to specified device, path or file is denied的警告,很厉害的,哈哈!

2. Cachemov.exe (Offline Files Cache Mover)

Cachemov.exe一个有趣的东东,用来移动离线文件的缓存(默认保存在根卷下),如果你觉得那东西在那个地方碍的你事的话,把它挪个地方也没有什么问题。这个工具比较简单就不再多说什么了,就一个GUI,然后选择一个卷,它就自动帮你做完了,很简单。你也可以使用无人值守模式 cachemov -unattend x:\ 电脑自己搞定,此时需要(Cchmvmsg.dll)。所有的结果会保存至应用程序日志。

只是注意一下,运行时需要管理员的身份,还有就是不能够移动到网络驱动器和可移动驱动器上去。移动以后不要改letter,不然你会有麻烦的!

3. Defptr.exe (Default Printer)

如果你闲着没有事的话,可以用用这个东西。它允许你随意改变你的默认打印机,可以在可用的网络和本地打印机间交换,一旦运行以后会在右下角有个小图标(如果不想看到图标可以使用defptr -i), 这个东西可能对漫游用户会有一点好处吧!

4. Delprof.exe(User Profile Deletion Utility)

删除用户的Profile时用的工具,本来这个是可以在System Properties里面做的。而这个工具可以在本地或是远程运行,看起来的好处就是可以指定多长时间不使用就删除,在处理比较多的用户的时候才显得出好处来,就那么个把的话,就自己做好了。稍微介绍一下语法好了。

delprof /q /i /p /c:\\computername /days /?

/q 后台悄悄执行,不用确认。
/i 忽略错误继续删除。
/p 在删除前提示确认。
/c:\\computername 这个不用解释了吧?
/days 指定多少天不使用的Profile就删除,days用整数。
/? 出现上面这些东东。

5. DelSrv.exe (Delete Service)

一个拿来删除服务用的工具,使用起来非常简单,只要delsrv servicename就可以了。没有什么好说的。

6. Dureg.exe (Registry Size Estimator)

这是一个用来评估你的注册表储存了多少数据的工具,可以从任何一个hive,subtree和subkey中读出。另外,这个工具还可以用来搜索注册表中的text字符串,这种搜索还可以具体到某个subtree中。这个工具主要用于得出注册表具体占用空间,对于开发人员和管理员来说都是一个非常有用的工具。虽然我们可以使用控制面板中的System选项和系统监视器中的Registry Quota in Use来监视注册表,但是如果你只想知道某个单独的Key或者是Subkey所占用的空间,上面这些工具就无能为力了。

语法:

dureg /cr /cu /u /lm /a /s│/d “registry_path“ “string to search“

/a 表示查找整个注册表的大小。

dureg /a
Size of HKEY_CLASSES_ROOT : 7740324
Size of HKEY_USERS : 995732
Size of HKEY_LOCAL_MACHINE : 17265663

Total Registry data size: 26001719

/cr “registry_path“
默认情况下,返回的是HKEY_CLASSES_ROOT的大小。

/cu “registry_path“
默认情况下,返回的是HKEY_CURRENT_USER的大小。

/lm “registry_path“
默认情况下,返回的是HKEY_LOCAL_MACHINE的大小。

/u “registry_path“
默认情况下,返回的是HKEY_USERS的大小。

以上四个选项都可以在 “registry_path“中填入该Subkey下的任意key。比如:
dureg /lm “software\microsoft“,查找HKEY_LOCAL_MACHINE\Software\Microsoft key的大小。

/s “string“
在注册表中搜索该字符串。比如:
dureg /s “run“ 寻找和run相关的字符串。当然你也可以和/cr等这几个参数一起使用,比如:dureg /cr /s “run“。
会看到一大串显示,这里就不写出来了。

7. Elogdmp.exe (Event Log Query Tool)

一个命令行工具用来导出选定的日志中的信息。这是在屏幕上进行显示,最好和Find或者是Findstr这样的工具

一起使用,不然太难找到了。

语法:

elogdmp -? computername eventlogtype

eventlogtype有Application, Security,System三种。

比如: elogdmp hello application

这个工具可以远程使用,但是需要域管理员组或者是本地管理员组的成员才可以使用。

8. Instsrv.exe (Service Installer)

嗯,Instsrv.exe一个命令行工具可以用来安装或者是删除可执行服务(.exe),当然也可以给它们分配名字的。

语法:

instsrv Servicename pathtoexecuteable -a accountname -p accountpassword or Servicename

remove

ServiceName
用来显示的名字,比如Alerter。

PathToExecuteable
要安装服务文件的全路径,包括盘符在内。

-a accountname
指定服务运行的帐户。

-p accountpassword
帐户的密码。

servicename remove
指定你想移出的服务。

比如:你想安装一个bbb.exe作为一个bbb的服务。
instsrv bbb “c:\program files\bbb.exe“
默认情况下,我们安装的服务是没有启动的,需要启动。而有些时候需要插入相应的注册表项。

如果想指定这个服务在某个用户下运行:
instsrv bbb “c:\program files\bbb.exe -a hello\bbb -p xxx“

that’s OK!

如果要卸在的话: instsrv bbb Remove,注意删除之前要先Stop。

这里我们再提到一个工具Srvinstw.exe,这是一个GUI模式的工具,所以用起来非常的简单,照着提示一步步做就可以了。它和Instsrv.exe的区别是这个东东可以在远程计算机上安装服务。它们都需要administrator 的特权,请记住。

9. intfiltr.exe (Interrupt Filter)

这是一个在多CPU环境下用来调整CPU之间中断关系的工具,可以用来测试最优化的方案。我没有2个这种东西,这个程序就没有进行测试了!那个有的话,帮我试试,告诉我结果。我把它补全。

10. Inuse.exe (File-In-Use Replace Utility)

一个命令行工具可以用来替换被锁定的操作系统文件,比如一些重要的DLL文件。这些文件会在下一次启动的时候被替换,根据微软的说法,这种替换会在下一次启动的Autochk完成之后,创建Paging Files之前。基本上来说,这个一个调试用的工具。该程序需要管理员身份运行。

语法:

insuse -? source destinaion /y

source
你想用来替换的文件。可以使用完整的物理路径或者是UNC路径。

destination
你要替换的文件。

/y
表示确定。

如果你想用一个远程文件来替换一个本地存在的文件可以使用下面的方法。
inuse \\hello\winnt\abc.dll c:\winnt\abc.dll /y

11. Javareg.exe (Java/COM Registration Utility)

命令行工具可以用来注册Java classes,鄙人不懂Java这种高深的东西,连什么是classes都不知道,没有办

法了,这一块就只好%¥&………了,不好意思。有懂的人帮一下忙好了,呵呵!!

12. Netsvc.exe (Command-line Service Controller)

一个命令行工具,用来控制服务,和SC比较类似,但是在功能上要比后者少很多!用这个工具基本上可以进行远程启动,停止,暂停,继续服务或者查询一个服务的状态。基本上只要你是一个普通用户就可以执行这个命令,当然如果要启动和停止的话,就需要相应的权限了。

当然和SC相比Netsvc有很大的局限性,所以在这里我多说一点和服务有关的东西。
在Win2k虽然你可以对各种服务进行查询,但是并不是所有的服务都可以直接关闭,比如Workstation这个服务,但奇怪的是Workstation这个服务有些时候会莫名其妙的丢失,至今我还不知道原因,一旦丢失以后基本上就需要重装了。我们继续话题,当一个用户有许多活动的连接存在的时候,你只可以查询或者是暂停该服务,而不能远程强迫服务停止。而如果有服务依靠别的服务才能运行的时候,我们也不能直接停止该服务。举一个简单的例子,Clipbook服务需要Network DDE服务才能运行,我们必须先停止CilpBook才能停止Network DDE。

这里还要提到另外一种状况,就是当你停止一个不可以停止的服务的时候Netsvc会报告Service is running,而该服务不能停止的原因有很多种,但是Netsvc并不会报告给你,太惨了!!此外,当一个服务不能被暂停的时候,这个鬼东西仍然会报告给你说Service is running,唉!所以说最好使用SC。

语法:

netsvc command servicename \\computername /?│/help

command可以是以下几个命令:
/list
列出已经安装的服务,这个时候不使用servicename。

/query
查询一个服务的状态。

/start, /stop, /stop, /continue
这几个命令就不用解释了吧?字面意义都已经很清楚了。

最后举两个例子吧!如:
netsvc /list \\hello

netsvc /query \\hello “Alerter“

netsvc Alerter \\hello /pause

更进一步具体的内容可以在SC那里看到,这里不再多说。

13. Now.exe

Reskit里面比较无聊的命令之一,可以在STDOUT(Standard output)上输出一个带时间戳的东东。有点像

ECHO命令。举例说明算了:

当我们打入ECHO bbb的时候,屏幕会显示bbb
C:\〉echo bbb
bbb

但是当我们用Now bbb的时候,会输出:
C:\〉now bbb

Sat Feb 16 22:31:34 2002 -- bbb

这种东西,不知道有什么用,呵呵!

14. Pathman.exe

一个命令行工具可以修改系统路径和用户路径,当然这个工具还可以用来检查路径中的错误,有多余的头部分号,尾部分号,多个连接得分号,重复的添加和删除,增加重复的路径或是移出一个不存在的路径等等,但是不检查路径的有效性。2K保留了两套路径,一个是统一的全局系统路径,另一组是每个用户个别的用户路径,当然为了保证兼容性,2000仍然保留了从Autoexec.bat装入路径。每个用户可以修改自己的用户路径,而只有管理员可以修改系统路径,为了方便操作,微软就搞出了这个Pathman。

语法:

pathman /as /au /rs /ru path

/as
增加分号隔开的系统路径。

/au
增加分号隔开的用户路径。

/rs
删除分号隔开的系统路径。

/ru
删除分号隔开的用户路径。

当修改完成以后,Pathman会广播信息给所有的顶端窗口提醒它们环境被改变了,这将会导致应用程序升级它们的环境,获得经修改的路径。

举例说明:

添加c:\temp;C:\users\name;d:\utils为用户路径,当然,只是在它们不存在的时侯才添加。这个结果你可

以在System properties的Environment Variable中看到。上面一栏是user的变量,下面是系统变量。

实际上这个工具也有个好处就是添加和删除可以同时操作,你可以:
pathman /au C:\users\name /ru c:\users\name 呵呵!不过没有什么意思!

15. Ptree.exe(Process Tree)

该程序可以允许你在本地或者是远程查询进程树,同样也可以Kill它们。2000默认情况下,允许Local Administrators, Power Users, Users查询这些树,但是只有Local Administrators和Power Users可以Kill进程。

就这个工具而言,它有这么几部分组成ptreedrv.sys(kernel-mode驱动程序),ptreesvc.exe和ptreesvcps.dll(2000的服务的程序,就是所ptree是需要在该计算机上安装一个服务),Ptreesvr.dll(COM 服务端),ptree.exe(控制台客户端),Ptreeg.exe(GUI客户端,推荐使用这个,在 DOS底下看到的东西太少,也不好看,还是GUI爽!而且还可以同时管理多台计算,不错吧!我是挺喜欢的,比Ctrl Alt Del出来的那个东西要好得多!)

这个程序并没有和Reskit一起安装,而实在Reskit的目录下生成一个名为Ptree的目录,底下有个ptree.msi
,要点击安装。同时由于这是一个基于COM 的程序,而安装ptreeCOM的时侯,需要MSDTC服务,注意不要把它关了,不然会导致ptree不能正常运行,而且只会提示不能找到服务,后来是查了错误日志才发现的,微软坑人!。我就因为这个弄了好一阵子,呵呵!

使用嘛,很简单,GUI就不用说了,都有提示,说一下命令行模式吧!

ptree -c computer -k│-kt process -?│/?

-c computer
当要管理的是远程主机的时侯才需要用的这个参数,如果是本机就不要啦,直接ptree就可以了。

-k process
干掉后面指定的进程。
这里的process可以是进程的名字也可以是PID。
-kt process
可以干掉整整一棵树。

举例: ptree -c hello 然后出来一大串东西,自己看吧!

16. pulist.exe

命令行工具,和上面那个东西有点类似,和Tlist也有一点像(这东西在Support Tools里面)但是

pulist.exe多一点点好处,可以显示出进程和用户之间的关系。比如:

C:\〉pulist

Process PID User
Idle 0
System 8
smss.exe 156 NT AUTHORITY\SYSTEM
csrss.exe 176 NT AUTHORITY\SYSTEM
winlogon.exe 172 NT AUTHORITY\SYSTEM
services.exe 228 NT AUTHORITY\SYSTEM
lsass.exe 240 NT AUTHORITY\SYSTEM
svchost.exe 428 NT AUTHORITY\SYSTEM
spoolsv.exe 452 NT AUTHORITY\SYSTEM
msdtc.exe 480 NT AUTHORITY\SYSTEM
tcpsvcs.exe 604 NT AUTHORITY\SYSTEM
svchost.exe 620 NT AUTHORITY\SYSTEM
llssrv.exe 644 NT AUTHORITY\SYSTEM
nspmon.exe 712 USER1-COMPUTER1\NetShowServices
nscm.exe 724 USER1-COMPUTER1\NetShowServices

当你的计算机有多个处理器时,需要判断安全上下关系的时侯这个工具的用处就体现出来了!如果是远程操作的时候就多加一个pulist \\server就可以了。而且可以顺序显示多个站点pulist \\server \\server………, 但是这个时侯会不显示User。

当你需要专门查找一个已知的进程的时候,可以用这样的方法来简化查找:
pulist │ find “string“ 比如,过去老的pwdump2需要知道LSASS的PID,我们可以这样做:

c:\〉pulist │ find “LSASS“
LSASS.EXE 252 NT AUTHORITY\SYSTEM
然后使用252来运行pwdump2………

17. Reducer.exe (Reduce Trace Data)

这个东西是一个命令行的事件追踪工具,可以用来处理Tracelog(后面会提到这个工具)产生的记录,形成每个线程,每个进程的工作量记录。实际上呢,Reducer就是一个用来进一步分析工具,比如TraceDump(后面提到)可以允许你对一个追踪日志进行摘要,而Reducer则允许你进行拆分获得更多的细节,诸如: 事务统计表:响应时间,每秒的事务数,每个事务的磁盘读写,每个事务的网络流量,CPU的使用(包括核心和用户空间)。映象统计表:事务有关的每个进程,每个进程相关的线程,每个进程的CPU使用(包括kernel和user),每个进程的磁盘读写,每个进程的网络流量。磁盘信息:总的磁盘读写,每个进程的磁盘读写。
OK,接下来介绍一下语法。

语法非常简单:

reducer -out filename -h│-help│-?

-out filename
输出的文件的名字,默认是Workload.txt

举例:这里我已经事先使用Tracelog生成了一个logfile.etl,然后,
reducer -out my_workload.txt c:\logfile.etl就行了。
----------------------------------------------------------------------
│ WINDOWS 2000 Capacity Planning Trace

│ Version : 2128

│ Type : Default

----------------------------------------------------------------------

│ Build : 2195

│ Processors: 1

│ Start Time: 17 Feb 2002 23:14:17.430
│______________________________________________________________________│
│ End Time : 17 Feb 2002 23:14:38.550

│ Duration : 21 Sec


│ Trace Name: NT Kernel Logger

│ File Name : C:\LogFile.Etl

│ Start Time: 17 Feb 2002 23:14:17.430
│______________________________________________________________________│
│ End Time : 17 Feb 2002 23:14:38.550

│ Duration : 21 Sec


----------------------------------------------------------------------
│ Transaction Statistics

----------------------------------------------------------------------
│ Transaction Sort Trans Response Transaction Disk/Trans
Tcp/Trans │
│ Key Time(ms) Rate/sec Reads
Writes Sends Recieves │
----------------------------------------------------------------------
----------------------------------------------------------------------


样式大概会是这样的。

18. Regback.exe (Registry Backup)

一个注册表备份用工具,允许你在系统运行期间对注册表进行备份。我想当你需要测试一个软件时,最好先备份一下注册表。在使用这个程序时,至少需要备份文件和文件夹的权限。Regback.exe在运行的时侯需要调用Replacekey函数。

语法:

regback destination_dir filename hivetype hivename more│/?

destination_dir
备份文件的位置

filename
要创立的文件

hivetype
machine或者是users

hivename
HKLM或者HKLU

这里提几点注意:

Regback可以备份整个注册表hive(你可以理解为一个file,比如HKEY_USERS\Default在硬盘上实际上就是%SYSTEMROOT%\SYSTEM32\CONFIG\DEFAULT\DEFAULT.LOG)还包括了ACLs(Access control lists),所以你也可以用这个东东发现和以前不同的ACLs。Regback不能自动备份Config文件夹以外的文件,你要手动进行,这是为了避免名字冲突。如果当前注册表并没 有打开的hive需要自己用Xcopy.exe或者是Scopy.exe拷贝。另外,没有装入的Hive也要自己弄。如果出错的话,Regback会在第一次的时候就停止工作。它也不能覆盖存在的文件,会报错。还有如果空间不合适的话,备份就不能进行,所以最好先备份到硬盘上,然后再拷贝到磁盘上保存。举两个例子吧!

备份全部活动的Hives

C:\〉regback c:\backup
saving SECURITY to c:\backup\SECURITY
saving SOFTWARE to c:\backup\software
saving SYSTEM to c:\backup\system
saving .DEFAULT to c:\backup\default
saving SAM to c:\backup\SAM

***Hive = ’\REGISTRY\USER’\’S-1-5-21-1177238915-1383384898-1957994488-500’
Stored in file ’\Device\HarddiskVolume1\Documents and Settings\Administrator’\’N
TUSER.DAT’
Must be backed up manually
regback users S-1-5-21-1177238915-1383384898-1957994488-50
0


***Hive = ’\REGISTRY\USER’\’S-1-5-21-1177238915-1383384898-1957994488-500_Classe
s’
Stored in file ’\Device\HarddiskVolume1\Documents and Settings\Administrator\Loc
al Settings\Application Data\Microsoft\Windows’\’UsrClass.dat’
Must be backed up manually
regback users S-1-5-21-1177238915-1383384898-1957994488-50
0_Classes

你看,连SAM都可以备份,对于破解SAM,也是有非常大的用处的。

下面是备份指定的User的Profile
C:\〉regback c:\backup\administrator.bku users s-1-5-21-1177238915-1383384898-195
7994488-500
saving s-1-5-21-1177238915-1383384898-1957994488-500 to c:\backup\administrator.
bku这里用的是SID比较特别,只是用起来太麻烦了,输那么多数字,呵呵! 最后是做一个网络备份,也是一个批量脚本。注意使用Schedule服务一起搭配。前面提到过regback不能覆盖文件,一旦有重名的文件将会导致错误的发生

echo on
rem ... Name: doback.bat
rem ... Purpose: Network backup for Registry files
rem ... Process: Connect to backup share, delete old backup files, copy over new

backup files
rem ... Before using this batch file, create a share containing the following

directories: backup, config. Set permissions on this share so that appropriate users

can run this script.

net use \\myshare\backup

rem --〉 delete old backups; regback will not copy over an existing file
echo y│del

24. Sc.exe (Service Controller Tool)

干好一年以前就写过这个东西介绍了。大家再看一遍吧!:s

我们知道在MStools SDK,也就是在Resource Kit有一个很少有人知道的命令行软件,SC.exe,这个软件向所有的Windows NT和Windows 2000要求控制他们的API函数。我们可以在命令行里通过对这些函数设定参数的方式来设定他们(API)。SC.exe也可以显示服务的状态,同时也可以从状态结构区域里重新找到存储在里面的数值。它还可以列出远程计算机的服务函数或者是服务状况结构。SC.exe这个开发工具至少可以比服务控制面板程序和网络命令行界面(net.exe,这个东西可以告诉你一个服务是
在运行中,还是停止,还是暂停。)这两个东西提供更多的细节和准确的信息。虽然上述两个东西在正常工作的情况下,对于完整的调试是非常好用的,但是如果有新的服务,或者新的代码被开发出来的时候,这两个工具提供的信息可能造成误导。这也就是我们需要用到SC的原因。

下面举列说明,如果在开发阶段,你的服务在挂住在一个start-pending的时候,控制面板和net.exe同样报告服务是在运行的。但它挂在一个stop-pending的时候,net.exe报告它运行,而控制面板着报告它停止,如果你试着 启动它,这是控制面板则会告诉你这个服务正在运行。难道这不是很困惑吗?呵呵!
SC.exe可以让你询问服务的状况和取出存储在状态结构区域内的数值,控制面板和net.exe不提供服务完整的状况 。但是无论如何,SC程序可以告诉你这个服务准确的情形,同样也可以给你看最后的checkpoint数和等待提示。
这个checkpoint,我叫它检查点(我觉得他就像一个程序调试时置的断点),所以我们也可以把看作为一个调试工具,因为它可以提供一个关于在程序停止时还要沿着初始化继续前进多久准确报告。
SC.exe也可以允许你调用很多的服务控制API函数,可以让你从命令行里改变大量的参数。这位服务开发者们提供了很多的优势。例如,它提供了一个方便的方式来创建或者在注册表和服务控制管理数据库中配置服务信息。开发者们不需要在手动的在注册表里单独的设置键值来配置服务,也不用重起机器来强迫服务控制管理数据库升级 。
作为一个命令很工具,SC.exe可以用来测试你自己的系统,你可以设置一个批处理文件来使用不同的参数调用SC.exe来控制服务。这个很有用,如果你想看看你的服务不断的启动和停止,我没有试过哦!让一个服务一下子打开,一下子关闭,听上去很不错的。如果你的服务进程里面有多个进程的话,你可以保持一个进程继续运行不让它走开,然后让另一个不断的打开在关闭,还可以寻找一下内存缺乏导致不完全清楚的证据。下面介绍SC,SC QC,and SC QUERY

SC使用这样的语法:
1. SC [Servername] command Servicename [Optionname= Optionvalue]

2. SC [command]

这里使用第一种语法使用SC,使用第二种语法显示帮助。

下面介绍各种参数。

Servername
可选择:可以使用双斜线,如\\myserver,也可以是\\192.168.0.1来操作远程计算机。如果在本地计算机上

操作
就不用添加任何参数。

Command
下面列出SC可以使用的命令。

config 改变一个服务的配置。(长久的)

continue 对一个服务送出一个继续控制的要求。

control 对一个服务送出一个控制。

create 创建一个服务。(增加到注册表中)

delete 删除一个服务。(从注册表中删除)

EnumDepend 列举服务的从属关系。

GetDisplayName 获得一个服务的显示名称。

GetKeyName 获得一个服务的服务键名。

interrogate 对一个服务送出一个询问控制要求。

pause 对一个服务送出一个暂停控制要求。

qc 询问一个服务的配置。

query 询问一个服务的状态,也可以列举服务的状态类型。

start 启动一个服务。

stop 对一个服务送出一个停止的要求。

Servicename
在注册表中为service key制定的名称。注意这个名称是不同于显示名称的(这个名称可以用net start和服务控制面板看到),而SC是使用服务键名来鉴别服务的。 Optionname
这个optionname和optionvalue参数允许你指定操作命令参数的名称和数值。注意,这一点很重要在操作名称和等号之间是没有空格的。一开始我不知道,结果………………,比如,start= optionvalue,这个很重要。
optionvalue可以是0,1,或者是更多的操作参数名称和数值对。
如果你想要看每个命令的可以用的optionvalue,你可以使用sc command这样的格式。这会为你提供详细的帮助。

Optionvalue
为optionname的参数的名称指定它的数值。有效数值范围常常限制于哪一个参数的optionname。如果要列表请用sc command来询问每个命令。

Comments
很多的命令需要管理员权限,所以我想说,在你操作这些东西的时候最好是管理员。呵呵!

当你键入SC而不带任何参数时,SC.exe会显示帮助信息和可用的命令。当你键入SC紧跟着命令名称时,你可以得到一个有关这个命令的详细列表。比如,键入sc create可以得到和create有关的列表。 但是除了一个命令,sc query,这会导出该系统中当前正在运行的所有服务和驱动程序的状态。 当你使用start命令时,你可以传递一些参数(arguments)给服务的主函数,但是不是给服务进程的主函数。

SC create
这个命令可以在注册表和服务控制管理数据库建立一个入口。

语法1
sc [servername] create Servicename [Optionname= Optionvalue]

这里的servername,servicename,optionname,optionvalue和上面的一样,这里就不多说了。这里我们

详细说
明一下optionname和optionvalue。

Optionname Optionvalue
描述

type= own, share, interact, kernel, filesys
关于建立服务的类型,选项值包括驱动程序使用的类型,默认是share。

start= boot, system, auto, demand, disabled
关于启动服务的类型,选项值包括驱动程序使用的类型,默认是demand(手动)。

error= normal, severe, critical, ignore
当服务在导入失败错误的严重性,默认是normal。

binPath= (string)
服务二进制文件的路径名,这里没有默认值,这个字符串是必须设置的。

group= (string)
这个服务属于的组,这个组的列表保存在注册表中的ServiceGroupOrder下。默认是nothing。

tag= (string)
如果这个字符串被设置为yes,sc可以从CreateService call中得到一个tagId。然而,SC并不显示这个标签

,所
以使用这个没有多少意义。默认是nothing

depend= (space separated string)有空格的字符串。
在这个服务启动前必须启动的服务的名称或者是组。

obj= (string)
账号运行使用的名称,也可以说是登陆身份。默认是localsystem

Displayname= (string)
一个为在用户界面程序中鉴别各个服务使用的字符串。

password= (string)
一个密码,如果一个不同于localsystem的账号使用时需要使用这个。

Optionvalue
Optionname参数名称的数值列表。参考optionname。当我们输入一个字符串时,如果输入一个空的引用这意味着一个空的字符串将被导入。

Comments
The SC CREATE command performs the operations of the CreateService API function.
这个sc create命令执行CreateService API函数的操作。详细请见CreateService。

例1
下面这个例子在一台叫做(\\myserver)的计算机上为一个叫“NewService”的服务建立的一个注册表登记。
sc \\myserver create NewService binpath= c:\winnt\system32\NewServ.exe

按照默认,这个服务会建立一个WIN32_SHARE_PROCESS使用SERVICE_DEMAND_START启动方式。这将不会有任何从属关系,也将会按照localsystem安全上下关系来运行。

例2
下面这个例子将在本地计算机上,建立一个服务,它将会是一个自动运行服务,并且运行在他自己的进程上。它从属于TDI组和NetBios服务上。注意,你必须在从属中间增加一个空格的引用。
sc create NewService binpath= c:\winnt\system32\NewServ.exe type= own
start= auto depend= “ TDI Netbios“

例3
服务开发者可以通过临时改变二进制路径(影像路径)的方式来将这个服务运行在内核调试器的上下关系中。下面这个例子就可以让我们看到如何改变服务的配置。

sc config NewService binpath= “ntsd -d c:\winnt\system32\Newserv.exe“

这个例子会引起服务控制管理器调用ntsd.exe使用下例的参数字符串:
“-d c:\nt\system32\NewServ.exe“
当系统装入newserv.exe时ntsd将会转而打断调试器,所以断点可以被设置在服务代码里。

SC QC
这个SC QC“询问配置”命令可以列出一个服务的配置信息和QUERY_SERVICE_CONFIG结构。

语法1
sc [Servername] qc Servicename [Buffersize]

Parameters
servername和servicename前面已经介绍过了,这里不再多说。

Buffersize,可选择的,列出缓冲区的尺寸。

Comments

SC QC命令显示了QUERY_SERVICE_CONFIG结构的内容。

以下是QUERY_SERVICE_CONFIG相应的区域。
TYPE dwServiceType
START_TYPE dwStartType
ERROR_CONTROL dwErrorControl
BINARY_PATH_NAME lpBinaryPathName
LOAD_ORDER_GROUP lpLoadOrderGroup
TAG dwTagId
DISPLAY_NAME lpDisplayName
DEPENDENCIES lpDependencies
SERVICE_START_NAME lpServiceStartName

例1

下面这个例子询问了在上面例子中建立的“NewService”服务的配置:

sc \\myserver qc NewService

sc显示下面的信息:

SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : c:\winnt\system32\NewServ.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : NewService
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem

NewService有能力和其他的服务共享一个进程。但是它不是自动启动的。二进制文件名是NewServ.exe。这个服务不依靠与其它的的服务,而且运行在lcoalsystem的安全上下关系中。这些都是调用QueryServiceStatus基本的返回,如果还需要更多的细节届时,可以看看API函数文件。

SC QUERY

SC QUERY命令可以获得服务的信息。

语法:
sc [Servername] query { Servicename │ Optionname= Optionvalue... }

参数:

servername, servicename, optionname, optionvalue不在解释。只谈一下这个命令提供的数值。

Optionname Optionvalue
Description

type= driver, service, all
列举服务的类型,默认是service

state= active, inactive, all
列举服务的状态,默认是active

bufsize= (numeric value)
列举缓冲区的尺寸,默认是1024 bytes

ri= (numeric value)
但开始列举时,恢复指针的数字,默认是0

Optionvalue
同上。

Comments

SC QUERY命令可以显示SERVICE_STATUS结构的内容。

下面是SERVICE_STATUS结构相应的信息:
TYPE dwServiceType
STATE dwCurrentState, dwControlsAccepted
WIN32_EXIT_CODE dwWin32ExitCode
SERVICE_EXIT_CODE dwServiceSpecificExitCode
CHECKPOINT dwCheckPoint
WAIT_HINT dwWaitHint

在启动计算机后,使用SC QUERY命令会告诉你是否,或者不是一个启动服务的尝试。如果这个服务成功启动, WIN32_EXIT_CODE区间会将会包含一个0,当尝试不成功时,当它意识到这个服务不能够启动时,这个区间也会提供一个退出码给服务。

例子

查询“NewService“服务状态,键入:

sc query NewService

显示一下信息:

SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

注意,这里存在一个给这个服务的退出码,即使这个服务部不在运行,键入net helpmsg 1077,将会得到对

1077错误信息的说明:

上次启动之后,仍未尝试引导服务。所以,这里我想说一句,希望大家可以活用net helpmsg
标签: