From 6af6a3366c35041d8112efcc7be4b90d92471339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Thu, 30 Jan 2025 19:34:04 +0800 Subject: [PATCH] Fix process --- common/process/searcher_windows.go | 39 +++++++++--------------------- go.mod | 2 +- go.sum | 4 +-- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/common/process/searcher_windows.go b/common/process/searcher_windows.go index 06000615d1..4d87f7ef6a 100644 --- a/common/process/searcher_windows.go +++ b/common/process/searcher_windows.go @@ -2,11 +2,11 @@ package process import ( "context" - "errors" + "fmt" "net/netip" + "syscall" E "github.com/sagernet/sing/common/exceptions" - N "github.com/sagernet/sing/common/network" "github.com/sagernet/sing/common/winiphlpapi" "golang.org/x/sys/windows" @@ -29,26 +29,15 @@ func initWin32API() error { } func (s *windowsSearcher) FindProcessInfo(ctx context.Context, network string, source netip.AddrPort, destination netip.AddrPort) (*Info, error) { - var info *Info - if N.NetworkName(network) == N.NetworkTCP { - pid, err := winiphlpapi.FindTCPPid(source, destination) - if err != nil { - return nil, err - } - info = &Info{ProcessID: pid} - } else { - pid, err := winiphlpapi.FindUDPPid(source) - if err != nil { - return nil, err - } - info = &Info{ProcessID: pid} + pid, err := winiphlpapi.FindPid(network, source) + if err != nil { + return nil, err } - if info == nil { - return nil, ErrNotFound + path, err := getProcessPath(pid) + if err != nil { + return &Info{ProcessID: pid, UserId: -1}, err } - var err error - info.ProcessPath, err = getProcessPath(info.ProcessID) - return info, err + return &Info{ProcessID: pid, ProcessPath: path, UserId: -1}, nil } func getProcessPath(pid uint32) (string, error) { @@ -63,15 +52,11 @@ func getProcessPath(pid uint32) (string, error) { return "", err } defer windows.CloseHandle(handle) - var size uint32 - err = windows.QueryFullProcessImageName(handle, 0, nil, &size) - if !errors.Is(err, windows.ERROR_INSUFFICIENT_BUFFER) { - return "", err - } - buf := make([]uint16, size) + size := uint32(syscall.MAX_LONG_PATH) + buf := make([]uint16, syscall.MAX_LONG_PATH) err = windows.QueryFullProcessImageName(handle, 0, &buf[0], &size) if err != nil { return "", err } - return windows.UTF16ToString(buf), nil + return windows.UTF16ToString(buf[:size]), nil } diff --git a/go.mod b/go.mod index bc80f62280..89c75a57f5 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/sagernet/gvisor v0.0.0-20241123041152-536d05261cff github.com/sagernet/quic-go v0.48.2-beta.1 github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 - github.com/sagernet/sing v0.6.0-beta.12.0.20250130050330-92f3c4c9a664 + github.com/sagernet/sing v0.6.0-beta.12.0.20250130112616-23af22fe01ff github.com/sagernet/sing-mux v0.3.0-alpha.1 github.com/sagernet/sing-quic v0.4.0-beta.4 github.com/sagernet/sing-shadowsocks v0.2.7 diff --git a/go.sum b/go.sum index 509d2ce1a6..fd2a8df396 100644 --- a/go.sum +++ b/go.sum @@ -119,8 +119,8 @@ github.com/sagernet/quic-go v0.48.2-beta.1/go.mod h1:1WgdDIVD1Gybp40JTWketeSfKA/ github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc= github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo= -github.com/sagernet/sing v0.6.0-beta.12.0.20250130050330-92f3c4c9a664 h1:xT1vUF2ne8PwZKH5ed2njvpQkVDjvBj9gwHmB/4P33M= -github.com/sagernet/sing v0.6.0-beta.12.0.20250130050330-92f3c4c9a664/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing v0.6.0-beta.12.0.20250130112616-23af22fe01ff h1:aZeWJw/NkI3/NoXbNHzv2435nWYTV+ZDNDWXTnN9FjQ= +github.com/sagernet/sing v0.6.0-beta.12.0.20250130112616-23af22fe01ff/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg= github.com/sagernet/sing-mux v0.3.0-alpha.1/go.mod h1:FTcImmdfW38Lz7b+HQ+mxxOth1lz4ao8uEnz+MwIJQE= github.com/sagernet/sing-quic v0.4.0-beta.4 h1:kKiMLGaxvVLDCSvCMYo4PtWd1xU6FTL7xvUAQfXO09g=