상세 컨텐츠

본문 제목

MS-윈도우에서 Go언어로 관리자 권한 보유 여부 확인

컴퓨터

by KimUH 2024. 6. 12. 13:44

본문

MS윈도우에서 현재 프로세스가 관리자 권한이 있는 지 C++로 확인하는 방법에 대한 공식 문서를 Go언어로 포팅한 소스 코드는 다음과 같다.

 

참고 링크 : https://github.com/golang/go/issues/28804#issuecomment-505326268

// +build windows
package main

import (
        "fmt"
        "log"

        "golang.org/x/sys/windows"
)

func main() {
        var sid *windows.SID

        // MS의 공식 안내를 Go언어로 포팅.
        // MS의 C++ 공식 문서는 다음 링크를 참조한다.
        // https://docs.microsoft.com/en-us/windows/desktop/api/securitybaseapi/nf-securitybaseapi-checktokenmembership
        err := windows.AllocateAndInitializeSid(
                &windows.SECURITY_NT_AUTHORITY,
                2,
                windows.SECURITY_BUILTIN_DOMAIN_RID,
                windows.DOMAIN_ALIAS_RID_ADMINS,
                0, 0, 0, 0, 0, 0,
                &sid)
        if err != nil {
                log.Fatalf("SID Error: %s", err)
                return
        }
        defer windows.FreeSid(sid)

        // 아래 행이 왜 동작하는 지는 모르겠지만, 하여튼 정상 동작한다.
        // https://github.com/golang/go/issues/28804#issuecomment-438838144
        token := windows.Token(0)

        member, err := token.IsMember(sid)
        if err != nil {
                log.Fatalf("Token Membership Error: %s", err)
                return
        }

        // 관리자 권한이 있다고 해서 Elevated 된 것은 아니다.
        // Elevated에 대해서는 다음 링크를 참조할 것.
        // https://github.com/mozey/run-as-admin
        fmt.Println("Elevated?", token.IsElevated())

        fmt.Println("관리자 권한?", member)
}

 

 

 

 

 

 

 

 

관련글 더보기