WEB开发网
开发学院软件开发VC Win32 系统线程信息块(TIB)浅析 阅读

Win32 系统线程信息块(TIB)浅析

 2009-03-05 20:02:37 来源:WEB开发网   
核心提示: 1Eh WORD Win16MutexCount 与 Win16Mutex 的线程所有者有关,它是一个全局临界块,Win32 系统线程信息块(TIB)浅析(6),在16位代码中一次只允许一个线程,通常,Windows 95 TIB 选择器的线性地址不会变,对于系统资源来说,这个域的值是-1

1Eh WORD Win16MutexCount 与 Win16Mutex 的线程所有者有关,它是一个全局临界块,在16位代码中一次只允许一个线程。通常,这个域的值是-1,表示线程不拥有 Win16Mutex。当线程进入和离开要转换代码,这个值是也因此相应增加和减少。

20h DWORD DebugContext 域通常包含的值是零。但当你调试线程的进程时,该域指向一个包含寄存器值结构,类似于但不等同于在 WINNT.H 中定义的 CONTEXT 结构。

24h DWORD pCurrentPriority 指向一个 DWORD,它包含线程的调度优先级。值介于0(最小)到31(最大)之间。此域指向的 DWORD 在线性内存中在 3GB 以上的位置,它放在 VxD 领地。这也就是说线程的调度是由 ring 0 Virtual Machine Manager (VMM) 进行的。对于常规优先级的线程,优先级 DWORD 的值是9。

28h DWORD pvQueue 包含赋值给线程的消息队列选择器。即窗口消息通过消息对列到达相应的窗口。在 Windows 95 中,每个线程都具备自己的消息队列,但它初始状态不创建消息队列。因此,这个域的值可能是零。

30h PVOID* pProcess 是代表拥有线程的进程的进程数据库线性地址,但是它不能等同于进程句柄或进程 ID。

关于 TIBs 的一些注释

写本专栏对 TIB 进行实验的时候,我得一些重要信息值得与大家分享。首先,在 Windows 95 中,在每个任务数据库段的 52h 的偏移处,你会发现进程主线程的 TIB 选择器。在任务数据库段的 54h 的偏移处,你会找到 TIB 的线性地址。这个地址特别有趣,其中的任务数据库是被 Windows 95 的 16位组件使用的。似乎16位组件有时候会访问 TIB 中线程专用的数据。

我还注意到 FS 寄存器在 Windows NT 和 Windows 95 之间的使用差别,在 Windows NT 中,对于每个线程的 TIB来说,FS 寄存器总是一样的。这也就是说用于 FS 选择器的线性地址在任何线程发生转换的时候都得改变。相反, Windows 95 为每个 TIB 使用不同的选择器。因此,对每个线程而言,Windows 95 TIB 选择器的线性地址不会变。对于系统资源来说,你想哪种方法更优。

上一页  1 2 3 4 5 6 7  下一页

Tags:Win 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接