我有这个 NDIS 过滤器驱动程序。我尝试在我的驱动程序中启动一个线程,该线程将每 10 秒发送一次数据包。
为此,我使用以下代码:
LARGE_INTEGER TimePrev, TimeNow;
void ThreadedAction()
{
while(1)
{
KeQuerySystemTime(&TimeNow);
if(NBLtoSend && (TimeNow.QuadPart - TimePrev.QuadPart)>100000000)
{
NdisFSendNetBufferLists(NBLtoSend->SourceHandle, NBLtoSend, 0, 0);
KeQuerySystemTime(&TimePrev);
}
}
}
该函数以PsCreateSystemThread
in开头DriverEntry
。
但这不是发送我的数据包。
我尝试使用这个:
void ThreadedAction()
{
while(1)
{
if(NBLtoSend)
{
NdisFSendNetBufferLists(NBLtoSend->SourceHandle, NBLtoSend, 0, 0);
}
}
}
此代码不停地发送我的数据包。
以下代码每 10 秒用我的数据包创建一个新文件(CreateFileS 是我的函数),但不发送我的数据包:
LARGE_INTEGER TimePrev, TimeNow;
void ThreadedAction()
{
while(1)
{
KeQuerySystemTime(&TimeNow);
if(NBLtoSend && (TimeNow.QuadPart - TimePrev.QuadPart)>100000000)
{
PMDL pmdl = NET_BUFFER_CURRENT_MDL(NET_BUFFER_LIST_FIRST_NB(NBLtoSend));
CreateFileS(NULL,(char*)MmGetMdlVirtualAddress(pmdl),MmGetMdlByteCount(pmdl));
NdisFSendNetBufferLists(NBLtoSend->SourceHandle, NBLtoSend, 0, 0);
KeQuerySystemTime(&TimePrev);
}
}
}
为什么会发生这种情况,我该怎么做才能每 10 秒发送一次数据包?