27 lines
822 B
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;
|
|
}
|
|
}();
|
|
}
|
|
}
|