This commit is contained in:
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
var (
|
||||
guardOnce sync.Once
|
||||
guardViolation func(string)
|
||||
guardViolation func(kind, reason string)
|
||||
guardStop chan struct{}
|
||||
suppressMu sync.Mutex
|
||||
suppressViolationsUntil time.Time
|
||||
@@ -36,8 +36,8 @@ func violationsSuppressed() bool {
|
||||
return time.Now().Before(suppressViolationsUntil)
|
||||
}
|
||||
|
||||
// Start giám sát môi trường macOS — vi phạm thì gọi onViolation (đa màn hình).
|
||||
func Start(onViolation func(reason string)) {
|
||||
// Start giám sát môi trường macOS — vi phạm thì gọi onViolation(kind, reason).
|
||||
func Start(onViolation func(kind, reason string)) {
|
||||
guardOnce.Do(func() {
|
||||
if onViolation == nil {
|
||||
return
|
||||
@@ -46,7 +46,7 @@ func Start(onViolation func(reason string)) {
|
||||
guardStop = make(chan struct{})
|
||||
|
||||
if screenshot.NumActiveDisplays() > 1 {
|
||||
onViolation("Phát hiện nhiều hơn 1 màn hình. Vui lòng chỉ dùng một màn hình khi chạy Simple Care.")
|
||||
onViolation("multi_monitor", "Phát hiện nhiều hơn 1 màn hình. Vui lòng chỉ dùng một màn hình khi chạy Simple Care.")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ func checkEnvironment() {
|
||||
return
|
||||
}
|
||||
if n := screenshot.NumActiveDisplays(); n > 1 {
|
||||
guardViolation("Phát hiện nhiều hơn 1 màn hình. Vui lòng rút/bật tắt màn hình phụ.")
|
||||
guardViolation("multi_monitor", "Phát hiện nhiều hơn 1 màn hình. Vui lòng rút/bật tắt màn hình phụ.")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
var (
|
||||
guardOnce sync.Once
|
||||
guardViolation func(string)
|
||||
guardViolation func(kind, reason string)
|
||||
guardStop chan struct{}
|
||||
suppressMu sync.Mutex
|
||||
suppressViolationsUntil time.Time
|
||||
@@ -37,7 +37,7 @@ func violationsSuppressed() bool {
|
||||
}
|
||||
|
||||
// Start monitors the Linux desktop environment (multi-display check)
|
||||
func Start(onViolation func(reason string)) {
|
||||
func Start(onViolation func(kind, reason string)) {
|
||||
guardOnce.Do(func() {
|
||||
if onViolation == nil {
|
||||
return
|
||||
@@ -46,7 +46,7 @@ func Start(onViolation func(reason string)) {
|
||||
guardStop = make(chan struct{})
|
||||
|
||||
if screenshot.NumActiveDisplays() > 1 {
|
||||
onViolation("Phát hiện nhiều hơn 1 màn hình. Vui lòng chỉ dùng một màn hình khi chạy Simple Care.")
|
||||
onViolation("multi_monitor", "Phát hiện nhiều hơn 1 màn hình. Vui lòng chỉ dùng một màn hình khi chạy Simple Care.")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ func checkEnvironment() {
|
||||
return
|
||||
}
|
||||
if n := screenshot.NumActiveDisplays(); n > 1 {
|
||||
guardViolation("Phát hiện nhiều hơn 1 màn hình. Vui lòng rút/bật tắt màn hình phụ.")
|
||||
guardViolation("multi_monitor", "Phát hiện nhiều hơn 1 màn hình. Vui lòng rút/bật tắt màn hình phụ.")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,6 @@ package guard
|
||||
|
||||
import "time"
|
||||
|
||||
func Start(onViolation func(reason string)) {}
|
||||
func Start(onViolation func(kind, reason string)) {}
|
||||
func Stop() {}
|
||||
func SuppressFor(_ time.Duration) {}
|
||||
|
||||
@@ -72,15 +72,15 @@ type msg struct {
|
||||
}
|
||||
|
||||
var (
|
||||
guardOnce sync.Once
|
||||
guardViolation func(string)
|
||||
guardStop chan struct{}
|
||||
guardBaselineUser string
|
||||
guardBaselineSession uint32
|
||||
desktopHook uintptr
|
||||
guardClassAtom uint16
|
||||
suppressMu sync.Mutex
|
||||
suppressViolationsUntil time.Time
|
||||
guardOnce sync.Once
|
||||
guardViolation func(kind, reason string)
|
||||
guardStop chan struct{}
|
||||
guardBaselineUser string
|
||||
guardBaselineSession uint32
|
||||
desktopHook uintptr
|
||||
guardClassAtom uint16
|
||||
suppressMu sync.Mutex
|
||||
suppressViolationsUntil time.Time
|
||||
)
|
||||
|
||||
// SuppressFor tạm không thoát app khi WebView/Explorer chuyển màn hình nội bộ.
|
||||
@@ -102,8 +102,8 @@ func violationsSuppressed() bool {
|
||||
return time.Now().Before(suppressViolationsUntil)
|
||||
}
|
||||
|
||||
// Start giám sát môi trường Windows — vi phạm thì gọi onViolation (đổi user, đa màn hình, đổi desktop ảo).
|
||||
func Start(onViolation func(reason string)) {
|
||||
// Start giám sát môi trường Windows — vi phạm thì gọi onViolation(kind, reason).
|
||||
func Start(onViolation func(kind, reason string)) {
|
||||
guardOnce.Do(func() {
|
||||
if onViolation == nil {
|
||||
return
|
||||
@@ -114,7 +114,7 @@ func Start(onViolation func(reason string)) {
|
||||
guardBaselineSession = currentSessionID()
|
||||
|
||||
if monitorCount() > 1 {
|
||||
onViolation("Phát hiện nhiều hơn 1 màn hình. Vui lòng chỉ dùng một màn hình khi chạy Simple Care.")
|
||||
onViolation("multi_monitor", "Phát hiện nhiều hơn 1 màn hình. Vui lòng chỉ dùng một màn hình khi chạy Simple Care.")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -147,27 +147,27 @@ func checkEnvironment() {
|
||||
return
|
||||
}
|
||||
if n := monitorCount(); n > 1 {
|
||||
guardViolation("Phát hiện nhiều hơn 1 màn hình. Vui lòng rút/bật tắt màn hình phụ.")
|
||||
guardViolation("multi_monitor", "Phát hiện nhiều hơn 1 màn hình. Vui lòng rút/bật tắt màn hình phụ.")
|
||||
return
|
||||
}
|
||||
user := currentUsername()
|
||||
if user != "" && guardBaselineUser != "" && user != guardBaselineUser {
|
||||
guardViolation("Phát hiện đổi tài khoản Windows. Ứng dụng sẽ thoát.")
|
||||
guardViolation("user_switch", "Phát hiện đổi tài khoản Windows. Ứng dụng sẽ thoát.")
|
||||
return
|
||||
}
|
||||
sid := currentSessionID()
|
||||
if sid != 0 && guardBaselineSession != 0 && sid != guardBaselineSession {
|
||||
guardViolation("Phiên đăng nhập Windows đã thay đổi. Ứng dụng sẽ thoát.")
|
||||
guardViolation("session_change", "Phiên đăng nhập Windows đã thay đổi. Ứng dụng sẽ thoát.")
|
||||
}
|
||||
}
|
||||
|
||||
func triggerViolation(reason string) {
|
||||
func triggerViolation(kind, reason string) {
|
||||
if violationsSuppressed() {
|
||||
log.Printf("[GUARD] suppressed: %s", reason)
|
||||
return
|
||||
}
|
||||
if guardViolation != nil {
|
||||
guardViolation(reason)
|
||||
guardViolation(kind, reason)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -262,7 +262,7 @@ func guardWndProc(hwnd, msg, wParam, lParam uintptr) uintptr {
|
||||
case wmWtsSessionChange:
|
||||
switch uint32(wParam) {
|
||||
case wtsSessionLock, wtsSessionLogoff, wtsConsoleDisconnect, wtsRemoteDisconnect:
|
||||
triggerViolation("Phiên Windows bị khóa, đăng xuất hoặc chuyển người dùng. Ứng dụng sẽ thoát.")
|
||||
triggerViolation("session_change", "Phiên Windows bị khóa, đăng xuất hoặc chuyển người dùng. Ứng dụng sẽ thoát.")
|
||||
}
|
||||
}
|
||||
r, _, _ := procDefWindowProcW.Call(hwnd, msg, wParam, lParam)
|
||||
@@ -271,7 +271,7 @@ func guardWndProc(hwnd, msg, wParam, lParam uintptr) uintptr {
|
||||
|
||||
func desktopSwitchCallback(hWinEventHook, event, hwnd, idObject, idChild, idEventThread, dwmsEventTime uintptr) uintptr {
|
||||
if event == eventSystemDesktopSwitch {
|
||||
triggerViolation("Không được chuyển Desktop ảo (Win+Tab). Ứng dụng sẽ thoát.")
|
||||
triggerViolation("virtual_desktop", "Không được chuyển Desktop ảo (Win+Tab). Ứng dụng sẽ thoát.")
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user