При работе с правилами доступа, возвращаемыми
GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
, как я могу определить, является ли объект NTAccount, указанный в каждом правиле, учетной записью пользователя или группой?
Обновление:
Я смог решить эту проблему следующим образом . Обратите внимание, что этот код предназначен для возврата Истина
, если NTAccount
является группой, и Ложь
в противном случае или в случае возникновения ошибки во время проверки.
Есть лучший способ сделать это?
Public Function IsGroup(ByVal account As NTAccount) as Boolean
Dim samAccountName as string = account.Value
Dim accountNameParts() As String = samAccountName.Split("\")
If accountNameParts.Count() = 2 Then
Dim principalContext As PrincipalContext
Try
principalContext = New PrincipalContext(ContextType.Domain, accountNameParts(0))
Catch
Try
principalContext = New PrincipalContext(ContextType.Machine, accountNameParts(0))
Catch
principalContext = Nothing
End Try
End Try
If Not principalContext Is Nothing Then
Dim principal As Principal
principal = principal.FindByIdentity(principalContext, _samAccountName)
If Not principal Is Nothing then
return TypeOf principal Is GroupPrincipal
End If
End If
End If
Return False
End Function
Другое обновление:
Вышеупомянутое решение подходит для большинства объектов сервер \ учетная запись, но не работает для объектов локальной группы на серверах EMC Celerra NAS, которые у нас есть. Я пытаюсь использовать вызовы Win API NetUserGetInfo / NetLocalGroupGetInfo, чтобы посмотреть, будет ли это работать, но я не могу заставить их работать должным образом. См. NetUserGetInfo / NetLocalGroupGetInfo, возвращающий ошибку 1722 для получения дополнительных сведений.