[C] Windows 환경에서 관리자 권한인지 확인하기

Linux 환경이라면 getuid 라는 함수로 root 권한인지 쉽게 확인할 수 있다.

하지만 Windows 환경은 Linux 처럼 간단하지는 않다.

다행히 MSDN에 좋은 예시가 있다.

https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa376389(v=vs.85).aspx.aspx

위의 링크에서 좋은 예시를 보여주고 있다.

아래의 소스는 좀더 읽기 편하게 바꾸어 보았다.

#include<WinBase.h>
BOOL IsUserAdmin(void){
    BOOL b;
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    PSID AdministratorsGroup;
    b = AllocateAndInitializeSid(&NtAuthority,2,SECURITY_BUILTIN_DOMAIN_RID
        ,DOMAIN_ALIAS_RID_ADMINS
        ,0, 0, 0, 0, 0, 0,&AdministratorsGroup);
    if (b){
        if (!CheckTokenMembership(NULL, AdministratorsGroup, &b)){
            b = FALSE;
        }
        FreeSid(AdministratorsGroup);
    }
    return b;
}
관리자 권한인경우 TRUE
아닐경우 FALSE 를 반환한다.