How do I set the owner of a message queue?
Asked Answered
P

1

5

The System.Messaging.MessageQueue class does not provide a way to set ownership of queue. How do I programmatically set the owner of a MSMQ message queue?

Pasley answered 30/6, 2012 at 4:35 Comment(0)
P
6

The short answer is to p/invoke a call to the windows api function 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();
}

A complete class which defines a SetOwner extension method on System.Messaging.MessageQueue can be found on github

Pasley answered 30/6, 2012 at 4:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.