社区
C语言
帖子详情
关于多进程dll中全局变量问题
别以为你站在珠峰就能看到全世界
2012-04-11 04:44:34
最近在写一个驱动,驱动要扩展一些接口给应用程序调用,结果中用到了一些全局变量。
那么这样系统会加载驱动一次,应用程序也会加载一次,那么驱动中的全局变量如何共享呢?
我试过了#pragma data_seg,一点效果都没有。共享内存又用不了。
不知道还有什么方法实现数据共享吗?
...全文
318
9
打赏
收藏
关于多进程dll中全局变量问题
最近在写一个驱动,驱动要扩展一些接口给应用程序调用,结果中用到了一些全局变量。 那么这样系统会加载驱动一次,应用程序也会加载一次,那么驱动中的全局变量如何共享呢? 我试过了#pragma data_seg,一点效果都没有。共享内存又用不了。 不知道还有什么方法实现数据共享吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ohayou
2012-04-16
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
wince 5 的网卡驱动。
共享内存用不了是因为驱动加载比较早,系统一些API可能还用不了。
[/Quote]
http://blog.csdn.net/lovesunshine2008/article/details/4041755 这里面说的方法能不能用?
别以为你站在珠峰就能看到全世界
2012-04-14
打赏
举报
回复
wince 5 的网卡驱动。
共享内存用不了是因为驱动加载比较早,系统一些API可能还用不了。
Saleayas
2012-04-13
打赏
举报
回复
这是什么驱动哦!
嘿嘿!
ohayou
2012-04-13
打赏
举报
回复
你在内核里就算#pragma data_seg("Shared") 地址空间也是内核的 直接写肯定出问题
你说共享内存用不了是啥意思?用共享内存是多么标准的内核用户通信方式啊
Lactoferrin
2012-04-13
打赏
举报
回复
这些变量是在内核模式驱动程序里面?
别以为你站在珠峰就能看到全世界
2012-04-13
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
内核模式驱动程序?
[/Quote]
是的,后来用#pragram data_seg发现可以了,不过有些变量发现好像是只读的
#pragma data_seg("Shared")
PAX_ADAPTER g_Adapter = 0;
BOOL g_isReady = FALSE;
HANDLE g_hRxEvent = NULL;
HANDLE g_hTxEvent = NULL;
HANDLE g_hThread = NULL;
char g_TxBuf[1500] = {0};
int g_TxLen = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:Shared,RWS")
g_Adapter是网卡驱动的NDIS_HANDLE,实际上是一个结构体指针。我发现他的地址在两个进程是一样的,不过第二个进程中无法写操作。一写驱动就Data Abort。
g_hTxEvent 是有名字的事件,再第二个进程中如果不再CreateEvent一下,虽然g_hTxEvent有值,但是使用达不到效果,无法触发第一个进程的等待。
Lactoferrin
2012-04-11
打赏
举报
回复
内核模式驱动程序?
别以为你站在珠峰就能看到全世界
2012-04-11
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
#pragram data_seg("Shared")
共享硬盘上的文件可以不?
[/Quote]
上面说了,没有效果。
evencoming
2012-04-11
打赏
举报
回复
#pragram data_seg("Shared")
共享硬盘上的文件可以不?
浅析loadlibrary时
dll
中
的
全局变量
本文详细解析了自定义
DLL
与系统
DLL
在
多进程
和多线程环境下的加载机制。对于自定义
DLL
,在
多进程
中
,每个进程拥有独立的数据段;而在同一进程的多线程
中
,
全局变量
共享同一内存地址,需注意同步
问题
。对于系统
DLL
,则所有进程共享相同的
全局变量
。
使
DLL
在系统
中
仅有一个实例
本文探讨了确保动态链接库(
DLL
)实例唯一性的多种方法,包括使用
全局变量
、共享数据段、命名内核对象及GUID命名的内核对象,旨在解决
多进程
调用同一
DLL
时的资源共享
问题
。
DLL
内存分配与共享
本文探讨了
DLL
在进程
中
的作用及其与调用进程间内存管理的
问题
,特别是针对CRT库的静态与动态链接的不同影响进行了深入分析。文章还讨论了
DLL
中
的
全局变量
如何在
多进程
环境
中
正确处理。
检测程序运行实例个数
本文详细介绍了如何在C++应用
中
使用共享数据段和互斥量来实现跨进程的数据共享与互斥运行。通过在.cpp文件
中
指定数据段属性,以及利用互斥体来检查和控制进程间的运行状态,文章提供了在
DLL
和
多进程
环境
中
共享
全局变量
的实用方法。重点解释了如何确保
全局变量
在不同进程间的正确访问与互斥,以避免数据竞争
问题
。
dll
中
的
全局变量
本文详细探讨了自定义
DLL
与系统
DLL
在
多进程
和多线程环境下的加载机制。在
多进程
中
,每个进程的
DLL
数据段是独立的,
全局变量
互不影响。而在同一进程内的多线程
中
,多次LoadLibrary加载
DLL
只会增加引用计数,
全局变量
在同一地址,需要同步控制。系统
DLL
则在高地址空间,所有进程共享相同的
全局变量
。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章