UnauthorizedAccessException上MemoryMappedFile在C#4(U

2019-06-27 14:59发布

我想玩弄使用MemoryMappedFile访问现有二进制文件。 如果这甚至在所有可能的还是我一个疯狂的人?

该想法是将现有的二进制文件直接映射到存储器,用于一些优选更高速度的操作。 或ATLEAST看到这些东西是如何工作的。

        using System.IO.MemoryMappedFiles;


        System.IO.FileInfo fi = new System.IO.FileInfo(@"C:\testparsercap.pcap");
        MemoryMappedFileSecurity sec = new MemoryMappedFileSecurity();
        System.IO.FileStream file = fi.Open(System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite);
        MemoryMappedFile mf = MemoryMappedFile.CreateFromFile(file, "testpcap", fi.Length, MemoryMappedFileAccess.Read, sec, System.IO.HandleInheritability.Inheritable, true);
        MemoryMappedViewAccessor FileMapView = mf.CreateViewAccessor();
        PcapHeader head = new PcapHeader();
        FileMapView.Read<PcapHeader>(0, out head);

我得到System.UnauthorizedAccessException的是未处理(消息=对路径的访问被拒绝。)在mf.CreateViewAccessor()线。

我不认为这是文件的权限,因为我正在为一个不错的不安全管理员用户,有没有打开任何其它程序可能对文件的读锁。 这是在Vista UAC的禁用。

如果这是根本不可能的,我错过了一些文档中,请让我知道。 我几乎找不到在.NET 4.0的所有引用这个功能什么

谢谢!

Answer 1:

我知道这是一个老问题,但我只是碰到了同样的错误,并能解决这个问题。

虽然我是开MemoryMappedFile为只读(MemoryMappedFileRights.Read)有你在,我还需要创建为只读以及视图访问:

var view = mmf.CreateViewAccessor(offset, size, MemoryMappedFileAccess.Read);

然后它的工作。 希望这可以帮助别人。



Answer 2:

如果大小比文件长度多,它给未经授权的访问异常。 因为我们正试图访问内存超出文件的限制。

var view = mmf.CreateViewAccessor(offset, size, MemoryMappedFileAccess.Read);


Answer 3:

这是很难说什么可能会出错。 由于在MSDN网站上没有文档还,最好的办法就是从Sysinternals的安装FILEMON,看看这是为什么发生。

或者,您可以将本机调试(如WinDBG的)的过程,并穿上MapViewOfFile和其他重载一个断点。 然后明白为什么调用失败。



Answer 4:

从MemoryMappedFile的情况下使用.CreateViewStream()从我的代码删除错误。 我无法得到.CreateViewAcccessor()工作瓦特/拒绝访问错误



文章来源: UnauthorizedAccessException on MemoryMappedFile in C# 4