从低完整性进程获取对 MemoryMappedFile 的访问

2023-12-05

我试图在中等完整性进程上创建 MemoryMappedFile,然后在低完整性子进程上打开相同的文件,并将此共享内存用于 IPC。没有真正的磁盘文件(使用MemoryMappedFile.CreateNew)。

我的问题是低完整性进程无法打开共享内存,抛出以下错误:“System.UnauthorizedAccessException:对路径的访问被拒绝。”。鉴于我想要从低完整性进程进行写访问,我对这种情况并不感到惊讶,但如何授予它访问权限?

这是我的代码:


中等完整性流程:

MemoryMappedFileSecurity security = new MemoryMappedFileSecurity();
var file = MemoryMappedFile.CreateNew("test", 4096, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.None, security, HandleInheritability.Inheritable);

var view = file.CreateViewAccessor();
view.Write(0, true);

低完整性过程:

try
{
    MemoryMappedFile file = MemoryMappedFile.OpenExisting("test", MemoryMappedFileRights.ReadWrite);
    var view = file.CreateViewAccessor();
    var v = view.ReadBoolean(0);
    Log.Info("MAPPED: " + v);
}
catch (Exception e)
{
    Log.Info("Error: " + e);
}

如果两个进程都以中等完整性运行,则工作正常。看完之后this,我尝试在中等完整性进程上设置 SDDL 字符串,如下所示:

security.SetSecurityDescriptorSddlForm("S:(ML;;NW;;;LW)");

但这给了我另一个异常,这次是在创建内存映射文件时:“System.IO.IOException:客户端不持有所需的权限。”。无论如何,我不太确定这是正确的方法,我不太清楚 Win32/C++ 示例如何转换为 C#...

有人知道更多关于这件事吗?


好的,找到了可行的解决方案。有两个问题:

  1. 将空的 MemoryMappedFileSecurity 对象传递给 MemoryMappedFile.CreateNew() 会使映射内存甚至对于同一进程也无法访问。这解释了我在评论中的错误(“System.UnauthorizedAccessException:对路径的访问被拒绝”)。

  2. 我实际上无法得到security.SetSecurityDescriptorSddlForm工作(尽管谷歌透露了其他几种尝试,但没有一个对我有用)。相反,我使用了这个解决方案:https://stackoverflow.com/a/14424623/5105846。据我所知,它做同样的事情,但使用 PInvoke 代替。所以我刚刚打电话InterProcessSecurity.SetLowIntegrityLevel(file.SafeMemoryMappedFileHandle),并且它可以从低完整性子进程访问。成功!

这不是完美的解决方案,但我现在只需要一个可行的解决方案。感谢哈利的帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从低完整性进程获取对 MemoryMappedFile 的访问 的相关文章

  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 私有模板函数

    我有一堂课 C h class C private template
  • 有适用于 Windows 的 Bonjour SDK 吗?

    我想知道如何在 Windows 上实现 bonjour 以便我可以在 Windows 上设置服务器并使用 iphone 客户端 中的 bonjour 服务访问 Windows 服务器 中的文件 谁能告诉我我们是否有适用于 Windows 的
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • 使用密码配置跳转/堡垒主机

    我有三个主机 我的本地 ansible 控制器 跳跃 堡垒主机 jump host 对于我的基础设施 我想要针对其运行 ansible 任务的目标主机 target host 只能通过以下方式访问jump host 作为我的库存文件的一部分
  • 通过 Microsoft Graph API 创建 Excel 文件

    有谁知道如何通过 MS Graph API 创建 excel 和 ppt 文件 我们正在尝试利用 MS Graph API 通过单击按钮来创建 word excel ppt 文件 虽然我们找到了如何创建 word 文件 但即使 API 成功
  • Java Final——一个永恒的谜

    suggestBox addKeyUpHandler new KeyUpHandler public void onKeyUp KeyUpEvent event if event getNativeKeyCode KeyCodes KEY
  • 找不到列“dbo”或用户定义函数或聚合“dbo.FN_Split”,或者名称不明确

    我有以下函数 它接受 CSV 和分隔符并将其拆分 ALTER FUNCTION dbo FN Split String varchar max Delimiter char 1 returns temptable TABLE orderId
  • :app:transformClassesWithMultidexlistForDebug 失败

    我已经尝试过以下链接 http developer android com intl es tools building multidex html 意外的顶级异常 com android dex DexException 多个 dex 文
  • 使用 ssh 端口转发运行 Erlang Observer

    我有一个远程 Erlang 节点和本地开发人员的 PC 我想启动本地节点 email protected 启动观察者 调用c nl 1和其他调试操作 我写了这个 bin sh export ERL EPMD PORT 43690 PORT
  • 在 Cocoa 应用程序中每晚使用 WebKit.framework?

    我目前正在 Cocoa 应用程序中使用 WebView 我还想在 webview 特别是 FileReader 中使用 HTML5 文件 API FileReader 在最新版本的 WebKit 中不受支持 但在 WebKit nightl
  • 如何在jsp中对url参数进行加密/编码

    我想对一个URL变量进行加密 这样用户在jsp中传递的信息就无法看到或修改 这是一个示例 URL localhost somewebpage name jsp id 1234 tname Employee March 2013 这里我想对参
  • Spring MVC - HTTP 状态 500 - Servlet loginDispacher 的 Servlet.init() 引发异常

    我做了一个简单的程序 但出现以下错误 我正在使用 Eclipse Kelper 和 Tomcat 7 0 尝试了很多事情 但没有任何对我有用 HTTP 状态 500 servlet loginDispacher 的 Servlet init
  • 根据另一个数据帧的多个列条件创建列

    假设我有两个数据框 条件和数据 import pandas as pd conditions pd DataFrame class 1 2 3 4 4 5 5 4 4 5 5 5 primary lower 0 0 0 160 160 16
  • Python SqlAlchemy - AttributeError:映射器

    基于我的模型 from sqlalchemy ext declarative import declarative base from sqlalchemy import Column Integer String ForeignKey f
  • iOS:如何查询WiFi状态

    是否可以以编程方式查询 iOS 上的 WiFi 状态 启用 禁用 当启用 WiFi 并且设备未连接到任何网络时 查询应返回 true EDIT 我知道提供的功能Reachability类 据我了解 它无法识别 WIFI 的已启用但未连接状态
  • while 循环 PHP get_result 不起作用

    我正在尝试使用 MySQl 准备好的语句从数据库中获取行并获取结果 然而这不起作用 请有人能看到我哪里出了问题吗 我已经尝试了几个小时的解决方案 但无法使其发挥作用 该页面只是不加载 就好像查询失败一样 tag trim GET tag s
  • 部署后在django中使用scipy.stats.stats

    我正在为一个严重依赖 scipy stats stats scipy 版本 0 9 0 的包创建一个由 django 支持的 1 3 接口 称为ovl 在早期开发阶段 使用 djangos 自己的开发服务器 这没有问题 使用apache d
  • 带有 WSDL for R 的 SOAP 客户端

    我正在尝试使用 SSOAP 包为 R 的 SOAP 客户端编写代码 这是我最初的代码 wsdl lt getURL http sistemas cvm gov br webservices Sistemas SCW CDocs WsDown
  • 如何在 WinForms 中绘制形状[重复]

    这个问题在这里已经有答案了 我正在尝试编写类似绘画的程序 您可以通过选择所需的形状来绘制填充形状 单击图片框并拖动鼠标以获得所需的尺寸 但THIS当我拖动时可能会发生 当我使用refresh 之前绘制的形状会自行删除 我应该怎么做才能绘制填
  • 无法创建圆角对话框(Android-Eclipse)

    我正在尝试为我的应用程序的对话框制作自定义对话框形状 我已经搜索这个主题几个小时了 但我找到的解决方案对我不起作用 这就是为什么我向你询问我自己的问题 我想要一个带有圆角并显示标题的对话框 然后是一个带有一些文本的 ScrollView 唯
  • Excel VBA For-Next 循环将数据从一个 WB 提取到另一个 WB

    我正在开发一个 for 循环 该循环根据第 12 列中等于 Airfare 的字符串提取整行数据 这个想法是复制第 12 列 EXPENSE TYPE 是机票的数据行并将其粘贴到第二个工作簿中 我的代码 如下 未正确循环所有 120 行数据
  • 查找忽略重叠的总分钟数(将基于光标的答案转换为 CTE)

    有一个现有问题该问题询问如何查找多个日期范围内有多少分钟 忽略重叠 给出的示例数据是 userID 不是特别相关 Available ID userID availStart availEnd 1 456 2012 11 19 16 00
  • 从低完整性进程获取对 MemoryMappedFile 的访问

    我试图在中等完整性进程上创建 MemoryMappedFile 然后在低完整性子进程上打开相同的文件 并将此共享内存用于 IPC 没有真正的磁盘文件 使用MemoryMappedFile CreateNew 我的问题是低完整性进程无法打开共