//+build windows,386
package main
import (
"fmt"
"golang.org/x/sys/windows"
"log"
"strings"
"syscall"
"unsafe"
)
const (
PROCESS_SET_QUOTA = 0x0100
PROCESS_QUERY_INFORMATION = 0x0400
TH32CS_SNAPPROCESS = 0x00000002
)
type WindowsProcess struct {
ProcessID int
ParentProcessID int
Exe string
}
func newWindowsProcess(e *windows.ProcessEntry32) WindowsProcess {
end := 0
for {
if e.ExeFile[end] == 0 {
break
}
end++
}
return WindowsProcess{
ProcessID: int(e.ProcessID),
ParentProcessID: int(e.ParentProcessID),
Exe: syscall.UTF16ToString(e.ExeFile[:end]),
}
}
func findProcessByName(processes []WindowsProcess, name string) *WindowsProcess {
for _, p := range processes {
if strings.ToLower(p.Exe) == strings.ToLower(name) {
return &p
}
}
return nil
}
func processes() ([]WindowsProcess, error) {
handle, err := windows.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
if err != nil {
return nil, err
}
defer windows.CloseHandle(handle)
var entry windows.ProcessEntry32
entry.Size = uint32(unsafe.Sizeof(entry))
// get the first process
err = windows.Process32First(handle, &entry)
if err != nil {
return nil, err
}
results := make([]WindowsProcess, 0, 50)
for {
results = append(results, newWindowsProcess(&entry))
err = windows.Process32Next(handle, &entry)
if err != nil {
// windows sends ERROR_NO_MORE_FILES on last process
if err == syscall.ERROR_NO_MORE_FILES {
return results, nil
}
return nil, err
}
}
}
func main() {
procs, err := processes()
if err != nil {
log.Fatal(err)
}
proc := findProcessByName(procs, "dash-qt.exe")
if proc == nil {
panic("Process not found")
}
handle, err := windows.OpenProcess(
PROCESS_SET_QUOTA|PROCESS_QUERY_INFORMATION,
false,
uint32(proc.ProcessID),
)
if err != nil {
log.Fatal(err)
}
fmt.Println(handle)
kernel32DLL := syscall.NewLazyDLL("kernel32.dll")
setProcessWorkingSetSize := kernel32DLL.NewProc("SetProcessWorkingSetSize")
var minOne = -1
setProcessWorkingSetSize.Call(
uintptr(handle),
uintptr(minOne),
uintptr(minOne),
)
}
Накидал говнокодика на Go, чтоб чистил оперативку для DashCore процесса для Winx86. Скидывать Exe не буду, но если соберёте сами из исходников, то можно не перезапускать кошель а просто очистить память запустим софтину