阅读:1693回复:6
驱动中的全局的static变量
hi,各位:
当多个相同的设备插入到系统中,系统会加载多份驱动的副本呢还是只加载一次(以后插入的设备irp都指向第一次加载的那个)? 如果是加载多次的副本,而且在一个驱动中使用了全局的静态变量,那么这个全局变量在不同的副本之间共享呢还是各自使用? |
|
沙发#
发布于:2004-01-16 16:22
>> 当多个相同的设备插入到系统中,系统会加载多份驱动的副本
>> 呢还是只加载一次 只加载一次. >> 以后插入的设备irp都指向第一次加载的那个? 各是各的,这你得搞清楚DriverObject和DeviceObject的关系先. >> 如果是加载多次的副本,而且在一个驱动中使用了全局的静态 >> 变量,那么这个全局变量在不同的副本之间共享呢还是各自使 >> 用? :):):) |
|
|
板凳#
发布于:2004-01-16 16:37
其实我也直到driverobject & deviceobject之间的关系。我的意思是说,在一个消息处理函数中,当一个设备的消息还没有返回的时候,可能此时其它相同的设备也进入到了这个消息处理函数中,如果不是加载多个副本,那么在这个消息处理函数中定义的局部变量不是被后来的设备消息给改变了吗!
注意,我指的局部变量不是deviceextension中的。我明白通过deviceextension可以给每个deviceobject定义各自的变量。我这里指的是函数内部的变量。 |
|
地板#
发布于:2004-01-16 18:47
忽然访问不了服务器,不知道怎么回事,现在好了。
>> 其实我也直到driverobject & deviceobject之间的关系。 >> 我的意思是说,在一个消息处理函数中,当一个设备的消 >> 息还没有返回的时候,可能此时其它相同的设备也进入到 >> 了这个消息处理函数中,如果不是加载多个副本,那么在 >> 这个消息处理函数中定义的局部变量不是被后来的设备消 >> 息给改变了吗! 如果你定义的是static变量,这是当然的(还记得当年DOS的“不可重入”吗?:):):))。 >> 注意,我指的局部变量不是deviceextension中的。我明 >> 白通过deviceextension可以给每个deviceobject定义各 >> 自的变量。我这里指的是函数内部的变量。 当然,如果是extension的问题,我估计你也不会拿来问了。:):):) |
|
|
地下室#
发布于:2004-01-18 09:22
Hi,cool-net:
那如果不是static变量,而是普通的局部变量呢?会发生什么情况? |
|
5楼#
发布于:2004-01-18 12:52
普通的局部变量?
随着函数堆栈的清除,已经不复存在了。 :D |
|
6楼#
发布于:2004-01-18 14:27
普通的局部变量使用栈,而且不同的线程使用不同的栈,所以在这种情况下你不必担心重入问题.
|
|
|