From a4acbda91e1ab489273b5632fdd049945c475406 Mon Sep 17 00:00:00 2001 From: anton rudy Date: Sun, 26 May 2024 02:27:25 +0300 Subject: [PATCH] added: RAM cleaner, refactored: internals files --- README.md | 6 +- cmd/main.go | 52 +++++- internal/memory/memory.go | 100 ------------ internal/tray/assets/icon.ico | Bin 67646 -> 138942 bytes internal/tray/tray.go | 99 ++++++++---- internal/windows_api/actions.go | 150 ++++++++++++++++++ internal/windows_api/dll_libs.go | 13 ++ .../privileges.go} | 41 +++-- 8 files changed, 307 insertions(+), 154 deletions(-) delete mode 100644 internal/memory/memory.go create mode 100644 internal/windows_api/actions.go create mode 100644 internal/windows_api/dll_libs.go rename internal/{elevation/elevation.go => windows_api/privileges.go} (50%) diff --git a/README.md b/README.md index e3ada11..024e1c4 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,13 @@ This is a simple Windows application that runs in the system tray and allows you to clean the standby memory list. The application requests administrator privileges upon startup and provides a menu in the tray to perform memory cleaning. ## Features -- Runs in the system tray. +- Cleans RAM - Cleans the standby memory list when its size exceeds 65% of free memory. -- Requests administrator privileges on startup. - Displays memory usage statistics when hovering over the tray icon. -- Uses an embedded icon for the tray. +- Runs in the system tray. ## Requirements +- Requests administrator privileges on startup. - Windows operating system. - Go 1.16 or later. diff --git a/cmd/main.go b/cmd/main.go index 642acb8..e048641 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -3,28 +3,64 @@ package main import ( - "clean-standby-list/internal/elevation" - "clean-standby-list/internal/memory" "clean-standby-list/internal/tray" + "clean-standby-list/internal/windows_api" "runtime" + "time" "github.com/getlantern/systray" ) +var lastCleanup time.Time +var stopChan = make(chan struct{}) +const ( + percentThreshold = 65 +) + func main() { // Request admin rights if not already granted - if !elevation.IsRunAsAdmin() { - elevation.RunMeElevated() + if !windowsapi.IsRunAsAdmin() { + windowsapi.RunAsAdmin() return } - onReady := func() { - tray.OnReady(memory.EmptyStandbyList, memory.CheckAndCleanStandbyList) - } + go autoCleanStandbyList(stopChan) - systray.Run(onReady, onExit) + systray.Run(tray.OnReady, onExit) } func onExit() { + close(stopChan) runtime.GC() } + +// autoCleanStandbyList periodically cleans the standby list to free up RAM. +// It runs in a loop until the stopChan is closed. +// The function checks the percentage of standby list usage against the threshold. +// If the percentage is above the threshold and enough time has passed since the last cleanup, +// it calls the CleanStandbyList function to clean the standby list. +// It also updates the tooltip and sleeps for 1 minute before the next iteration. +// +// Parameters: +// - stopChan: A channel used to stop the function when closed. +// +// Note: The function assumes the availability of the windowsapi package. +func autoCleanStandbyList(stopChan chan struct{}) { + for { + select { + case <-stopChan: + return + default: + standbyList, freeRAM, _ := windowsapi.GetStanbyListAndFreeRAMSize() + percent := standbyList / freeRAM * 100 + + if percent > percentThreshold && time.Since(lastCleanup) > 5*time.Minute { + windowsapi.CleanStandbyList() + lastCleanup = time.Now() + } + + tray.UpdateTooltip() + time.Sleep(1 * time.Minute) + } + } +} diff --git a/internal/memory/memory.go b/internal/memory/memory.go deleted file mode 100644 index 3edc92a..0000000 --- a/internal/memory/memory.go +++ /dev/null @@ -1,100 +0,0 @@ -// internal/memory/memory.go - -package memory - -import ( - "fmt" - "log" - "time" - "unsafe" - - "clean-standby-list/internal/elevation" - "clean-standby-list/internal/tray" - - "github.com/StackExchange/wmi" - "golang.org/x/sys/windows" -) - -const ( - SystemMemoryListInformationClass = 0x0050 - MemoryPurgeStandbyList = 4 - PercentThreshold = 65 -) - -var lastCleanup time.Time - -type Win32_PerfRawData_PerfOS_Memory struct { - StandbyCacheNormalPriorityBytes uint64 - StandbyCacheReserveBytes uint64 - StandbyCacheCoreBytes uint64 - AvailableBytes uint64 -} - -// GetStandbyListInfo retrieves the size of the standby list and free memory using WMI -func GetStandbyListInfo() (standbySize, freeSize uint64, err error) { - var dst []Win32_PerfRawData_PerfOS_Memory - query := wmi.CreateQuery(&dst, "") - err = wmi.Query(query, &dst) - if err != nil { - return 0, 0, err - } - - if len(dst) > 0 { - standbySize = dst[0].StandbyCacheCoreBytes + dst[0].StandbyCacheNormalPriorityBytes + dst[0].StandbyCacheReserveBytes - freeSize = dst[0].AvailableBytes - return standbySize, freeSize, nil - } - return 0, 0, fmt.Errorf("no data returned from WMI query") -} - -func CheckAndCleanStandbyList() { - standbySize, freeSize, err := GetStandbyListInfo() - if err != nil { - log.Printf("Error getting memory info: %v\n", err) - return - } - percent := (standbySize * 100) / freeSize - log.Printf("Standby List: %d MB, Free Memory: %d MB, Percent: %d%%\n", standbySize/1024/1024, freeSize/1024/1024, percent) - - if percent > PercentThreshold && time.Since(lastCleanup) > 5*time.Minute { - log.Printf("Standby list exceeds %d%% of free memory, cleaning...\n", PercentThreshold) - if err := EmptyStandbyList(); err != nil { - log.Printf("Error cleaning standby list: %v\n", err) - } else { - log.Println("Standby list cleaned successfully") - lastCleanup = time.Now() - } - } - tray.UpdateTooltip(standbySize, freeSize, percent) -} - -func EmptyStandbyList() error { - privileges := []string{"SeProfileSingleProcessPrivilege", "SeIncreaseQuotaPrivilege", "SeDebugPrivilege"} - for _, privilege := range privileges { - if err := elevation.EnablePrivilege(privilege); err != nil { - return fmt.Errorf("failed to enable privilege %s: %v", privilege, err) - } - log.Printf("Enabled privilege: %s\n", privilege) - } - log.Println("All privileges enabled successfully") - - ntdll := windows.NewLazySystemDLL("ntdll.dll") - if err := ntdll.Load(); err != nil { - return fmt.Errorf("failed to load ntdll.dll: %v", err) - } - log.Println("ntdll.dll loaded successfully") - - procNtSetSystemInformation := ntdll.NewProc("NtSetSystemInformation") - memoryPurgeStandbyList := uint32(MemoryPurgeStandbyList) - r1, _, err := procNtSetSystemInformation.Call( - uintptr(SystemMemoryListInformationClass), - uintptr(unsafe.Pointer(&memoryPurgeStandbyList)), - unsafe.Sizeof(memoryPurgeStandbyList), - ) - if r1 != 0 { - return fmt.Errorf("NtSetSystemInformation call failed: %v", err) - } - log.Println("NtSetSystemInformation call succeeded") - - return nil -} diff --git a/internal/tray/assets/icon.ico b/internal/tray/assets/icon.ico index 765a2c2502b5eecbdbb33e3e7dbeda1f9e34afc8..b1c011142cabb19a05c7160ff63e0345bd087253 100644 GIT binary patch literal 138942 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%0Dej}$(DnId-SCv#( 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
*SW1V>-x->z|b4Z|=rfG^ge3 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˂M@< zu2{{gP%ke7-`W_7U!Ow05rN~bxMs%stmDT$Xdd(@!pSp*B)|U%yqx=1?#fO~lz%sD zAm4ZEUV;v`bm=a4HfkvKG2aS9M`9Z{5c#5J>lmEn^opL|;H^H)bK26EPl ziF@FKcmbR^?qVl)(r4No)>LN9ctW=SvQyt->NdQ%w__0W@zz`K$f+my6wFWr9n=wj zo#&i3aQ+wVvr@Qn<$&q}OGb_ysjo17G4C_&_!05t>{=Bt@8V3yXI0vYAp+&F>K#!o7)Qr6HC<0}sZ-p71B929wavi)&@c zhGV-xAGq=W$L-yE%JgPUrA3Nk)3iD2D0z0?JPEsFc!W(sL4ks5-MY^tBMtLrQ}+QM z;DNN^uW^sUra?|knKutXZcR>XkT@WH(JtdVOy(`-oWFVLkk^@(uUIL^b?vBi`w*A$ z<-?Yx4vU2^(kJOKYm(mo#1k{Mj%XU-dzdCoa_;jtSmfAyv1EYiGuVR39bDW;{BD+? zChUmj{A};Hs#)J$L-;cKDQrfK9D(ryhkgt`4IWwNuSvw2;?1Rlsne!AF`W3OklCLDU*OAFdK+}1 zF(~M|DwWF1<}bh2*LvGw&Ufz#V!ROJ5(y_cHfKzla&(GR+3F3+6yJEe7B{OFh z$6=!R&5L)!o|*JvvcZSO0#V+Rg((X}@jzW*5gb$2TM z@yO(?+Bx#!%24pbl|hW}Vh(Q?$jFAUi<@AMW_9#2&`{%FoiZ!Pvu)Z)p`igDK?fgq z>Llk>uB`WRe{W{_^D)0QWt0Zor#wIpZ>nv&6zBuX*ukaO*vq z-(x+``wYIeZ24ZAH){m=S99b*ES$M^n=fm+;_Hn!-qKfjX~4XPF^nLQXUwep-&(A9P7C+ub(586KEsA zXGrY_pJ5SVN9aHNI>JYNrp#eFkN=fd-&EL|7@HP6{|IvfYhI>Z{_VFv$lA5*WHsh} zQ$80IlpI@*e#TU1Xy6;nJ!??E7HGP;JFZ8Y(4os>++l5EQ|Jh*xpX-e0T3i_J6JaL zaULV4TO*F`$hA^+x%6b!c*u+YFyPKIeY7lOrh};i^j%3w<#peqyC=+%k2i>{`m9hc zx)HqZ&fhnB+n)!0fEdZ0|Gr69tz0FY;45OVP^u!|(XgRx?GB#-vLM_G@&Lzg;5**l zsDaeMJ|5^6Xs3tzbvk}q>rsWnq)C$r#>iNk7TkY?wc)oy_?R!e@S>d8|1{y;56&m@ z!{5iw1CoSTa&}gloY4CinL2fHWZs9-4cQxFT_{sVS`b8kr4TPnB2S-4a~9Mr6ghpd4`q^fKo5=vWW>qWoI(QHA%KHJ@mo`ET{gm2!H&ei-YD z7ut$f)~hEQkL?QlBc`Z!LT|(rddlRc`O>Vs&XpH``D4)k6d645e65H0VD|EsgS(La zK6mas*jU*LGuy(EYl5mi2>P6->%Oe&pe4iuZC_ixr*g$)x$U-FbZ#dr@Zw7=#6Lp= zQ>IMQXZ&@Zb>wp?ykV@fDfAQ+Vc%0A=a6F6$Lr1W(Y6HmI*g5!s)zaj@`Zj!xmNm4 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 jQ 0 { + standbySize = dst[0].StandbyCacheCoreBytes + dst[0].StandbyCacheNormalPriorityBytes + dst[0].StandbyCacheReserveBytes + freeSize = dst[0].AvailableBytes + return standbySize, freeSize, nil + } + return 0, 0, fmt.Errorf("no data returned from WMI query") +} + +// getCurrentProcessHandle retrieves the handle of the current process +func getCurrentProcessHandle() windows.Handle { + return windows.CurrentProcess() +} + +// cleanProcessMemory sets the process working set size to minimum and maximum values +func cleanProcessMemory() error { + hProcess := getCurrentProcessHandle() + ret, _, err := ProcSetProcessWorkingSetSize.Call(uintptr(hProcess), uintptr(^uint32(0)), uintptr(^uint32(0))) + if ret == 0 { + return fmt.Errorf("failed to set process working set size: %v", err) + } + + return nil +} + +// cleanSystemWorkingSet empties the working set of the current process +func cleanSystemWorkingSet() error { + hProcess := getCurrentProcessHandle() + + ret, _, err := ProcEmptyWorkingSet.Call(uintptr(hProcess)) + if ret == 0 { + return fmt.Errorf("failed to empty working set: %v", err) + } + + return nil +} + +// cleanSystemMemory frees memory of all processes by emptying their working sets +func cleanSystemMemory() error { + snapshot, err := windows.CreateToolhelp32Snapshot(windows.TH32CS_SNAPPROCESS, 0) + if err != nil { + return fmt.Errorf("failed to create snapshot: %v", err) + } + defer windows.CloseHandle(snapshot) + + var pe windows.ProcessEntry32 + pe.Size = uint32(unsafe.Sizeof(pe)) + if err := windows.Process32First(snapshot, &pe); err != nil { + return fmt.Errorf("failed to get first process: %v", err) + } + + for { + hProcess, err := windows.OpenProcess(windows.PROCESS_QUERY_INFORMATION|windows.PROCESS_SET_QUOTA, false, pe.ProcessID) + if err == nil { + ProcEmptyWorkingSet.Call(uintptr(hProcess)) + windows.CloseHandle(hProcess) + } + + err = windows.Process32Next(snapshot, &pe) + if err != nil { + break + } + } + + return nil +} diff --git a/internal/windows_api/dll_libs.go b/internal/windows_api/dll_libs.go new file mode 100644 index 0000000..9d4f695 --- /dev/null +++ b/internal/windows_api/dll_libs.go @@ -0,0 +1,13 @@ +package windowsapi + +import "syscall" + +// Windows API function definitions +var ( + ModKernel32 = syscall.NewLazyDLL("kernel32.dll") + ModPsapi = syscall.NewLazyDLL("psapi.dll") + Ntdll = syscall.NewLazyDLL("ntdll.dll") + ProcSetProcessWorkingSetSize = ModKernel32.NewProc("SetProcessWorkingSetSize") + ProcEmptyWorkingSet = ModPsapi.NewProc("EmptyWorkingSet") + NtSetSystemInformation = Ntdll.NewProc("NtSetSystemInformation") +) \ No newline at end of file diff --git a/internal/elevation/elevation.go b/internal/windows_api/privileges.go similarity index 50% rename from internal/elevation/elevation.go rename to internal/windows_api/privileges.go index e2591ff..fab55ee 100644 --- a/internal/elevation/elevation.go +++ b/internal/windows_api/privileges.go @@ -1,9 +1,8 @@ // Description: This package provides functions to elevate the current process to run as administrator. -package elevation +package windowsapi import ( "fmt" - "log" "os" "strings" "syscall" @@ -11,7 +10,12 @@ import ( "golang.org/x/sys/windows" ) -func RunMeElevated() { +// RunAsAdmin runs the current executable with administrative privileges. +// It uses the Windows API function ShellExecute to execute the executable +// with the "runas" verb, which prompts the user for consent to elevate +// the process. The function takes no arguments and returns no values. +// If an error occurs during the execution, it will be printed to the console. +func RunAsAdmin() { verb := "runas" exe, _ := os.Executable() cwd, _ := os.Getwd() @@ -30,25 +34,40 @@ func RunMeElevated() { } } -func EnablePrivilege(privilegeName string) error { - log.Printf("Attempting to enable privilege: %s\n", privilegeName) +// GrantPrivileges grants specific privileges to the current process. +// It enables the privileges specified in the `privileges` slice. +// If any privilege fails to be enabled, an error is returned. +func GrantPrivileges() error { + privileges := []string{"SeProfileSingleProcessPrivilege", "SeIncreaseQuotaPrivilege", "SeDebugPrivilege"} + for _, privilege := range privileges { + if err := enablePrivilege(privilege); err != nil { + return fmt.Errorf("failed to enable privilege %s: %v", privilege, err) + } + } + + return nil +} + +// enablePrivilege enables the specified privilege for the current process. +// It takes a privilegeName string as input and returns an error if any. +// The function uses the Windows API to lookup the privilege value, open the process token, +// adjust the token privileges, and enable the specified privilege. +// If any error occurs during the process, it returns an error with a descriptive message. +func enablePrivilege(privilegeName string) error { var luid windows.LUID err := windows.LookupPrivilegeValue(nil, windows.StringToUTF16Ptr(privilegeName), &luid) if err != nil { return fmt.Errorf("LookupPrivilegeValue error: %v", err) } - log.Printf("LookupPrivilegeValue succeeded for privilege: %s\n", privilegeName) var token windows.Token processHandle := windows.CurrentProcess() - log.Println("GetCurrentProcess succeeded") err = windows.OpenProcessToken(processHandle, windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, &token) if err != nil { return fmt.Errorf("OpenProcessToken error: %v", err) } defer token.Close() - log.Println("OpenProcessToken succeeded") tp := windows.Tokenprivileges{ PrivilegeCount: 1, @@ -61,12 +80,10 @@ func EnablePrivilege(privilegeName string) error { if err != nil { return fmt.Errorf("AdjustTokenPrivileges error: %v", err) } - log.Printf("AdjustTokenPrivileges succeeded for privilege: %s\n", privilegeName) + return nil } func IsRunAsAdmin() bool { - elevated := windows.GetCurrentProcessToken().IsElevated() - fmt.Printf("Admin: %v\n", elevated) - return elevated + return windows.GetCurrentProcessToken().IsElevated() }