C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23830] Re:[질문] 로그인한 계정이 루트계정인지 아는 방법?
임문환 [mhlim] 782 읽음    2003-01-24 00:51
저도 정확히는 모르지만 아래의 정보가 도움이 될 것같군요.

MSDN 라이브러리를 찾아보니 아래의 두 가지 방법이 있군요.

BOOL IsAdmin( )
{
    SC_HANDLE hSC;
// Try an Admin Privileged API - if it works, return TRUE, else FALSE
    hSC = OpenSCManager(NULL, NULL, GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE  );
    if ( hSC == NULL )  return FALSE;
    CloseServiceHandle( hSC );
    return TRUE;
}


BOOL IsAdmin(void)
{
      HANDLE hAccessToken;
      UCHAR InfoBuffer[1024];
      PTOKEN_GROUPS ptgGroups = (PTOKEN_GROUPS)InfoBuffer;
      DWORD dwInfoBufferSize;
      PSID psidAdministrators;
      SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
      UINT x;
      BOOL bSuccess;

      if(!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE,&hAccessToken ))
      {
         if(GetLastError() != ERROR_NO_TOKEN) return FALSE;
         // retry against process token if no thread token exists
         if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY,&hAccessToken)) return FALSE;
      }

      bSuccess = GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,1024, &dwInfoBufferSize);

      CloseHandle(hAccessToken);

      if(!bSuccess ) return FALSE;

      if(!AllocateAndInitializeSid(&siaNtAuthority, 2,
         SECURITY_BUILTIN_DOMAIN_RID,
         DOMAIN_ALIAS_RID_ADMINS,
         0, 0, 0, 0, 0, 0,
         &psidAdministrators))
         return FALSE;

   // assume that we don't find the admin SID.
      bSuccess = FALSE;

      for(x=0;x<ptgGroups->GroupCount;x++)
      {
         if( EqualSid(psidAdministrators, ptgGroups->Groups[x].Sid) )
         {
            bSuccess = TRUE;
            break;
         }

      }
      FreeSid(psidAdministrators);
      return bSuccess;
}


민인학 님이 쓰신 글 :
: 제목 그대로입니다.
:
: 환경변수로 USER_NAME을 알아내서 Administrator인지 검색하는 방법 말구요..
: 딴 방법은 없나요?
:
: 따른 계정으로도 administrator권한이 있을수 있잖아요..
: 부탁드립니다.

+ -

관련 글 리스트
23783 [질문] 로그인한 계정이 루트계정인지 아는 방법? 민인학 601 2003/01/21
23830     Re:[질문] 로그인한 계정이 루트계정인지 아는 방법? 임문환 782 2003/01/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.