Ndis 6.0 lwf: System hang after FilterPause return

Hi All,
I’m develop an Ndis 6.0 lwf driver. In FilterSendNetBufferLists and FilterReceiveNetBufferLists i will send or recv custom NBL. In FilterSendNetBufferListsComplete and FilterReturnNetBufferLists destory them. However, after running certain time, I try to uninstall driver, system will hang up after FilterPause return. i know in FilterPause should not send or recv packets any more, so in FilterSendNetBufferLists and FilterReceiveNetBufferLists add this:
FILTER_ACQUIRE_LOCK(&pFilter->Lock, DispatchLevel);
// If the filter is not in running state, fail the send
if (pFilter->State != FilterRunning)
{
FILTER_RELEASE_LOCK(&pFilter->Lock, DispatchLevel);
CurrNbl = NetBufferLists;
while (CurrNbl)
{
NET_BUFFER_LIST_STATUS(CurrNbl) = NDIS_STATUS_PAUSED;
CurrNbl = NET_BUFFER_LIST_NEXT_NBL(CurrNbl);
}
NdisFSendNetBufferListsComplete(pFilter->FilterHandle,
NetBufferLists,
DispatchLevel ? NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL : 0);
break;
}

FILTER_ACQUIRE_LOCK(&pFilter->Lock, DispatchLevel);
if (pFilter->State != FilterRunning)
{
FILTER_RELEASE_LOCK(&pFilter->Lock, DispatchLevel);
if (NDIS_TEST_RECEIVE_CAN_PEND(ReceiveFlags))
{
ReturnFlags = 0;
if (NDIS_TEST_RECEIVE_AT_DISPATCH_LEVEL(ReceiveFlags))
{
NDIS_SET_RETURN_FLAG(ReturnFlags, NDIS_RETURN_FLAGS_DISPATCH_LEVEL);
}
NdisFReturnNetBufferLists(pFilter->FilterHandle, NetBufferLists, ReturnFlags);
}
break;
}
FILTER_RELEASE_LOCK(&pFilter->Lock, DispatchLevel);

In FilterPause add this:
if (pFilter->OutstandingRcvs > 0 || pFilter->OutstandingSends > 0)
{
NdisMSleep(5000000);
}
But after this still hang. I notice NdisMSleep(5000000); doesn;t work. why? Because FilterPause IRQL >= DISPATCH_LEVEL? (KeWaitForSingleObject doesn’t sleep too.)
What should i do to solve this issue? how can i wait all send or recv NBL finished? i’m dead end.
Thanks for any help.
Eric