一、现象

我在编写驱动中发现,使用全局变量或static变量,它们的地址是会变的。

全局变量每次调用驱动函数都会重新初始化。

我试图在 IRP_MJ_DEVICE_CONTROL 处理函数中定义一个 static 变量,然后发现每次执行函数时,static变量的值都是0.于是我打印了变量的地址,发现确实每次调用都会变。

本文只是介绍了这种现象,背后的原因我不清楚,如果以后弄明白其中原因,我会在此补充。

二、替代方法

调用 IoCreateDevice 创建设备时,第二个参数是设备扩展内存的大小,传一个值进去,就会给设备分配一块非页面内存。

status = IoCreateDevice(gFileSpyDriverObject,                 //DriverObjectsizeof(FILESPY_DEVICE_EXTENSION),     //DeviceExtensionSizeNULL,                                 //DeviceNameDeviceObject->DeviceType,             //DeviceType0,                                    //DeviceCharacteristicsFALSE,                                //Exclusive&newDeviceObject);                    //DeviceObject

接下来在驱动的任何地方,都可以使用这块内存。

(42)驱动中使用全局变量相关推荐

  1. [转](42)驱动中使用全局变量

    一.现象 我在编写驱动中发现,使用全局变量或static变量,它们的地址是会变的. 全局变量每次调用驱动函数都会重新初始化. 我试图在 IRP_MJ_DEVICE_CONTROL 处理函数中定义一个 ...

  2. Linux字符驱动中动态分配设备号与动态生成设备节点

    在编写Linux内核驱动程序的时候,如果不动态生成设备号的话,需要自己手动分配设备号,有可能你分配的设备号会与已有设备号相同而产生冲突.因此推荐自动分配设备号.使用下面的函数: int alloc_c ...

  3. linux 设备驱动阻塞,详解Linux设备驱动中的阻塞与非阻塞

    「阻塞与非阻塞定义」阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作.被挂起的进程进入sleep 状态,被从调度器的运行队列移走,直到等待的条件被满足. 非阻塞 ...

  4. 在JavaScript函数中定义全局变量

    是否可以在JavaScript函数中定义全局变量? 我想在其他函数中使用trailimage变量(在makeObj函数中声明). <html xmlns="http://www.w3. ...

  5. Keyboard驱动中button中断的处理机制

    Keyboard驱动中button中断的处理机制 ********************************LoongEmbedded************************ 作者:Lo ...

  6. linux 两个驱动 竞态,第7章 Linux设备驱动中的并发控制之一(并发与竞态)

    本章导读 Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发的访问会导致竞态(竞争状态). Linux提供了多种解决竞态问题的方式,这些方式适合不同的应用场景. 7.1讲解了并 ...

  7. Windows编程—Windows驱动中定时器的使用

    文章目录 Windows编程-Windows驱动中定时器的使用 前言 代码 简单版 升级版 程序效果 Windows编程-Windows驱动中定时器的使用 前言 定时器操作是应用编程中非常常见的操作, ...

  8. NAT在NDIS中间层驱动中的实现

    1.概要 相信在IPv6的时代到来之前,NAT仍然是解决大多数人上网的主要途径,而且它在企业内网Intranet中也扮演着十分重要的角色. NAT的全称是Network Address Transla ...

  9. 【转帖】NAT在NDIS中间层驱动中的实现

    1.概要     相信在IPv6的时代到来之前,NAT仍然是解决大多数人上网的主要途径,而且它在企业内网Intranet中也扮演着十分重要的角色.     NAT的全称是Network Address ...

最新文章

  1. python面试题及答案-50道Python面试题集锦(附答案)
  2. [转]12种JavaScript MVC框架之比较
  3. 2020-12-14 Python PyCharm新建项目自动添加介绍和utf-8编码
  4. docker修改容器映射的端口_解密 Docker 挂载文件,宿主机修改后容器里文件没有修改...
  5. timm 视觉库中的 create_model 函数详解
  6. C++教程[又能学英文,又能学编程]
  7. java string 加密_java字符串加密解密
  8. 利用ajax,巧妙的sql语句组合,轻松做出不错的树型菜单
  9. MySQL group by语句用法
  10. 2022年3月26日 张量-外积
  11. 如何区分线性系统与时变系统
  12. 昆德拉访谈录(1984年2月)
  13. Python使用超级鹰识别验证码
  14. 当代计算机科学的先驱John Todd逝世
  15. 论项目管理中的量化管理
  16. 线性回归中常见的一些统计学术语(RSE RSS TSS ESS MSE RMSE R2 Pearson's r)
  17. python高精度乘法_洛谷P1919--A*B Problem升级版(NTT优化高精度乘法)
  18. 数据文件检验坏块的利器-dbv
  19. python快速排名seo代码_seo评价机制图(python快速排名seo)
  20. 使用 @Transactional 时常犯的N种错误

热门文章

  1. python引用类 魔法方法_Python 学习笔记 -- 类的魔法方法
  2. python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式
  3. 光栅衍射主极大个数_光栅的分类及常规指标介绍
  4. Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略
  5. 成功解决OpenCV Error: Assertion failed (ssize.width 0 ssize.height 0) in cv::resize, file C:\proj
  6. Matlab:成功解决引用了已清除的变量 handles
  7. springMVC自定义方法属性解析器
  8. CentOS 安装MySQL rpm方式安装
  9. dockerfile centos+jdk+时区设置
  10. 带有权重的服务器SLB的实现