全局(或全程)标志
编辑器是SppuortTools提供的一个适用与CW2KP的实用工具,在前面介绍查找
内存空洞的文章中曾经提到过它。那么,所谓“标志(Flag)”的含义是什么呢?我们可以先粗略地将其理解为"对操作
系统环境的设置".这种全局标志编辑可以被
管理员用来对系统进行修改设置,也可以用来进行系统诊断。从该工具的使用特点和用途上,也可以体现出这一点.这个工具还可以与别的工具相配合,作为其它工具的先导,例如,使用查找内存空洞的工具就需要首先启动标志编辑器.另一个特点是:这个工具必须在加载后进行一次重新启动才能使用,这一点与别的工具明显不同.该工具也是在两种环境中各具备一个版本.无论那种版本,有很多可供选择的项目,项目对应的就是注册表中的特定键值,而对这些项目的选择操作实际是对注册表键值的修改,键值的修改会使系统内部的某些
功能被打开或禁止,
程序就是利用这一点来对系统进行诊断或排除
故障的.下面先介绍在CW2KP中使用的GUI界面版本的标志编辑器. 1.GUI版本介绍
0 j. N* ?& T9 I& M' b
如果你已经安装"SupportTools",打开该程序可以使用:"开始->程序->SupportTools-%26gt;Tools-%26gt;GlobalFlagsEditor",附图是打开程序后出现的对话框,对话框上的彩色矩形或椭圆框是我为方便讨论自己加上去的.
9 p9 q( q# p) \" \1 B- K
附图:
0 ?$ [/ v: s8 p2 ^+ {0 w/ E
d# P) c; a' G, P! o# f) D
- Q9 {( J- A+ ~6 G/ O" R 在目的(Destination)选项卡中,你可以进行三项选择: 1、系统注册表
) ]* e" {1 M# p- a: Z
2、内核模式
( k Z9 {- B7 I5 W H' c 3、图标文件(imagefile)三个选项都是单选,每次只能选择一个.选择第一项是对注册表的修改,当然这些修改很有限,并主要围绕诊断系统故障而设置,同平时我们为优化系统进行的注册表修改不是一回事;对注册表的修改,需要重新启动
计算机之后才可以生效。选择第二项是启用内核模式。选择第三项可以修改图标,要在imagefilename编辑栏中指定图标文件的名称;同时,在CommandLine编辑栏中指定该图标代表的应用程序,这很像我们熟悉的更改图标操作。不论选择哪个项目,都可以使用“Launch”按钮来启动设置。
1 ?) Z/ F% u; u$ ~+ Q V- p4 w% I 目的框以下是可供选择的项目,所有选项的作用,在对话框的选择框旁都附有比较完整的英文说明,这些说明文字与表1的第二列中基本是相对应的,中文含义可以参考表1中第三列对应的部分。表1中的最左边一列是英文说明的缩写,这些缩写也是命令行版本中相应的参数。应当注意的是,表1中列出的有些项目,在对话框中并没有对应的选择框可用,也就是说,这些开关只能用在命令行版本中.凡属这些,都在表中都以蓝色的字体列出.同样,有些对话框中已经有的选择框,在表中也找不到对应的说明,这也意味着该项只能运行在GUI版本下.属这一
类的补充在表1的下面.表中或表外说明中的名词术语的含义不属于本文讨论的范围,需要了解时各位可以参考相关的资料.并欢迎对其中的不妥乃至错误进行指正.
3 X1 h, f' p% I' j$ f
选择框分成五组,第二和第三组在用途上基本可以归为一类,所以我将五组划分成四类,每一类用一种颜色的矩形框分开。蓝色矩形框中共包含3项,这都是与调试有关的选项,其意义也比较明显;粉红色框中包含10项,这些项大部分与内存管理有关;绿色矩形框也是与程序调试有关的选项,只是关联的内容同第一类不一样;红色矩形框中的项目比较杂,分属于多个方面;但总起来说,所有的选项都是围绕诊断调试设置的.
- @* V9 y: X$ V+ i/ n5 b: p; q7 X
椭圆框中的项目是选择跟踪捕捉的层数,默认是16层,你可以修改为别的数值.
$ b$ g# Q; d6 C8 @ 右下方的矩形框是内核模式下特定内存池标记的选择,可以选择文本,也可以选择十六进制数,内容可以填写在给出的编辑框中.然后在两种检验模式中指定一种.
9 q0 P9 |9 H9 [4 J, M% s R6 v7 r
完成上述各项选择后,
鼠标点击Apply或Ok即可.
/ t! y8 f7 q. m 无论使用何种版本的全局标志编辑器,都必须对命令、参数、开关做到真正了解,盲目乱用会产生程序冲突或在重新启动计算机时失败.
' j0 C. w5 o7 V$ m; a" ~# z" E 2.命令行版本介绍
! V, l3 Y: Y6 p$ P2 H' C( V
命令行版本与GUI版本基本是一一对应的.也是由参数和开关组成的.
4 k: z( d/ L! A/ G- m* _4 `6 V 命令行的语法:
* N( u' Y/ X& T. V gflag[-r[flag[maxdepth]][-k[flag]][-iImageFileName[flag]][-lflagcommandline...]
7 ?# `/ E# V* z. F1 G. E1 G& [# k
参数及开关说明:
4 A% B+ {9 m9 \" |
开关:flag 即表1中有效的全局标志
; ]$ ?" G1 Z8 _8 E0 j1 k" j O7 E% o& ]$ A
flag应当是下面形式:
1 e$ w+ H. f# Z8 l A:一个十六进制数的全局标志.如果使用时需要查找含义,可以参考表2中的内容,表1和表2实际是同一个标志的两种表达形式.
$ _9 ^' Q( f1 q) i, {: F4 I
B:字符串,也就是表1中最左边一列中的缩写.
0 ? ~7 Y3 a+ L
C:如果同时使用多个开关,可以使用"+"号与"-"号来进行连接.这与同时在附图中进行多项选择类似.
, A; _: O X$ |9 c2 ~* M 参数:
4 `- n5 R$ j4 }/ Y. K o -r[flag][maxdepth]
( |" a" J- B! I9 y/ c0 q9 h) v/ n
显示当前系统的注册表设置,
: ~+ [0 Q+ L1 S+ z
-k[flag]运行内核模式
+ `; @6 X: Y, r" y
-iImageFileName[flag] 加载的image文件名
# H) r0 Z. u/ I( b0 @4 f" ^ -l[flagcommandline] 启动指定的设置项,相当与点击上面的“Launch”按钮.
2 j, y3 g6 Y% ]0 D8 z! g( ~
有效的全局标志的缩写及含义(表1)
5 g. ?2 A! y7 d2 [
缩写
9 G6 M# P2 i. ^# f 英文
& }7 w: F! G# \) T
含义说明
5 F( n2 s" K+ B6 i$ x* e. I, @
KstCreatekernelmodestacktracedatabase建立kernel模式下内存堆的跟踪
数据库UstCreateusermodestacktracedatabase建立user(用户)模式下内存堆的跟踪
数据库DicDebugInitialCommandDebug初始化命令DwlDebugWINLOGONDebugWINLOGONDhcDisableHeapCoalesceonFree禁止在自由内存空间的堆合并DdpDisablekernelmodeDbgPrintoutput禁用kernel模式的debug打印输出DpsDisablepagingofkernelstacks禁止内核堆栈分页DpdDisableprotectedDLLverification 禁止DLL保护的确认EceEnableCloseException 允许关闭异常程序d32EnabledebuggingofWin32Subsystem允许win32子系统的调试程序EelEnableExceptionLogging允许例外程序登录HatEnableHeapAPICallTracing允许API堆的跟踪调用HfcEnableheapfreechecking允许自由堆检查HpcEnableheapparameterchecking允许堆参数检查HtgEnableheaptagging允许标记堆HtdEnableHeapTaggingByDLL允许DLL标记堆HtcEnableheaptailchecking允许堆尾部检查HvcEnableheapvalidationoncall允许堆调用的确认KslEnableloadingofkerneldebuggersymbols允许装载内核Debug符号EotEnableObjectHandleTypeTagging允许标记对象句柄类型PfcEnablepoolfreechecking允许检查自由内存池PtgEnablepooltagging允许标记内存池PtcEnablepooltailchecking允许内存池尾部检查OtlMaintainalistofobjectsforeachtype
维修每个类型的对象的列表HpaPlaceheapallocationsatendsofpages堆分配放在页的结束位置SlsShowLoaderSnaps显示加载的捕捉SoeStopOnException停止异常程序 补充:BufferDbgPrintoutput:debug缓冲区打印输出
$ \( c7 j. b3 L' @2 L$ [+ v& W 表2:标志名称对应的十六进制数:
& w$ Q( f/ y- O: _, Q% C3 a" k( _2 i
标志名称
: {0 f6 w% I4 W& J 十六进制数
0 b% n/ R5 Z- x7 I1 I
FLG_STOP_ON_EXCEPTION0x00000001FLG_SHOW_LDR_SNAPS0x00000002FLG_DEBUG_INITIAL_COMMAND0x00000004FLG_STOP_ON_HUNG_GUI0x00000008FLG_HEAP_ENABLE_TAIL_CHECK0x00000010FLG_HEAP_ENABLE_FREE_CHECK0x00000020FLG_HEAP_VALIDATE_PARAMETERS0x00000040FLG_HEAP_VALIDATE_ALL0x00000080FLG_POOL_ENABLE_TAIL_CHECK0x00000100FLG_POOL_ENABLE_FREE_CHECK0x00000200FLG_POOL_ENABLE_TAGGING0x00000400FLG_HEAP_ENABLE_TAGGING0x00000800FLG_USER_STACK_TRACE_DB0x00001000FLG_KERNEL_STACK_TRACE_DB0x00002000FLG_MAINTAIN_OBJECT_TYPELIST0x00004000FLG_HEAP_ENABLE_TAG_BY_DLL0x00008000FLG_IGNORE_DEBUG_PRIV0x00010000FLG_ENABLE_CSRDEBUG0x00020000FLG_ENABLE_KDEBUG_SYMBOL_LOAD0x00040000FLG_DISABLE_PAGE_KERNEL_STACKS0x00080000FLG_HEAP_ENABLE_CALL_TRACING0x00100000FLG_HEAP_DISABLE_COALESCING0x00200000FLG_ENABLE_CLOSE_EXCEPTIONS0x00400000FLG_ENABLE_EXCEPTION_LOGGING0x00800000FLG_ENABLE_HANDLE_TYPE_TAGGING0x01000000FLG_HEAP_PAGE_ALLOCS0x02000000FLG_DEBUG_INITIAL_COMMAND_EX0x04000000FLG_VALID_BITS0x07FFFFFF