本文转自http://eslxf.blog.51cto.com/918801/223813
1.8.3.3 NPF_WaitEndOfBufferedWrite函数
函数等待NPF_BufferedWrite所有的发送执行完成,返回用户控制。
VOID NPF_WaitEndOfBufferedWrite(POPEN_INSTANCE Open)
{
UINT i;
NdisResetEvent(&Open->WriteEvent);
for(i=0;
Open->Multiple_Write_Counter > 0 && i < TRANSMIT_PACKETS;
i++
)
{
NdisWaitEvent(&Open->WriteEvent, 100);
NdisResetEvent(&Open->WriteEvent);
}
return;
}
其中TRANSMIT_PACKETS为发送缓冲池中最大的数据包数目,定义为256个。
Open->Multiple_Write_Counter表示挂起的待发数据包个数,其值在NPF_BufferedWrite函数种递增
InterlockedIncrement(&Open->Multiple_Write_Counter);
而在NPF_SendComplete函数中递减
InterlockedDecrement(&Open->Multiple_Write_Counter);
而在NPF_WaitEndOfBufferedWrite函数中只到Open->Multiple_Write_Counter为0时,将结束for循环,退出函数。