zzz2003526
驱动牛犊
驱动牛犊
  • 注册日期2009-09-12
  • 最后登录2010-06-30
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1815回复:1

NDIS协议驱动中的一个小疑惑?

楼主#
更多 发布于:2009-12-07 22:25
参看DDK下的ndisprot例子时候,有这样一段控制代码:
说等待一个全局事件。这个全局变量会在绑定完成 的时候被设置。请问这个全局事件是在哪里设置的?
case IOCTL_NDISPROT_BIND_WAIT:
            if (NPROT_WAIT_EVENT(&Globals.BindsComplete, 5000))
            {
                NtStatus = STATUS_SUCCESS;

            }
            else
            {
                NtStatus = STATUS_TIMEOUT;

            }
            DEBUGP(DL_INFO, ("IoControl: BindWait returning %x\n", NtStatus));
            break;

        按照我对人家讲解的理解,应该是在这个函数的末尾,而在这个函数末尾也确实设置了一个事件,但是却不是那个全局事件??
而且在调试发现,上面等待的全局事件和这里没什么关系。很疑惑啊????谁能讲讲。

VOID
NdisProtOpenAdapterComplete(
    IN NDIS_HANDLE                  ProtocolBindingContext,
    IN NDIS_STATUS                  Status,
    IN NDIS_STATUS                  OpenErrorCode
    )
{
    PNDISPROT_OPEN_CONTEXT           pOpenContext;

    UNREFERENCED_PARAMETER(OpenErrorCode);
    
    pOpenContext = (PNDISPROT_OPEN_CONTEXT)ProtocolBindingContext;
    NPROT_STRUCT_ASSERT(pOpenContext, oc);

    pOpenContext->BindStatus = Status;

    NPROT_SIGNAL_EVENT(&pOpenContext->BindEvent);
}


drivercoding
驱动牛犊
驱动牛犊
  • 注册日期2009-10-19
  • 最后登录2013-08-17
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望191点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-12-08 14:52
仔细找找源代码,你就会发现,这个Globals.BindsComplete在NetEventBindsComplete这个PnP消息的时候会被置为signaled状态。

至于NetEventBindsComplete是什么含义,就看WDK文档吧。
游客

返回顶部