2008-09-09 8 views

답변

2

내가 닷넷에 대해 잘 모르지만,는 Win32에서, 쉬운 방법은() IsUserAnAdmin를 호출하는 것입니다. 당신이 더 많은 제어가 필요한 경우 토큰 과정을 열고

편집을 확인해야하는 각 그룹에 대한 CheckTokenMembership을 확인 할 수 있습니다

1

당신은 내가이 답변에서 한 그룹처럼 루프 수 :

Determining members of local groups via C#

좀 더 읽은 후, 쉬운 일이 System.DirectoryServices.AccountManagement 네임 스페이스를 사용하는 것입니다.

http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx

샘플 : 다음은 사용 방법이다

public static bool IsUserInGroup(string username, string groupname, ContextType type) 
{ 
    PrincipalContext context = new PrincipalContext(type); 

    UserPrincipal user = UserPrincipal.FindByIdentity(
     context, 
     IdentityType.SamAccountName, 
     username); 
    GroupPrincipal group = GroupPrincipal.FindByIdentity(
     context, groupname); 

    return user.IsMemberOf(group); 
} 
+0

System.DirectoryServices.AccountManagement 네임 스페이스는 .NET 3.5에 새로 추가 되었습니까? 아닙니다. –

+0

링크 된 기사의 첫 번째 문장 : "새로운 3.5 항목을 살펴보면"System.DirectoryServices.AccountManagement "라는 새 어셈블리를 발견 한 것이 내 관심을 끌었습니다." – Espo

+0

죄송합니다. 나는 그것을 놓쳤습니다. CheckTokenMembership 정보를 답안에 추가하여 정보를 완성 할 수 있습니까? (답변을 수락 할 수 있도록 표시 할 수 있습니까?) –

2

이는 Win32있다 .NET 샘플 코드에 대한 pinvoke.net (감사 chopeen)를 참조하십시오 이 API는 P/Invoke 할 수 있습니다 : IsUserAnAdmin

질문은 Vista에서 더 복잡합니다 ... blog post을 참조하십시오. 하지 다음 경우 다음 현재 실행중인 사용자에 대한

using System.Security.Principal; 

WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
WindowsPrincipal wp = new WindowsPrincipal(identity); 

if (wp.IsInRole("BUILTIN\Administrators")) 
    // Is Administrator 
else 
    // Is Not 

을 이야기하는 경우

+0

"IsUserAnAdmin 함수는 CheckTokenMembership의 래퍼이므로 IsUserAnAdmin을 호출하는 대신 관리자 그룹의 상태를 직접 확인하여 해당 함수를 직접 호출하는 것이 좋습니다. (링크 된 페이지에서) – Espo

+0

나는 전에주의를 알지 못했다. 마이크로 소프트가 왜 그런 간단한 도우미를 비추천으로 여기는 것을 고려해야하는지 궁금하다. 다행스럽게도 그들은 하위 호환성을위한 좋은 기록을 갖고있다. –

0

나는 특정 사용자에게 정체성을 설정하기 위해 수를 예상하지만 어떻게 들여다 없습니다.

관련 문제