OpenMutex、OpenSemaphore、OpenFileMapping在win7以上系统权限问题

最近在做一个项目,分成NT服务程序与普通用户进程,并使用了映射内存的方式进行进程间数据传递,同时也设有几个进程共用的内存进行参数设置什么的,这样就得用Mutex进行同步。
本来这种问题,是没什么可以说的,也就是先用 CreateMutex 后其它进程再 OpenMutex,其它的就是CreateSemaphore OpenSemaphore
CreateFileMapping OpenFileMapping。
但是问题来了,在XP或XP以下系统是没任何问题的,可是在XP以上系统,微软加强了安全方面的设置。导致程序无法使用。
也就是NT服务程序CreateMutex后,普通进程OpenMutex是打不开的,用GetLastError返回5,出现拒绝访问。

解决办法:
最后,仔细观察各函数发现
CreateSemaphore  CreateFileMapping CreateMutex都有一个参数是 LPSECURITY_ATTRIBUTES 类型,一般我们写上NULL,设系统设置,这就是主要原因,WIN7设置得很高。
我们改成自定义就好了,代码如下
  1.                 SECURITY_DESCRIPTOR sd;
  2.                         ::InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
  3.                         ::SetSecurityDescriptorDacl(&sd, TRUE, (PACL)NULL, FALSE);
  4.                         SECURITY_ATTRIBUTES sa;
  5.                         sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  6.                         sa.bInheritHandle = TRUE;
  7.                         sa.lpSecurityDescriptor = &sd;
复制代码
然后,创建的函数这样写

m_hSemaphore = ::CreateSemaphore( &sa, 0,



问题得到解决

提醒大家,CreateFile 也有这个参数。


原文地址:http://c.panshy.com/thread-13-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值