Bei der Arbeit mit den Zugriffsregeln, die von
GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
Wie kann ich feststellen, ob das NTAccount-Objekt, auf das in jeder Regel verwiesen wird, ein Benutzerkonto oder eine Gruppe ist?
Aktualisierung:
Ich konnte das Problem wie folgt lösen. Beachten Sie, dass der Zweck dieses Codes darin besteht, Folgendes zurückzugeben True
wenn die NTAccount
ist eine Gruppe, und False
andernfalls oder wenn bei der Prüfung ein Fehler auftritt.
Gibt es eine bessere Möglichkeit, dies zu tun?
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
Ein weiteres Update:
Die obige Lösung war für die meisten Server ausreichend \account Objekte, aber es schlägt bei lokalen Gruppenobjekten auf den EMC Celerra NAS-Servern, die wir haben, fehl. Ich versuche, die Win-API-Aufrufe NetUserGetInfo/NetLocalGroupGetInfo zu verwenden, um zu sehen, ob das funktioniert, aber ich kann sie nicht richtig zum Laufen bringen. Siehe NetUserGetInfo/NetLocalGroupGetInfo liefert Fehler 1722 für weitere Einzelheiten.