阅读:3821回复:1
关于Windows Xp 实现的一种新的同步机制 Push lock 的疑问
查看 Windows WRK1.2 源代码时,发现有个 Push Lock 这个新的东东,但却没发现 Windows 2000 里有,一篇文章也证实了这一点,这是 Windows Xp 的新特性,据说某些情况 Push Lock 效率高,并且它所占用资源少,包括 VMM 在内的模块,其中的部分同步机制也改用了这个 Push Lock。
所以就想去研究一下,但发现 Push Lock 的类型 EX_PUSH_LOCK 被定义为: #define EX_PUSH_LOCK ULONG_PTR 但奇怪的是:操作 Push Lock 的函数 ExAcquirePushLockShared 却可以对一个 EX_PUSH_LOCK 变量进行结构体形式的访问: EX_PUSH_LOCK OldValue, NewValue, TopValue; OldValue.Locked-------NewValue.Value-------NewValue.Ptr 等 另外一个操作 Push Lock 的函数 ExInitializePushLock 竟然找不到定义,通过反汇编才得知它就是把一个 EX_PUSH_LOCK 初始化为 0。 不知道这些是什么原因。查询了 Reactos 的代码,发现了 EX_PUSH_LOCK 的真正定义,确实如上面所述。 但 WRK1.2 Build 以及 run 的时候为什么能正确呢? |
|
沙发#
发布于:2010-02-23 17:34
1: kd> dt ntkrpamp!_EX_PUSH_LOCK
+0x000 Locked : Pos 0, 1 Bit +0x000 Waiting : Pos 1, 1 Bit +0x000 Waking : Pos 2, 1 Bit +0x000 MultipleShared : Pos 3, 1 Bit +0x000 Shared : Pos 4, 28 Bits +0x000 Value : Uint4B +0x000 Ptr : Ptr32 Void |
|