5

System.Messaging.MessageQueue クラスは、キューの所有権を設定する方法を提供しません。MSMQ メッセージ キューの所有者をプログラムで設定するにはどうすればよいですか?

4

1 に答える 1

6

簡単な答えは、Windows API 関数への呼び出しを p/invoke することです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();
}

SetOwner拡張メソッドを定義する完全なクラスは、githubSystem.Messaging.MessageQueueにあります。

于 2012-06-30T04:35:43.850 に答える