sam_h
驱动牛犊
驱动牛犊
  • 注册日期2001-04-19
  • 最后登录2012-01-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1693回复:6

驱动中的全局的static变量

楼主#
更多 发布于:2004-01-16 15:43
hi,各位:

当多个相同的设备插入到系统中,系统会加载多份驱动的副本呢还是只加载一次(以后插入的设备irp都指向第一次加载的那个)?

如果是加载多次的副本,而且在一个驱动中使用了全局的静态变量,那么这个全局变量在不同的副本之间共享呢还是各自使用?
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-16 16:22
>> 当多个相同的设备插入到系统中,系统会加载多份驱动的副本
>> 呢还是只加载一次
只加载一次.

>> 以后插入的设备irp都指向第一次加载的那个?
各是各的,这你得搞清楚DriverObject和DeviceObject的关系先.

>> 如果是加载多次的副本,而且在一个驱动中使用了全局的静态
>> 变量,那么这个全局变量在不同的副本之间共享呢还是各自使
>> 用?
:):):)
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
sam_h
驱动牛犊
驱动牛犊
  • 注册日期2001-04-19
  • 最后登录2012-01-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-16 16:37
其实我也直到driverobject & deviceobject之间的关系。我的意思是说,在一个消息处理函数中,当一个设备的消息还没有返回的时候,可能此时其它相同的设备也进入到了这个消息处理函数中,如果不是加载多个副本,那么在这个消息处理函数中定义的局部变量不是被后来的设备消息给改变了吗!

注意,我指的局部变量不是deviceextension中的。我明白通过deviceextension可以给每个deviceobject定义各自的变量。我这里指的是函数内部的变量。
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-16 18:47
忽然访问不了服务器,不知道怎么回事,现在好了。

>> 其实我也直到driverobject & deviceobject之间的关系。
>> 我的意思是说,在一个消息处理函数中,当一个设备的消
>> 息还没有返回的时候,可能此时其它相同的设备也进入到
>> 了这个消息处理函数中,如果不是加载多个副本,那么在
>> 这个消息处理函数中定义的局部变量不是被后来的设备消
>> 息给改变了吗!
如果你定义的是static变量,这是当然的(还记得当年DOS的“不可重入”吗?:):):))。

>> 注意,我指的局部变量不是deviceextension中的。我明
>> 白通过deviceextension可以给每个deviceobject定义各
>> 自的变量。我这里指的是函数内部的变量。
当然,如果是extension的问题,我估计你也不会拿来问了。:):):)

有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
sam_h
驱动牛犊
驱动牛犊
  • 注册日期2001-04-19
  • 最后登录2012-01-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-18 09:22
Hi,cool-net:

那如果不是static变量,而是普通的局部变量呢?会发生什么情况?
RED_spring
驱动中牛
驱动中牛
  • 注册日期2002-07-28
  • 最后登录2016-11-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望19点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-01-18 12:52
普通的局部变量?

随着函数堆栈的清除,已经不复存在了。 :D
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-18 14:27
普通的局部变量使用栈,而且不同的线程使用不同的栈,所以在这种情况下你不必担心重入问题.
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
游客

返回顶部