JJ_MKVMaker/lib/platform/windows/elevation.dart

27 lines
822 B
Dart

import 'dart:ffi';
import 'dart:io';
typedef _IsAdminC = Int32 Function();
typedef _IsAdminD = int Function();
/// 이 프로그램이 관리자 권한 (높은 무결성) 으로 실행 중인지 (207).
/// 내장 Chrome 엔진 (CEF) 은 관리자 권한이면 스스로 끝나고, 억지로 돌리면 샌드박스 없이 관리자 권한으로 웹 페이지를 돌린다.
class Elevation {
Elevation._();
static bool? _cached;
/// 관리자 권한으로 실행 중인지 (Windows 만, 모르면 false)
static bool get elevated {
if (!Platform.isWindows) return false;
return _cached ??= () {
try {
final f = DynamicLibrary.open('shell32.dll').lookupFunction<_IsAdminC, _IsAdminD>('IsUserAnAdmin');
return f() != 0;
} catch (_) {
return false;
}
}();
}
}