gA6ri3l
驱动牛犊
驱动牛犊
  • 注册日期2007-04-04
  • 最后登录2007-07-03
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:991回复:0

请教各位关于address creation mutex 和APC的问题~~~~~~?!

楼主#
更多 发布于:2007-06-08 10:50
win2k souce 里有这么一段:
//
        // Get the address creation mutex to block multiple threads from
        // creating or deleting address space at the same time and
        // get the working set mutex so virtual address descriptors can
        // be inserted and walked.  Block APCs so an APC which takes a page
        // fault does not corrupt various structures.
        //

它的实现是:
ExAcquireFastMutex ( &((CurrentProcess)->AddressCreationLock));
ASSERT (MI_NOT_WS_OWNER(CurrentProcess));                      
ASSERT (KeGetCurrentIrql() == APC_LEVEL);              
ExAcquireFastMutexUnsafe( &((CurrentProcess)->WorkingSetLock));
(CurrentProcess)->WorkingSetLock.OldIrql = MI_MUTEX_ACQUIRED_UNSAFE;

1)但是当我调用时,在第一个函数就阻塞了,不知道为何?
2)而当我把第一句去掉时,又在KeGetCurrentIrql()返回时!=APC_LEVEL
那么又如何使得APC禁用呢?
这里有两个疑惑:为什么要禁用APC,如何禁用APC呢?


游客

返回顶部