chenfeng111
驱动牛犊
驱动牛犊
  • 注册日期2004-09-29
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望55点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
阅读:2006回复:2

如何使用NdisAllocateIoWorkItem函数

楼主#
更多 发布于:2008-04-18 11:19
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中该如何调用啊?谢谢!
jssfy
驱动牛犊
驱动牛犊
  • 注册日期2008-03-06
  • 最后登录2010-08-27
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-04-29 09:41
对NdisInitializeWorkItem和NdisScheduleWorkItem的机制不是很清楚, 搭车同问
wollok
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2012-07-18
  • 粉丝0
  • 关注0
  • 积分571分
  • 威望335点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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加入队列,然后由一个专门的系统线程来检查运行的。
游客

返回顶部