跟我一起学习windows驱动编程(引用计数、上下文空间)
2015-10-27 14:47
351 查看
引用计数
内核管理器为每个全局对象维护一个引用计数。内核对象有一个对象头结构体_object_header。
_object_header里变量PointerCount和HandleCount,就是引用计数。
内核程序可以通过对象指针直接使用内核对象,
用户程序通过获取的有效HANDLE间接使用内核对象。
WDF框架对象不是全局对象,因此,对象管理器不管理WDF框架对象。
通过句柄方式引用WDF框架对象。
上下文空间
WDF框架里把上下文成为Context Space。框架对象可以拥有若干个上下文空间。
WDF创建上下文空间的方法:
定义一个结构体,保存上下文的内容。
//设备对象的上下文 typedef struct _FDO_CONTEXT { WDFDEVICE WdfDevice; // 设备对象 WDFQUEUE ReadQueue; // 读请求队列 WDFQUEUE WriteQueue; // 写请求队列 WDFQUEUE IoctlQueue; // 控制请求队列 //等等上下文结构体内的变量声明。 }FDO_CONTEXT;
定义一个WDF_OBJECT_ATTRIBUTES 类型的变量,
WDF_OBJECT_ATTRIBUTES attributes;
定义WDFDEVICE类型变量:
WDFDEVICE device;
用FDO_CONTEXT类型初始化attributes的上下文类型:
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, FDO_CONTEXT);
创建设备对象:
WdfDeviceCreate(&DeviceInit, &attributes, &device);
创建设备对象成功后,可以通过WDFDEVICE类型参数变量device获得关联到新创建设备对象的句柄。
定义从句柄获得对象上下文空间的函数:
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(FDO_CONTEXT, FdoGetContext)
从句柄获得设备对象上下文空间:
FDO_CONTEXT *fdoContext; fdoContext = FdoGetContext(device); fdoContext->WdfDevice = device;
这样子,设备对象的创建,设备上下文的创建获取就完成了。
创建设备对象上下文需要先告知上下文空间长度,一时框架根据长度申请内存;然后是定义一个函数,函数的作用是从框架对象里获得上下文空间指针。
上面是通过对对象属性结构体WDF_OBJECT_ATTRIBUTES 的设置实现的。
相关文章推荐
- Spring MVC实现QQ第三方登录 博客分类: spring
- Spring Security教程(11)---- 使用数据库来管理资源
- 正确解读PHP获取时间错误原因
- Spring Security教程(10)---- 自定义登录成功后的处理程序及修改默认验证地址
- Spring Security教程(8)---- 自定义决策管理器及修改权限前缀
- Spring Security教程(9)---- 自定义AccessDeniedHandler
- java ClassLoader类解析-双亲委托机制
- javax.el.PropertyNotFoundException
- Spring Security教程(7)---- 解决UsernameNotFoundException无法被捕获的问题
- C# Process.Start()方法详解
- Spring Security教程(5)---- 国际化配置及UserCache
- Spring Security教程(6)---- 使用数据库管理用户及权限
- JAVA手写含list属性的bean转换成JSON字符串
- Spring Security教程(4)---- 数据库表结构的创建
- Go语言中字符串的查找方法小结
- Spring Security教程(3)---- 自定义登录页面
- C++ friend 用法汇总
- C/C++文件编辑的总结
- PHP中日期时间函数date()用法总结
- Day6.16 C语言简单递归调用:用递归法求N的阶乘