hBifTs

山自高兮水自深!當塵霧消散,唯事實留傳.荣辱不惊, 看庭前花开花落; 去留随意, 望天上云展云舒.
posts - 82, comments - 437, trackbacks - 38, articles - 27

内存映射文件与用户权限 :)

Posted on 2004-07-05 23:50 hbifts 阅读(3306) 评论(8)  编辑 收藏 网摘 所属分类: .NET
在前一个文章中,我完成了一个SharedMemory的类.用于使用Win32 的内存映射文件.

写此类的目的在于这几天遇到的一个问题.
一个EXE程序和一个ASP.NET程序,之间要进行数据交换.
1,不想使用.NET Remoting
2,不想使用共享文件的方式(速度太慢了)
3,WebService更麻烦(速度更慢).
4,不知道别的方法了..
所以当时就找使用Win32 API的内存映射的方法.

当我在两个EXE程序中使用此类的时候,一切是正常的.
而且,在ASP.NET中,一个页面用来向此内存映射文件中写数据,另一个页面来读数据.可以正常使用.
但是,一个ASP.NET页面,一个EXE程序,EXE程序创建的内存映射文件,ASP.NET中不能得到(即Open函数返回的结果为0).反过来,也是一样的...
---一个奇怪的问题:(

想了半天,使用API的函数没有错.是不是ASP.NET的用户权限的问题呢??
直接在IIS中修改此ASP.NET工程的登陆帐号为Administrators组的,再运行,还是不行:(

.........

看来是没戏了...
(不可能的啊.别的API函数都可以使用啊.为什么这个不行呢??,,,难道还是权限的问题?)

IIS提供了一个功能,就是帐号模拟.
通过这个功能,我们可以设定运行此ASP.NET页面的帐号信息.
默认情况下面,这个功能是关闭的.
要开启这个功能,只要简单的在Web.Config中增加这个条目:
<identity impersonate="true" />

在这种情况下,用户身份的认证交给IIS来进行。当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR_MACHINENAME)交给ASP.NET应用程序。
当不允许匿名登录时,IIS将认证过的身份标识传递给ASP.NET应用程序。ASP.NET的具体访问权限由该账号的权限决定。

或是,使用这个来直接指定帐号:
<identity impersonate="true" userName="accountname" password="password" />


通过这个方式,我们指定由Administrators组的成员登陆,就可以正常读写其它EXE创建的内存映射文件了:)

注: 参考信息: http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/impersonation.mspx

Feedback

#1楼   回复  引用    

2004-07-06 08:44 by unruledboy(灵感之源)
恭喜,终于完成了!

#2楼   回复  引用    

2004-07-06 13:13 by Ying-Shen
from CreateFileMapping:

If lpAttributes is NULL, the file mapping object gets a default security descriptor. The ACLs in the default security descriptor for a file mapping object come from the primary or impersonation token of the creator

所以你需要在创建FileMapping的时候传入合适的SECURITY_ATTRIBUTE, 传入一个"NULL DACL"可以使你的Filemapping object 让所有用户访问,当然这可能不是很安全。
你也可以制定更详细的权限。
Impersonate admin 的危险性还是比较高的:)

#3楼   回复  引用    

2004-07-06 14:24 by ahnan[未注册用户]
我前一阵子也在研究这个问题,下面这篇文章可能会对你有些帮助:
http://www.codetools.com/aspnet/VbNetMemoryMappedCache.asp
:)

#4楼   回复  引用    

2004-07-07 01:16 by Ying-Shen
呵呵,忘记贴 link了
http://groups.google.co.jp/groups?hl=ja&lr=&ie=UTF-8&threadm=bECWua5TEHA.2988%40cpmsftngxa10.phx.gbl&rnum=1&prev=/groups%3Fq%3D%2522Ying-Shen%2522%2BFileMapping%26ie%3DUTF-8%26hl%3Dja

#5楼   回复  引用    

2005-09-05 17:19 by zwf[未注册用户]
GOOD,我也尝试了一下
不过,我运行有错误:我的环境是Windows 2000 专业版,.net是2003
不知道怎么回事,请老大帮忙解疑!!!!

#6楼[楼主]   回复  引用  查看    

2005-09-05 18:10 by hbifts      
出什么错啊?
错误信息给出来看看撒~



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 21537




相关文章:

相关链接: