Win32 系统线程信息块(TIB)浅析
2009-03-05 20:02:37 来源:WEB开发网原文出处:May 1996 Under The Hood
Windows 操作系统各个版本之间虽然核心部分差异很大,但它们都共享一个关键的系统数据结构,许多程序员都没有加以关注。更精确地说,这种共享是针对此数据结构的某些域。先不说差别,这个结构被广泛使用,甚至是被编译器产生的代码存取。没错,你的C++编译器产生代码直接存取系统级的信息。
到底是什么结构呢?这个结构至少有两个不同的名字。在 Windows 95 中称之为“线程信息块”(TIB:Thread Information Block)。在 Windows NT 中,它被称为“线程环境块”(TEB:Thread Environment Block)。但是,我看到在某些 Windows NT 都文件中也有叫 TIB 的,本文中我将它称之为 TIB 吧。
线程信息块中到底有什么东西呢?让它如此特别。顾名思义,TIB 中的数据肯定与线程有关,并且在系统中每个线程都对应有一个 TIB。在 Windows 各个版本共享的数据域中,你会发现:有一个指针指向线程结构化异常处理列表,线程堆栈的位置以及线程局部存储槽。TIB 中的其它信息域在 Windows 各个版本之间是不同的。
TIB 并不是在 Windows NT 或 Windows 95 第一次出现的,对此你可能会觉得奇怪。其实 TIB 的祖先是在 OS/2 中,在微软创建 Windows NT 之前就有了,并且至今都存在于 OS/2 中。事实上,TIB 在 OS/2 和 Windows 之间不仅格式一样,连存取方式都一样。在微软的头文件 NTDDK.H 中甚至有一行是这样写的:
<< begin snippet >>
// This structure MUST MATCH OS/2 V2.0!
<< end snippet >>
更多精彩
赞助商链接