阅读:2007回复:2
如何使用NdisAllocateIoWorkItem函数
ndis5.1中对应的函数为
VOID NdisInitializeWorkItem( IN PNDIS_WORK_ITEM WorkItem, IN NDIS_PROC Routine, IN PVOID Context ); nids6.0改为 NDIS_HANDLE NdisAllocateIoWorkItem( IN NDIS_HANDLE NdisObjectHandle ); 原ndis5.1中的调用为 NdisInitializeWorkItem(&Adapter->MPWorkItem, MP_MPWorkItem, Adapter); 请问在ndis6.0中该如何调用啊?谢谢! |
|
沙发#
发布于:2008-04-29 09:41
对NdisInitializeWorkItem和NdisScheduleWorkItem的机制不是很清楚, 搭车同问
|
|
板凳#
发布于:2008-05-25 07:53
NdisAllocateIoWorkItem和NdisScheduleWorkItem应该就是IoAllocateWorkItem和IoQueueWorkItem的封装
PIO_WORKITEM IoAllocateWorkItem( IN PDEVICE_OBJECT DeviceObject ); VOID IoQueueWorkItem( IN PIO_WORKITEM IoWorkItem, IN PIO_WORKITEM_ROUTINE Routine, IN WORK_QUEUE_TYPE QueueType, IN PVOID Context ); 这个和你说的NDIS6中的函数原型非常类似。 NDIS中有很多函数都是直接封装或者是ntoskrnl中函数的别名 关于WorkItem其实很简单,就是为了把一些工作放到PASSIVE_LEVEL去做,因为如果你在DISPATCH_LEVEL等高优先级下很多函数是没法调用的。这个和DPC非常类似,DPC是为了提高优先级,而这个是为了降低优先级。 IoQueueWorkItem的工作其实就是把这个WorkItem加入队列,然后由一个专门的系统线程来检查运行的。 |
|