- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个开源 .NET 程序集 ( WinSCP .NET assembly ),它生成一个 native (C++) 应用程序并通过事件和文件映射对象与其通信。
程序集使用 Process
类生成应用程序,没有特殊设置。程序集创建一些事件(使用 EventWaitHandle
)和文件映射(使用 PInvoked CreateFileMapping
),应用程序使用 OpenEvent
“打开”这些和 OpenFileMapping
。
在大多数情况下它工作正常。但现在我有一个用户在 Windows Server 2008 R2 64 位上使用来自 ASPX 应用程序的程序集。
在他的例子中,OpenEvent
和 OpenFileMapping
都返回 NULL
而 GetLastError
返回 ERROR_ACCESS_DENIED
。
我已尝试通过显式授予当前用户对事件对象和应用程序代码的必要权限来改进汇编代码,使其仅需要真正需要的访问权限(而不是原始的 EVENT_ALL_ACCESS
) Microsoft Docs example .它没有帮助。所以我什至懒得为文件映射对象尝试相同的方法。
创建事件的 C# 代码是:
EventWaitHandleSecurity security = new EventWaitHandleSecurity();
string user = Environment.UserDomainName + "\\" + Environment.UserName;
EventWaitHandleAccessRule rule;
rule =
new EventWaitHandleAccessRule(
user, EventWaitHandleRights.Synchronize | EventWaitHandleRights.Modify,
AccessControlType.Allow);
security.AddAccessRule(rule);
rule =
new EventWaitHandleAccessRule(
user, EventWaitHandleRights.ChangePermissions, AccessControlType.Deny);
security.AddAccessRule(rule);
new EventWaitHandle(
false, EventResetMode.AutoReset, name, out createdNew, security);
“打开”事件的 C++ 代码是:
OpenEvent(EVENT_MODIFY_STATE, false, name);
(对于其他事件,访问级别为 SYNCHRONIZE
,具体取决于需要)。
我还尝试将 Global\
前缀添加到对象名称。正如预期的那样,这并没有解决问题。
有谁知道是什么导致了 OpenEvent
(或 CreateFileMapping
)中的“拒绝访问”错误?
最佳答案
我的猜测是该事件是由匿名用户或登录用户创建的,具体取决于网站的设置方式。但是子流程正在与基本流程用户一起启动。这可以通过使用进程监视器并查看事件句柄的 acl 来查看创建者是谁来检查。然后查看子进程,看它是以谁的身份运行的。
如果是这种情况,那么您可以更新事件的 acl 以包括基本流程。除此之外,您可能仍需要使用“全局”作为前缀,以确保可以跨用户边界使用该事件。
关于c# - OpenEvent/OpenFileMapping 失败并显示 ERROR_ACCESS_DENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019150/
我正在开发一个开源 .NET 程序集 ( WinSCP .NET assembly ),它生成一个 native (C++) 应用程序并通过事件和文件映射对象与其通信。 程序集使用 Process 类
我正在构建 Windows UMDF 2.0 驱动程序,当我调用 OpenEvent 时出现错误 2。任何帮助都将非常有用。下面是我的代码 HANDLE userEvent = OpenEvent(E
我想在 openEvent 上调用函数,但它不起作用。我正在使用 this jquery plugin . 我的代码如下: $("#verified_icon").popover({
我是一名优秀的程序员,十分优秀!