关于多进程dll中全局变量问题

最近在写一个驱动,驱动要扩展一些接口给应用程序调用,结果中用到了一些全局变量。
那么这样系统会加载驱动一次,应用程序也会加载一次,那么驱动中的全局变量如何共享呢?
我试过了#pragma data_seg,一点效果都没有。共享内存又用不了。

不知道还有什么方法实现数据共享吗?
...全文
273 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohayou 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
wince 5 的网卡驱动。

共享内存用不了是因为驱动加载比较早,系统一些API可能还用不了。
[/Quote]
http://blog.csdn.net/lovesunshine2008/article/details/4041755 这里面说的方法能不能用?
  • 打赏
  • 举报
回复
wince 5 的网卡驱动。

共享内存用不了是因为驱动加载比较早,系统一些API可能还用不了。
Saleayas 2012-04-13
  • 打赏
  • 举报
回复
这是什么驱动哦!
嘿嘿!
ohayou 2012-04-13
  • 打赏
  • 举报
回复
你在内核里就算#pragma data_seg("Shared") 地址空间也是内核的 直接写肯定出问题
你说共享内存用不了是啥意思?用共享内存是多么标准的内核用户通信方式啊
Lactoferrin 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
  • 打赏
  • 举报
回复
内核模式驱动程序?
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

#pragram data_seg("Shared")
共享硬盘上的文件可以不?
[/Quote]

上面说了,没有效果。
evencoming 2012-04-11
  • 打赏
  • 举报
回复
#pragram data_seg("Shared")
共享硬盘上的文件可以不?

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧