From 745e93d28d8e7de5f36c6b5e6876f6fed5e86ac6 Mon Sep 17 00:00:00 2001 From: PhuocNTB Date: Wed, 1 Jul 2026 08:50:19 +0700 Subject: [PATCH] protect client using window ancestor root owner --- client/internal/blocker/blocker.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/client/internal/blocker/blocker.go b/client/internal/blocker/blocker.go index ffe0a63..ed14ea5 100644 --- a/client/internal/blocker/blocker.go +++ b/client/internal/blocker/blocker.go @@ -20,6 +20,7 @@ var ( procGetWindowThreadProcessId = user32.NewProc("GetWindowThreadProcessId") procGetWindow = user32.NewProc("GetWindow") procGetWindowLongW = user32.NewProc("GetWindowLongW") + procGetAncestor = user32.NewProc("GetAncestor") dwmapi = syscall.NewLazyDLL("dwmapi.dll") procDwmGetWindowAttribute = dwmapi.NewProc("DwmGetWindowAttribute") @@ -141,6 +142,16 @@ var enumWindowsCallback = syscall.NewCallback(func(hwnd uintptr, lParam uintptr) return 1 } + // Kiểm tra xem chủ sở hữu gốc (root owner) của cửa sổ này có thuộc về app ta hay không + rootHwnd, _, _ := procGetAncestor.Call(hwnd, 3) // GA_ROOTOWNER = 3 + if rootHwnd != 0 { + var rootPid uint32 + procGetWindowThreadProcessId.Call(rootHwnd, uintptr(unsafe.Pointer(&rootPid))) + if rootPid == uint32(os.Getpid()) { + return 1 // Cửa sổ thuộc về WebView2 / app của ta, bỏ qua không quét + } + } + title := getWindowText(hwnd) if title == "" { return 1