一、现象

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

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

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

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

二、替代方法

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

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

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

---------------------
作者:hambaga
来源:CSDN
原文:https://blog.csdn.net/Kwansy/article/details/109257780
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

[转](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. AHOI2008 聚会
  2. 如何把选择屏幕放到标准屏幕上
  3. ArrayList集合的使用和源码详细分析
  4. 如何使用TypeScript和Webpack Hot Module Replacement构建Apollo GraphQL服务器
  5. 六、Analysis of quicksort
  6. Code Sinppet
  7. Docker安装Mysql8.0,并配置忽略大小写,一句命令搞定
  8. android学习心得之Activity
  9. LeetCode之有效的字母异位词
  10. [转]教你如何在博客园放“可运行代码
  11. c++实现课程管理系统
  12. mysql 导出 客户端_MySQL 导出数据 导入数据
  13. 前端博站项目中遇到的问题总结
  14. python音频处理(持续更新)
  15. VsCode模仿简单百度网页(html)
  16. php版本大屏幕,PHP现场抽奖大屏幕互动系统
  17. Solidity IDE Remix中文版使用手册
  18. 通过Flex布局设置水平垂直居中
  19. CSS盒子模式之四 - 绝对定位和相对定位
  20. 基于Opencv的颜色识别

热门文章

  1. CodeLite开发Gtk 语法检查报错
  2. 3D房地产营销PPT模板
  3. mysql去重汇总_Mysql常用SQL汇总
  4. Disentangling and Unifying Graph Convolutions for Skeleton-Based Action Recognition
  5. 暴雪即将公布《暗黑破坏神3》新职业
  6. pandas dataframe query()
  7. CANOpen协议详解(二):协议具体内容
  8. ACdream 之ACfun 题解
  9. Pascal词法分析器用java实现
  10. 拾方易公众号运营成本低么?