Como verifico se um objeto NTAccount representa um grupo ou um usuário?
Ao trabalhar com as regras de acesso retornadas por
GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
como posso saber se o objeto NTAccount mencionado em cada regra é uma conta de usuário ou um grupo?
Atualizar:
Consegui resolver isso da seguinte maneira. Observe que a intenção deste código é retornarTrue
se oNTAccount
é um grupo eFalse
caso contrário, ou se ocorrer um erro durante a verificação.
Existe uma maneira melhor de fazer isso?
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
Outra atualização:
A solução acima foi adequada para a maioria dos objetos server \ account, mas falha nos objetos de grupo local nos servidores EMC Celerra NAS que temos. Estou tentando usar as chamadas da API NetUserGetInfo / NetLocalGroupGetInfo Win para ver se isso funcionará, mas não consigo fazê-las funcionar corretamente. VejoNetUserGetInfo / NetLocalGroupGetInfo retornando erro 1722 para mais detalhes.