阅读:2895回复:13
请问我在驱动中用PsActiveProcessHead遍历进程链表时,需要上自旋锁吗?
如题!我想遍历进程链表,在各进程的EPROCESS直接读取它的信息,并自己建立一个信息链表,请问这样的操作需要用上spinlock吗,如果要的话,请大家给点例子代码可以吗?谢谢了
|
|
沙发#
发布于:2007-05-09 17:54
PsActiveProcessHead()函数本身是安全的吧。。为何要锁?
|
|
板凳#
发布于:2007-05-09 20:16
因为系统也要修改这个玩意~
如果不小心的话,还是会蓝屏的,建议修改时采用lock,遍历时不要采用——毕竟windows蓝屏了谁也不好受~ |
|
|
地板#
发布于:2007-05-09 21:41
哦,明白了,谢谢!
另外一个问题请问一下:我遍历链表时,在各进程的EPROCESS直接读取它的信息,但是发现这样的兼容性很差,同样时xp的sp2,但是有的会蓝屏死掉,我想知道有没有一些通用一点的方法提高兼容性呢?(NtQuerySystemInformation 除外)。谢谢大家的回复。。 |
|
驱动小牛
|
地下室#
发布于:2007-05-10 08:58
读取肯定不会死机,只有写入或执行内核中的内存或代码才有可能蓝.
|
5楼#
发布于:2007-05-10 11:11
谁说读取肯定不会蓝的
|
|
|
6楼#
发布于:2007-05-11 20:01
请问有没有一些温和一点的方法呢?希望可以提高一点兼容性,不然到时候在老师的机上死掉,就不用毕业了。。。
|
|
7楼#
发布于:2007-05-15 10:26
楼主是怎么得到PsActiveProcessHead这个系统变量的,能否说一下
|
|
|
8楼#
发布于:2007-05-15 11:28
PsGetCurrentProcess 得到当前进程的 EPROCESS, 然后再EPROCESS结构里找
|
|
|
9楼#
发布于:2007-05-16 00:12
某文章说“ntoskrnl.exe导出的PsInitialSystemProcess 是一个指向system进程的EPROCESS。这个结构成员EPROCESS.ActiveProcessLinks.Blink就是指向PsActiveProcessHead的. ”只有system进程的ActiveProcessLinks.Blink才指向PsActiveProcessHead,所以建议在DriverEntry中获取
|
|
10楼#
发布于:2007-05-21 10:03
结合V大和WQXNETQIQI 的语录,,,
读也lock,写更要也lock了,,,, |
|
11楼#
发布于:2007-05-22 00:29
谢谢你的回复,我也觉得这样会安全一点,因为有时候读的话会蓝掉,而且不可以运行卡巴
|
|
12楼#
发布于:2007-05-25 09:23
引用第10楼qiweixue于2007-05-21 10:03发表的 : 锁也是白锁,因为系统要改写这个链表的时候,并不会使用你的SpinLock,这时候,SpinLock的作用仅仅是把IRQL提升一下而以 |
|
13楼#
发布于:2007-05-25 10:03
Re:请问我在驱动中用PsActiveProcessHead遍历进程链表时,需要上自旋锁吗
那就关中断__asm CLI__asm STI |
|