69,369
社区成员
发帖
与我相关
我的任务
分享
typedef struct _IRP_AND_FILTER
{
PIRP pIrp;
PMS_FILTER pFilter;
ULONG OutputBufferLength;
}IrpAndFilter, *PIrpAndFilter;
pIrpFilter = (PIrpAndFilter)NdisAllocateMemoryWithTagPriority(pFilter->FilterHandle,sizeof(IrpAndFilter),FILTER_ALLOC_TAG, LowPoolPriority);
if(pIrpFilter != NULL)
Status = PsCreateSystemThread(&threadHandle,
THREAD_ALL_ACCESS,
NULL,
NULL,
NULL,
(PKSTART_ROUTINE) sendMyOwnPacketThread,
pIrpFilter
);
1. VOID
2. sendMyOwnPacketThread(
3. IN PIrpAndFilter pIrpAndFilter
4. )
5. {
6. NTSTATUS Status;
7. //拿到这些资源
8. pFilter = (PMS_FILTER)pIrpAndFilter->pFilter;//get current filter instance
9. pIrp = (PIRP)pIrpAndFilter->pIrp;//get current IPR
10. OutputBuffer = (PUCHAR)pIrp->AssociatedIrp.SystemBuffer;
11. OutputBufferLength = (ULONG)pIrpAndFilter->OutputBufferLength;
12. //使用资源
13.
14. //结束前
15. pIrp->IoStatus.Status = Status;
16. pIrp->IoStatus.Information = bufSize;
17. IoCompleteRequest(pIrp, IO_NO_INCREMENT);
18. PsTerminateSystemThread(STATUS_SUCCESS);//end the thread
19. //是否释放资源
20. //NdisFreeMemory(pIrpAndFilter,sizeof(IrpAndFilter),0);
21. }