나는 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);
}
}
}
이 기능은 DriverEntry
에 PsCreateSystemThread
시작 :
하지만 내 패킷을 보내지 않습니다.
나는 이것을 사용하려고 :
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.이 질문의 의미를 잘 모르겠습니다. 다시 말해 줄 수 있니? –