hBifTs

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

导航

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

Posted on 2004-07-05 23:50  hbiftsaa  阅读(4872)  评论(6编辑  收藏  举报
在前一个文章中,我完成了一个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