Lyn
조회 수 27566 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

#include <stdio.h>
#include <windows.h>
#include <shlobj.h>                 
#pragma comment(lib, "shell32.lib") 

BOOL GetProcessElevation(TOKEN_ELEVATION_TYPE *pElevationType, BOOL &pIsAdmin)
{
    HANDLE hToken = NULL;
    BOOL bResult = FALSE;
    DWORD Size = 0;

    if ( !OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) ) return FALSE;

    if ( GetTokenInformation(hToken, TokenElevationType, pElevationType, sizeof(TOKEN_ELEVATION_TYPE), &Size) )
    {
        char adminSID[SECURITY_MAX_SID_SIZE];
        Size = sizeof(adminSID);
       
        CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, &adminSID, &Size);

        if ( *pElevationType == TokenElevationTypeLimited )
        {
            HANDLE hUnfilteredToken = NULL;
            GetTokenInformation(hToken, TokenLinkedToken, (void *)&hUnfilteredToken, sizeof(HANDLE), &Size);
            if ( CheckTokenMembership(hUnfilteredToken, &adminSID, &pIsAdmin) ) bResult = TRUE;
           
            CloseHandle(hUnfilteredToken);
        }
        else
        {
            pIsAdmin = IsUserAnAdmin();
            bResult = TRUE;
        }
    }

    CloseHandle(hToken);
    return bResult;
}

int main(int argc, char **argv)
{
    TOKEN_ELEVATION_TYPE TockenType;
    BOOL isAdmin = FALSE;
    TCHAR UserID[0xFF] = {0};
    DWORD UserCount = _countof(UserID);
    GetUserName(UserID, &UserCount);

    if ( GetProcessElevation(&TockenType, isAdmin) )
    {
        if ( isAdmin )
            printf("%s 는 관리자입니다, ", UserID);
        else
            printf("%s 는 관리자가 아닙니다.", UserID);

        switch (TockenType)
        {
        case TokenElevationTypeDefault:
            printf("기본사용자");
            break;
        case TokenElevationTypeFull:
            printf("권한상승됨");
            break;
        case TokenElevationTypeLimited:
            printf("제한된 권한");
            break;
        }
    }

    return 0;
}

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
40 Win32 Process가 Open 한 Port 보는 프로그램 Lyn 2009.12.15 21253
» Win32 Vista 프로세스 Admin 권한 상승 여부 알아내기 Lyn 2009.12.10 27566
38 Win32 CreateCompatibleBitmap 사용시 주의할점 Lyn 2009.12.02 29286
37 Win32 IJL Intel Jpeg Library 사용시 주의할 점 Lyn 2009.11.27 26907
36 Win32 Edit 에서 원하는 위시로 캐럿 옮기기 Lyn 2009.09.24 22634
35 Delphi / BCB Delphi 2005~ 2009 IDE 를 Delphi7 스타일로 1 Lyn 2009.09.08 32430
34 Pure C++ new , new [] 연산자 오버로딩 하기 Lyn 2009.08.13 24778
33 Pure C++ C++ 헤더 중복 방지하기 Lyn 2009.04.21 26762
32 Win32 SendMessage로 문자열 날리기(WM_COPYDATA) Lyn 2009.04.21 223389
31 Visual C++ Visual C++ 2008 Class Diagram file Lyn 2009.04.21 31750
30 Visual C++ 프로젝트 옵션에 따른 string wstring 자동변환 Lyn 2009.03.19 31368
29 Delphi / BCB C++ Builder 단독 실행파일 만들기 Lyn 2009.03.16 40235
28 Win32 메세지 처리시 WPARAM, LPARAM 타잎 차이 Lyn 2009.02.05 25399
27 Win32 DLL의 전역변수 충돌 피하는 꽁수 Lyn 2009.01.23 25968
26 Visual C++ 사용자 정의 메세지 핸들러 만들기 Lyn 2009.01.23 29831
25 Win32 Global HotKey(전역 단축키) 사용하기 Lyn 2008.10.24 34671
24 Win32 내 프로그램에 다른 프로그램 내장하기. 1 Lyn 2008.10.09 29396
23 Visual C++ VC++에서 STL 의 성능이 만족스럽지 않은경우 Lyn 2008.09.27 32985
22 Visual C++ VC++(Native) 에서 C#(.net) 의 DLL 호출하기 Lyn 2008.09.27 38025
21 Visual C++ Templete을 이용하여 BC++ OnClick 이벤트 VC++에서 흉내내보기 Lyn 2008.09.27 45801
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6