NT Service程序能与其它程序利用一个Mutex同步吗?

Mr_Ldh 2004-09-09 04:23:33
如题。我试了一下,好像不行。
在NT Service(随系统同时启动)程序中:
hMutexReadWrite=CreateMutex(NULL,FALSE,strMutex);
...

在另一个程序中:
hMutexReadWrite2=CreateMutex(NULL,FALSE,strMutex);
WaitForSingleObject(hMutexReadWrite2,INFINITE);
之后,在执行ReleaseMutex(hMutexReadWrite2)之前,NT Service程序中仍然能执行
WaitForSingleObject(hMutexReadWrite,INFINITE);后面的语句。

有谁知道为什么?多谢了!

另外在NT Service中用GlobalAddAtom()建立的ATOM,在其它程序中GlobalFindAtom()返回0。就是找不到,为什么?

另外,如果NT Service程序如果不随系统同时启动,改用手工启动就不存在上述问题。
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Ldh 2004-09-12
  • 打赏
  • 举报
回复
提高程序权限太麻烦了。我已经通过其它方法实现了,谢谢各位。
horris 2004-09-10
  • 打赏
  • 举报
回复
主要问题出在CreateMutex的第一个参数上。Service的进程的Token是Service的登录帐户的,而你的客户端程序一般是运行在另一个帐户的。Mutex是有自已的访问权限的,也就是有自已的DACL,就象NTFS文件系统的权限设置一样。而你的Service的客户程序没有存取Service产生的Mutex的权限。你必须在Service的CreateMutext的第一个参数上指定这个DACL,呵呵,很麻烦的,你要生成一个指定哪些帐户能访问的DACL,不过指定一个NULL DACL就可以允许Everyone访问,不过这是很不安全的。况且,Service是做为后台程序运行的,用Mutex迫使它阻塞会造成其他Service客户不能访问服务。另外,SCM对每个ControlService请求的响应时间是有要求的。
oyljerry 2004-09-10
  • 打赏
  • 举报
回复
看是不是用户权限的问题
Mr_Ldh 2004-09-09
  • 打赏
  • 举报
回复
如bob640()所说,另一个程序执行CreateMutex()或OpenMutex()时权限不够。那么如何提高普通程序的权限级别呀?
flyelf 2004-09-09
  • 打赏
  • 举报
回复
gz
bob640 2004-09-09
  • 打赏
  • 举报
回复
检查另一个程序打开mutex时是否打开了,照道理来说,应该是打不开的.服务跟一般程序的安全级别不一样,先要将普通程序的权限级别升上去(可以看下打开mutex这个函数的安全参数的相关帮助),呵呵,具体函数记不太清楚了.
唉,没在这一行混好多年了
rwdx 2004-09-09
  • 打赏
  • 举报
回复
gz

15,471

社区成员

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

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