diff --git a/component/process/process_windows.go b/component/process/process_windows.go index 1771f928..14e221b4 100644 --- a/component/process/process_windows.go +++ b/component/process/process_windows.go @@ -174,7 +174,7 @@ func newSearcher(isV4, isTCP bool) *searcher { func getTransportTable(fn uintptr, family int, class int) ([]byte, error) { for size, buf := uint32(8), make([]byte, 8); ; { ptr := unsafe.Pointer(&buf[0]) - err, _, _ := syscall.SyscallN(fn, 6, uintptr(ptr), uintptr(unsafe.Pointer(&size)), 0, uintptr(family), uintptr(class), 0) + err, _, _ := syscall.SyscallN(fn, uintptr(ptr), uintptr(unsafe.Pointer(&size)), 0, uintptr(family), uintptr(class), 0) switch err { case 0: @@ -205,14 +205,12 @@ func getExecPathFromPID(pid uint32) (string, error) { if err != nil { return "", err } - defer func(handle windows.Handle) { - _ = windows.CloseHandle(handle) - }(h) + defer windows.CloseHandle(h) buf := make([]uint16, syscall.MAX_LONG_PATH) size := uint32(len(buf)) r1, _, err := syscall.SyscallN( - queryProcName, 4, + queryProcName, uintptr(h), uintptr(1), uintptr(unsafe.Pointer(&buf[0])), diff --git a/rule/common/process.go b/rule/common/process.go index 67a5fad2..6614e373 100644 --- a/rule/common/process.go +++ b/rule/common/process.go @@ -1,18 +1,11 @@ package common import ( - "fmt" - "strconv" "strings" - "github.com/Dreamacro/clash/common/cache" - "github.com/Dreamacro/clash/component/process" C "github.com/Dreamacro/clash/constant" - "github.com/Dreamacro/clash/log" ) -var processCache = cache.NewLRUCache(cache.WithAge(2), cache.WithSize(64)) - type Process struct { *Base adapter string @@ -25,34 +18,11 @@ func (ps *Process) RuleType() C.RuleType { } func (ps *Process) Match(metadata *C.Metadata) bool { - if metadata.Process != "" { + if ps.nameOnly { return strings.EqualFold(metadata.Process, ps.process) } - key := fmt.Sprintf("%s:%s:%s", metadata.NetWork.String(), metadata.SrcIP.String(), metadata.SrcPort) - if strings.TrimSpace(metadata.Process) == "" { - cached, hit := processCache.Get(key) - if !hit { - srcPort, err := strconv.Atoi(metadata.SrcPort) - if err != nil { - processCache.Set(key, "") - return false - } - - name, err := process.FindProcessName(metadata.NetWork.String(), metadata.SrcIP, srcPort) - if err != nil { - log.Debugln("[Rule] find process name %s error: %s", C.Process.String(), err.Error()) - } - - processCache.Set(key, name) - - cached = name - } - - metadata.Process = cached.(string) - } - - return strings.EqualFold(metadata.Process, ps.process) + return strings.EqualFold(metadata.ProcessPath, ps.process) } func (ps *Process) Adapter() string {