2013-02-04 2 views
3

나는 폴더 정보의 보안 정보를 검색 할 그들은 내가 모두 사용자 및 그룹을 가지고 라인 fileSystemAccessRule.IdentityReference.Value에서 폴더폴더 보안에 할당 된 사용자와 그룹을 구별하는 방법은 무엇입니까?

public void GetSecurityRules(DirectoryInfo directoryInfo) 
    { 
     DirectorySecurity DSecurity = directoryInfo.GetAccessControl(); 
     AuthorizationRuleCollection Rules = DSecurity.GetAccessRules(true, true, typeof(NTAccount)); 


     foreach (FileSystemAccessRule fileSystemAccessRule in Rules) 
     { 
      Console.WriteLine("User/Group name {0}",fileSystemAccessRule.IdentityReference.Value); 
      Console.WriteLine("Permissions: {0}", fileSystemAccessRule.FileSystemRights.ToString()); 
     } 
    } 

에 있지만 내가 어떻게 할 수있는 사용자 및 그룹과 권한을 포함하는 간단한 코드를 작성 값이 사용자 또는 그룹을 나타내는 지 알고 있습니까?

+0

관련 (그러나 VB.NET에서) : http://stackoverflow.com/questions/3464821/how-do-i-check-if-an-ntaccount-object-represents-a-group-or-a- 사용자 –

답변

0

CLR은이 정보를 노출하지 않습니다. pg/LsaLookupSids을 수동으로 호출하고 반환 할 SID_NAME_USE 값을 검사해야합니다. CLR은 SID를 계정 이름으로 변환하기 위해이 함수를 호출하지만 SID_NAME_USE 값을 버립니다. 코드의 경우 Reflector를 분해하고 mscorlib을 열고 내부의 TranslateToNTAccounts 함수가 어떻게 작동하는지 확인하십시오. 대안으로

, 반복적으로 같은 조회를 수행하지 않을 경우, WMI를 사용하는 것이 더 쉬울 수 있습니다 - SID하여 Win32_Account을 조회하고 SIDType 멤버를 검사합니다.

+0

코드 샘플? 그리고 사용자 또는 그룹이 활성 디렉토리에서 온 경우 LDAP에 대한 검사를 실행해야합니까? 아니면 더 좋은 방법이 있습니까? 감사합니다. – Maro

+0

당신은 'LsaLookupSids'을 대신 할 것입니다. –

관련 문제