问:我在服务器上用 createfilemapping 创建了一段共享内存。让这个exe始终在服务器上跑。
同时,别的用户在客户端用ie访问服务器,将要查询的数据通过c#制作的网页提交上来,服务器得到网页参数后,建立一个com对象访问上一个exe的共享内存,然后将在共享内存中的查询结果返回给客户。 【相关文章:Eclipse 3.0正式发布】 【扩展阅读:m-learning: 未来的学习模式】 问题是现在这个com无法用openmapping访问exe的共享内存,提示 访问拒绝 。而我在服务器上随便建议一个工程编译成exe,文件就可访问这段共享内存!!为何在网页中就不成?com难道要有什么 权限 设置.两个进程之间的权限整合方法是什么?怎么用dacl? 【扩展信息:Notification服务的一种实现】
我用atl写了一个service,在这个service中,我创建了一块共享内存(memory mapping)与一个mutex
然后我在另一个普通程序中去访问这块共享内存与mutex,但是,我用createmutex打开mutex失败,getlasterror()返回5,含义是访问被拒绝!! 同样,我在用mapviewoffile时,也得到同样的错误!!!!!!我已经知道原因是因为在创建共享内存与mutext时,security_attributes我设为null!!!
但是我没有解决的方法 希望各位大虾帮帮忙! 答:检查服务运行所使用的用户的权限。通常,为了安全起见,服务进程的拥有者权限是很低的。为了让服务进程访问对象,你需要在创建共享内存时指定一个更加广泛的的安全描述符,增加一个新的访问控制项目(ace)给你的asp进程的拥有者。默认的访问控制列表(acl)只包含创建者与管理员组。下列代码创建一个所有用户都可以访问的安全描述符。你可以在创建共享内存时使用这个安全描述符。
csharerestrictedsd sharerestrictedsd; hmapfile = createfilemapping(invalid_handle_value, // current file handle. sharerestrictedsd.getsa(), // default security. // null, page_readwrite, // read/write permission. ... 下一页