как проверить, имеет ли пользователь полные права доступа к общей папке?

#.net #vb.net #.net-3.5 #permissions #wmi

#.net #vb.net #.net-3.5 #разрешения #wmi

Вопрос:

Я использую следующий код, чтобы проверить, существует ли пользователь certin в DACL :

 Dim l_managemantObject As ManagementBaseObject() = CType(securityDescriptor.Properties("DACL").Value, ManagementBaseObject())

For Each mObject As ManagementBaseObject In l_managemantObject
    l_name = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Name").Value.ToString
    If CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value IsNot Nothing Then
       l_domain = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value.ToString()
    End If

    If users.UserName.ToLower = (l_domain amp; "" amp; l_name).ToLower Then
       Return True                
    End If
Next
  

Как вы можете видеть, я могу получить имя пользователя и домен. Но как мне проверить, есть ли у пользователя FullControl разрешения?

Редактировать:

Я провел дальнейшее расследование и обнаружил, что с помощью GetAccessMask я могу получить права доступа к общему ресурсу, принадлежащему пользователю или группе, от имени которых возвращается экземпляр.

Итак, что осталось выяснить: как получить конкретного пользователя AccessMask ?

Маска доступа в MSDN

Ответ №1:

Это было у меня под носом все время, использование GetPropertyValue("AccessMask") в ManagementObject получает уровень разрешений.

Полный метод:

  Dim l_managemantObject As ManagementBaseObject() = CType(securityDescriptor.Properties("DACL").Value, ManagementBaseObject())

    For Each mObject As ManagementBaseObject In l_managemantObject
        l_name = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Name").Value.ToString
        If CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value IsNot Nothing Then
           l_domain = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value.ToString()
        End If

        Dim l_accessMask as UInteger = mObject.GetPropertyValue("AccessMask")

        If users.UserName.ToLower = (l_domain amp; "" amp; l_name).ToLower Then
           if l_accessMask = 2032127 then
              Return True  
           endif                             
        End If
    Next