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)
}
켄 톰슨이 Go언어 개발을 결심하게 된 이유. ㅋㅋㅋ (0) | 2024.06.19 |
---|---|
프로그래머라는 직업이 3년 후에 사라진다고? (0) | 2024.06.13 |
윈도우 시스템 파일 확인. (0) | 2024.06.03 |
AMD 내장 GPU로 플루이드 모션 설정하기. (0) | 2024.06.01 |
윈도우 11 코파일럿 비활성화. (0) | 2024.05.31 |