【发布时间】:2012-07-01 13:18:16
【问题描述】:
System.Messaging.MessageQueue 类不提供设置队列所有权的方法。如何以编程方式设置 MSMQ 消息队列的所有者?
【问题讨论】:
System.Messaging.MessageQueue 类不提供设置队列所有权的方法。如何以编程方式设置 MSMQ 消息队列的所有者?
【问题讨论】:
简短的回答是 p/invoke 调用 windows api 函数MQSetQueueSecurity
void SetOwner(MessageQueue queue, byte[] sid, bool ownerDefaulted = false)
{
var securityDescriptor = new Win32.SECURITY_DESCRIPTOR();
if (!Win32.InitializeSecurityDescriptor(securityDescriptor, Win32.SECURITY_DESCRIPTOR_REVISION))
throw new Win32Exception();
if (!Win32.SetSecurityDescriptorOwner(securityDescriptor, sid, ownerDefaulted))
throw new Win32Exception();
if (Win32.MQSetQueueSecurity(queue.FormatName, Win32.OWNER_SECURITY_INFORMATION, securityDescriptor))
throw new Win32Exception();
}
在System.Messaging.MessageQueue 上定义SetOwner 扩展方法的完整类可以在github 上找到
【讨论】: