#.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
?
Ответ №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