chapter 5.6: Object context area

是driver定义的由object使用的存储区域,UMDF和KMDF有不同的使用方式:
    UMDF:存储在callback object中,也能按需要在object中创建
    KMDF:driver通常在object中使用context area


UMDF object context Data
=====


UMDF context info in callback object data members
=====


UMDF context area in object
=====


KMDF Object Context Area
KMDF object能具有一至多个context area,area使用nonpaged pool,初始化时被清零,是object的一部分。
第一个Context area和WDM的DEVICE_OBJECT的DeviceExtension等价。
WdfObjectAllocateContext方法
    给framework创建的object分配context
    给driver创建的objcet分配额外的context
    ** 一个object里的context必须是不同类型的
    context的大小和type放入attributes structure,需要把它传入方法中
framework提供了宏把context和它的type和name关联
使用accessor方法获得context area的指针。
---design---
context很好的用于为I/O request加上信息。context只能被创建它的组件访问,它是数据抽象和包装。若request用于不同的任务,每个任务都有对应的一个context,只有对应的任务才能访问到对应的context。
------------
KMDF在删除对象时删除它的context,而driver无法动态删除context area
设置context area方式:
    1.声明type
    2.初始化attributes structure
    3.给object分派context area


KMDF context area的类型声明

在header file中使用 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME 宏(type,driver相关的name,返回context的pointer)

snippet的Nonpnp.h中的代码例子

typedef struct _REQUEST_CONTEXT {
    WDFMEMORY InputMemoryBuffer;
    WDFMEMORY OutputMemoryBuffer;
} REQUEST_CONTEXT, *PREQUEST_CONTEXT;
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(REQUEST_CONTEXT, GetRequestContext)

REQUEST_CONTEXT既是type

----初始化attributes structure里面的context related fields--------

WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE:在初始化后的sttributes struc设置context

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE:合并了set和对attri struc的初始化。

WDF_OBJECT_ATTRIBUTES    attributes;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, REQUEST_CONTEXT);

----给object分派KMDF context area-----

可以给新建的和已有的object分派context

WdfObjectAllocateContext,参数是一个object的handle,一个初始化后的attributes structure,和指向被分派context area的地址。

status = WdfObjectAllocateContext(Request, &attributes, &reqContext);

framework在删除对象时同时删除context。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值