如何在win API的creatnamedpipe方法中为非管理员权限帐户添加安全属性
Posted
技术标签:
【中文标题】如何在win API的creatnamedpipe方法中为非管理员权限帐户添加安全属性【英文标题】:How to add security attributes for non admin rights account in creatnamedpipe method of win API 【发布时间】:2010-08-16 13:20:17 【问题描述】:我在 Windows API 的 CreateNamedPipe() 方法中使用安全属性为 Intptr.Zero 的本地系统帐户上运行的 Windows 服务中创建命名管道。
问题是运行客户端应用程序并调用 CreateFile() 方法的用户帐户无法访问此命名管道。
现在我搜索了网络,发现我们可以更改安全属性,但我无法做到。
【问题讨论】:
【参考方案1】:经过大量的谷歌搜索后,我终于找到了解决问题的方法。我使用了另外两种 win api 方法来设置对用户帐户的访问权限。方法如下
-
SetSecurityDescriptorDacl()
初始化安全描述符()
详细答案可以参考我所指的...http://www.codeproject.com/KB/threads/CodeFX_IPC.aspx?display=Print
感谢您的回答....
【讨论】:
【参考方案2】:我周五自己也遇到了这个问题。如果您使用 System.IO.Pipes 使用 .net 3.5 或更高版本see my question on how to set the permissions.(总而言之,创建一个 PipeSecurity 并为具有读/写权限的用户组添加访问规则。)
【讨论】:
问题是你使用了.net命名管道,而我使用的是win api命名管道...你能提供有关win32 api命名管道安全属性的解决方案吗? 我尝试使用 win32 命名管道来解决我的问题,但不幸的是无法让它工作。然后我找到了 .net 包装器,它起作用了。请问您为什么远离 .net 版本? 我之前使用过 .net 包装器,但在本地系统帐户中运行的 Windows 服务中遇到了断开连接问题。所以我切换到win api'【参考方案3】:你到底有什么不能做的,你尝试过什么?您必须将最后一个参数的参数类型从 IntPtr 更改为 ref SECURITY_ATTRIBUTES 并显式传入安全设置。
在代码中手动创建安全描述符可能会很麻烦。将字符串表示与 ConvertStringSecurityDescriptorToSecurityDescriptor 一起使用可以减轻一点痛苦。
【讨论】:
我是赢得 API 的新手'。您能否提供我制作自定义安全属性的代码,就像我创建一个名为安全属性的委托并将其传递给最后一个参数时给出 CA1901 错误一样。以上是关于如何在win API的creatnamedpipe方法中为非管理员权限帐户添加安全属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 win32API 中更改静态窗口的背景颜色? [复制]
如何在 Ruby 中使用 Win32API 从 DLL 返回字符串