太狗血了,VISTA/WIN7下,不同会话里的进程,怎么共享变量?

dibotiger 2010-06-21 06:17:16
#pragma data_seg("share_data")
DWORD sharecount=0;
#pragma data_seg()
#pragma comment(linker,"/section:share_data,RWS")


唉,快被折腾死了. 上面这个编译设置,
在DLL里设置了一个可共享的数据.
实现了不同进程间对DLL的sharecount的变量的共享.

在2K/XP/2003下,不论是服务(svchost.exe加载DLL)进程,还是用户进程, 这种机制都不会有问题,
sharecount这个变量皆能被不同的进程访问和改写.


本来,这是一个很有效的机制, 可到了VISTA/WIN7, 由于服务和用户进程SESSION的隔离,
居然连共享变量都不能互相访问和控制了? 我操,微软, 你到底要干嘛?


请教大家,VISTA/WIN7下, 不同会话里的进程,怎么共享变量?
...全文
255 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
unituniverse2 2010-06-22
  • 打赏
  • 举报
回复
因为安全问题
mcaok 2010-06-22
  • 打赏
  • 举报
回复
win7下共享变量的方式很多。管道就可以。
jackson35296 2010-06-21
  • 打赏
  • 举报
回复
为了安全。
CreateFileMapping应该可以吧,这个函数是创建了一个内核对象
jameshooo 2010-06-21
  • 打赏
  • 举报
回复
这就错怪微软了,不同SESSION下这些东东全部是隔离的,包括2000/XP/2003,只不过碰巧它们的服务和普通桌面帐户都在同一个SESSION里面,VISTA开始桌面和服务已经分开到不同的SESSION里了,问题才呈现出来。共享内存也是隔离的,共享节的本质还是共享内存。

可以使用SOCKET方式通信,或者使用管道,不过管道必须由低权限(比如服务)进程创建,高权限进程打开管道,反过来不灵。
UUcall007 2010-06-21
  • 打赏
  • 举报
回复
没用过win7和vista,弱弱的问下 用内存映射行吗?CreateFileMapping

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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