0
我有this NDIS Filter Driver。我嘗試在我的驅動程序中啓動一個線程,每隔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
在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秒發送一次數據包?
** 1。**你確定它是FilterReturnNetBufferLists而不是FilterSendNetBufferListsComplete嗎? ** 2。如果問題是因爲我將NBL的所有權傳遞給NDIS,爲什麼它不在第一次調用中發送?以及爲什麼在我不檢查時間時發送數據包? ** 3。**我沒有使用定時器,因爲這個線程也做了其他的事情,我想一直執行。 – user2403272
1.是的,我很傻。我的意思是'FilerSendNetBufferListsComplete' –
2.我不確定這個問題的含義;你能改述一下嗎? –