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.

questionAnswers(2)

yourAnswerToTheQuestion