From 0959dfb96afa9b1855d99c584b889b37e8d05882 Mon Sep 17 00:00:00 2001 From: Starainrt Date: Tue, 2 Apr 2024 10:16:13 +0800 Subject: [PATCH] update --- kernel32.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/kernel32.go b/kernel32.go index 64a58e0..fbdc043 100644 --- a/kernel32.go +++ b/kernel32.go @@ -362,3 +362,40 @@ func GlobalAlloc(uFlags DWORD, dwBytes uintptr) (HGLOBAL, error) { } return HGLOBAL(r), nil } + +func GlobalFree(hMem HGLOBAL) error { + kernel32, err := syscall.LoadLibrary("kernel32.dll") + if err != nil { + return err + } + defer syscall.FreeLibrary(kernel32) + gf, err := syscall.GetProcAddress(syscall.Handle(kernel32), "GlobalFree") + if err != nil { + return err + } + r, _, errno := syscall.Syscall(gf, 1, uintptr(hMem), 0, 0) + if r == 0 { + if errno != 0 { + return error(errno) + } + return syscall.EINVAL + } + return nil +} + +func RtlMoveMemory(Destination, Source unsafe.Pointer, Length uintptr) error { + kernel32, err := syscall.LoadLibrary("kernel32.dll") + if err != nil { + return err + } + defer syscall.FreeLibrary(kernel32) + rmv, err := syscall.GetProcAddress(syscall.Handle(kernel32), "RtlMoveMemory") + if err != nil { + return err + } + _, _, errno := syscall.Syscall(rmv, 3, uintptr(unsafe.Pointer(Destination)), uintptr(unsafe.Pointer(Source)), Length) + if errno != 0 { + return error(errno) + } + return nil +}