Win2k”秘密武器”之全局标志编辑器
2006-03-31 12:00:21 来源:WEB开发网全局(或全程)标志编辑器是Sppuort Tools提供的一个适用与CW2KP的实用工具,在前面介绍查找内存空洞的文章中曾经提到过它。那么,所谓“标志(Flag)”的含义是什么呢?我们可以先粗略地将其理解为"对操作系统环境的设置".这种全局标志编辑可以被管理员用来对系统进行修改设置,也可以用来进行系统诊断。从该工具的使用特点和用途上,也可以体现出这一点.这个工具还可以与别的工具相配合,作为其它工具的先导,例如,使用查找内存空洞的工具就需要首先启动标志编辑器.另一个特点是:这个工具必须在加载后进行一次重新启动才能使用,这一点与别的工具明显不同.该工具也是在两种环境中各具备一个版本.无论那种版本,有很多可供选择的项目,项目对应的就是注册表中的特定键值,而对这些项目的选择操作实际是对注册表键值的修改,键值的修改会使系统内部的某些功能被打开或禁止,程序就是利用这一点来对系统进行诊断或排除故障的.下面先介绍在CW2KP中使用的GUI界面版本的标志编辑器.
1. GUI版本介绍
如果你已经安装"Support Tools",打开该程序可以使用:"开始->程序->Support Tools->Tools-> Global Flags Editor",附图是打开程序后出现的对话框,对话框上的彩色矩形或椭圆框是我为方便讨论自己加上去的.
附图:
在目的(Destination)选项卡中,你可以进行三项选择:
1、系统注册表
2、内核模式
3、图标文件(image file)三个选项都是单选,每次只能选择一个.选择第一项是对注册表的修改,当然这些修改很有限,并主要围绕诊断系统故障而设置,同平时我们为优化系统进行的注册表修改不是一回事;对注册表的修改,需要重新启动计算机之后才可以生效。选择第二项是启用内核模式。选择第三项可以修改图标,要在image file name 编辑栏中指定图标文件的名称;同时,在Command Line 编辑栏中指定该图标代表的应用程序,这很像我们熟悉的更改图标操作。不论选择哪个项目,都可以使用“Launch”按钮来启动设置。
目的框以下是可供选择的项目,所有选项的作用,在对话框的选择框旁都附有比较完整的英文说明,这些说明文字与表1的第二列中基本是相对应的,中文含义可以参考表1中第三列对应的部分。表1中的最左边一列是英文说明的缩写,这些缩写也是命令行版本中相应的参数。应当注意的是,表1中列出的有些项目,在对话框中并没有对应的选择框可用,也就是说,这些开关只能用在命令行版本中.凡属这些,都在表中都以蓝色的字体列出.同样,有些对话框中已经有的选择框,在表中也找不到对应的说明,这也意味着该项只能运行在GUI版本下.属这一类的补充在表1的下面.表中或表外说明中的名词术语的含义不属于本文讨论的范围,需要了解时各位可以参考相关的资料.并欢迎对其中的不妥乃至错误进行指正.
选择框分成五组,第二和第三组在用途上基本可以归为一类,所以我将五组划分成四类,每一类用一种颜色的矩形框分开。蓝色矩形框中共包含3项,这都是与调试有关的选项,其意义也比较明显; 粉红色框中包含10项,这些项大部分与内存管理有关;绿色矩形框也是与程序调试有关的选项,只是关联的内容同第一类不一样;红色矩形框中的项目比较杂,分属于多个方面;但总起来说,所有的选项都是围绕诊断调试设置的.
椭圆框中的项目是选择跟踪捕捉的层数,默认是16层,你可以修改为别的数值.
右下方的矩形框是内核模式下特定内存池标记的选择,可以选择文本,也可以选择十六进制数,内容可以填写在给出的编辑框中.然后在两种检验模式中指定一种.
完成上述各项选择后,鼠标点击Apply或Ok即可.
无论使用何种版本的全局标志编辑器,都必须对命令、参数、开关做到真正了解,盲目乱用会产生程序冲突或在重新启动计算机时失败.
2.命令行版本介绍
命令行版本与GUI版本基本是一一对应的.也是由参数和开关组成的.
命令行的语法:
gflag [-r [flag [maxdepth]] [-k [flag]] [-i ImageFileName [flag]] [-l flag commandline...]
参数及开关说明:
开关:flag 即表1中有效的全局标志
flag应当是下面形式:
A:一个十六进制数的全局标志.如果使用时需要查找含义,可以参考表2中的内容,表1和表2实际是同一个标志的两种表达形式.
B:字符串,也就是表1中最左边一列中的缩写.
C:如果同时使用多个开关,可以使用"+"号与"-"号来进行连接.这与同时在附图中进行多项选择类似.
参数:
-r [flag] [maxdepth]
显示当前系统的注册表设置,
-k [flag] 运行内核模式
-i ImageFileName [flag] 加载的image 文件名
-l [flag commandline] 启动指定的设置项,相当与点击上面的“Launch”按钮.
有效的全局标志的缩写及含义(表1)
缩写 | 英文 | 含义说明 |
Kst | Create kernel mode stack trace database | 建立kernel模式下内存堆的跟踪数据库 |
Ust | Create user mode stack trace database | 建立user(用户)模式下内存堆的跟踪数据库 |
Dic | Debug Initial Command | Debug初始化命令 |
Dwl | Debug WINLOGON | Debug WINLOGON |
Dhc | Disable Heap Coalesce on Free | 禁止在自由内存空间的堆合并 |
Ddp | Disable kernel mode DbgPrint output | 禁用kernel模式的debug打印输出 |
Dps | Disable paging of kernel stacks | 禁止内核堆栈分页 |
Dpd | Disable protected DLL verification | 禁止DLL保护的确认 |
Ece | Enable Close Exception | 允许关闭异常程序 |
d32 | Enable debugging of Win32 Subsystem | 允许win32子系统的调试程序 |
Eel | Enable Exception Logging | 允许例外程序登录 |
Hat | Enable Heap API Call Tracing | 允许API堆的跟踪调用 |
Hfc | Enable heapfree checking | 允许自由堆检查 |
Hpc | Enable heap parameter checking | 允许堆参数检查 |
Htg | Enable heap tagging | 允许标记堆 |
Htd | Enable Heap Tagging By DLL | 允许DLL标记堆 |
Htc | Enable heap tail checking | 允许堆尾部检查 |
Hvc | Enable heap validation on call | 允许堆调用的确认 |
Ksl | Enable loading of kernel debugger symbols | 允许装载内核Debug符号 |
Eot | Enable Object Handle Type Tagging | 允许标记对象句柄类型 |
Pfc | Enable pool free checking | 允许检查自由内存池 |
Ptg | Enable pool tagging | 允许标记内存池 |
Ptc | Enable pool tail checking | 允许内存池尾部检查 |
Otl | Maintain a list of objects for each type | 维修每个类型的对象的列表 |
Hpa | Place heap allocations at ends of pages | 堆分配放在页的结束位置 |
Sls | Show Loader Snaps | 显示加载的捕捉 |
Soe | Stop On Exception | 停止异常程序 |
补充:Buffer DbgPrint output:debug缓冲区打印输出
表2:标志名称对应的十六进制数:
标志名称 | 十六进制数 |
FLG_STOP_ON_EXCEPTION | 0x00000001 |
FLG_SHOW_LDR_SNAPS | 0x00000002 |
FLG_DEBUG_INITIAL_COMMAND | 0x00000004 |
FLG_STOP_ON_HUNG_GUI | 0x00000008 |
FLG_HEAP_ENABLE_TAIL_CHECK | 0x00000010 |
FLG_HEAP_ENABLE_FREE_CHECK | 0x00000020 |
FLG_HEAP_VALIDATE_PARAMETERS | 0x00000040 |
FLG_HEAP_VALIDATE_ALL | 0x00000080 |
FLG_POOL_ENABLE_TAIL_CHECK | 0x00000100 |
FLG_POOL_ENABLE_FREE_CHECK | 0x00000200 |
FLG_POOL_ENABLE_TAGGING | 0x00000400 |
FLG_HEAP_ENABLE_TAGGING | 0x00000800 |
FLG_USER_STACK_TRACE_DB | 0x00001000 |
FLG_KERNEL_STACK_TRACE_DB | 0x00002000 |
FLG_MAINTAIN_OBJECT_TYPELIST | 0x00004000 |
FLG_HEAP_ENABLE_TAG_BY_DLL | 0x00008000 |
FLG_IGNORE_DEBUG_PRIV | 0x00010000 |
FLG_ENABLE_CSRDEBUG | 0x00020000 |
FLG_ENABLE_KDEBUG_SYMBOL_LOAD | 0x00040000 |
FLG_DISABLE_PAGE_KERNEL_STACKS | 0x00080000 |
FLG_HEAP_ENABLE_CALL_TRACING | 0x00100000 |
FLG_HEAP_DISABLE_COALESCING | 0x00200000 |
FLG_ENABLE_CLOSE_EXCEPTIONS | 0x00400000 |
FLG_ENABLE_EXCEPTION_LOGGING | 0x00800000 |
FLG_ENABLE_HANDLE_TYPE_TAGGING | 0x01000000 |
FLG_HEAP_PAGE_ALLOCS | 0x02000000 |
FLG_DEBUG_INITIAL_COMMAND_EX | 0x04000000 |
FLG_VALID_BITS | 0x07FFFFFF |
更多精彩
赞助商链接