2011-02-18 3 views
2

아래 기능은 로컬 컴퓨터의 모든 그룹을 나열합니다.
이제 "모든 사람"그룹이 나타나지 않는 이유는 무엇입니까?
사용자 권한으로 디렉토리 권한을 변경하면 "everyone"그룹이 표시되므로 어딘가에 있어야합니다.DirectoryEntry ("WinNT : //")가 모두를 그룹으로 표시하지 않는 이유는 무엇입니까?

Public Shared Function GetAllGroups() As DataTable 
     Return GetAllGroups(System.Environment.MachineName) 
    End Function 


    ' Tools.Permissions.Local.GetAllGroups() ' 
    Public Shared Function GetAllGroups(ByVal strDomain As String) As DataTable 
     Dim dt As New DataTable 
     Dim dr As DataRow = Nothing 

     Try 
      Dim bException As Boolean = False 
      Dim deLocalMachine As System.DirectoryServices.DirectoryEntry = New System.DirectoryServices.DirectoryEntry("WinNT://" + strDomain) 
      'Dim deRootObject As System.DirectoryServices.DirectoryEntry = GetDirectoryEntry(strPath, strUserName, strPassword, bException) ' 
      If bException Then 
       Return Nothing 
      End If 


      For Each child As System.DirectoryServices.DirectoryEntry In deLocalMachine.Children 
       Try 

        If StringComparer.OrdinalIgnoreCase.Equals(child.SchemaClassName, "group") Then 

         If Not dt.Columns.Contains("Members") Then 
          dt.Columns.Add("Members", GetType(System.String)) 
         End If 

         For Each strPropertyName As String In child.Properties.PropertyNames 
          If Not dt.Columns.Contains(strPropertyName) Then 
           dt.Columns.Add(strPropertyName, GetType(System.String)) 
          End If 
         Next strPropertyName 

         dr = dt.NewRow 

         Dim strMembers As String = "" 
         For Each member As Object In DirectCast(child.Invoke("Members"), IEnumerable) 
          Using memberEntry As New System.DirectoryServices.DirectoryEntry(member) 

           Try 
            strMembers += memberEntry.Properties("Name").Value.ToString() + Environment.NewLine 
            Console.WriteLine(memberEntry.Path) 
           Catch exFixMeIsNotNullNotWorking As Exception 

           End Try 

          End Using 
         Next 

         dr("Members") = strMembers 

         For Each strPropertyName As String In child.Properties.PropertyNames 

          If StringComparer.OrdinalIgnoreCase.Equals(strPropertyName, "objectSid") Then 
           Dim strSID As String = "" 
           Try 
            Dim sidThisSid As New System.Security.Principal.SecurityIdentifier(child.Properties(strPropertyName).Value, 0) 
            strSID = sidThisSid.ToString() 
            ' http://stackoverflow.com/questions/1040623/convert-a-username-to-a-sid-string-in-c-net ' 
            ' NTAccount ntAccount = (NTAccount)sid.Translate(typeof(NTAccount)); ' 
            ' Dim ntAccount As Security.Principal.NTAccount = CType(sidThisSid.Translate(GetType(Security.Principal.NTAccount)), Security.Principal.NTAccount) ' 
           Catch ex As Exception 

           End Try 

           dr(strPropertyName) = strSID 
          Else 
           dr(strPropertyName) = child.Properties(strPropertyName).Value.ToString() 
          End If 



         Next strPropertyName 
         dt.Rows.Add(dr) 

        End If 

       Catch ex As Exception ' Don't finish just because one fails 
        Console.WriteLine(ex.Message.ToString & vbLf & vbLf & ex.StackTrace.ToString, MsgBoxStyle.Critical, "FEHLER ...") 
       End Try 
      Next 
     Catch ex As Exception 
      Console.WriteLine(ex.Message.ToString & vbLf & vbLf & ex.StackTrace.ToString, MsgBoxStyle.Critical, "FEHLER ...") 
     End Try 

     Return dt 
    End Function ' ListEverything 
+0

현재 솔루션을 공유해 주셔서 감사합니다 – Nasenbaer

답변

2

Everyone 그룹은 표준 그룹이 아니라 암시 적 그룹 또는 내장 주요 없습니다. 로컬 "사용자 및 그룹"을 열면 해당 사용자가 표시되지 않습니다. Authenticated Users과 같은 다른 "그룹"에 대해서도 마찬가지입니다. 이들에 액세스하려면 System.Security.Principal.WellKnownSidType 열거 형을 사용해야합니다. 이 Windows 2008 article은 이전 버전의 Windows와 실제로 관련이 있습니다.

+0

그러나 Administrators 그룹도 마찬가지입니다. –

+0

@Quandary,'Administrators' 그룹은 실제로'Marketing'과 같이 만들 것 같은 일반 그룹입니다. 하지만 필요하기 때문에 'WellKnownSidType'에 아직도 나타나기 때문에 혼란 스러울 수 있습니다. 나는 암묵적인 그룹을 상황에 의존하는 그룹으로 생각한다. 예를 들어, 원격으로 로그인 할 때까지 나의 계정은'Terminal Server User' 회원이 아닙니다. –

관련 문제