阅读:1815回复:1
NDIS协议驱动中的一个小疑惑?
参看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); } |
|
沙发#
发布于:2009-12-08 14:52
仔细找找源代码,你就会发现,这个Globals.BindsComplete在NetEventBindsComplete这个PnP消息的时候会被置为signaled状态。
至于NetEventBindsComplete是什么含义,就看WDK文档吧。 |
|