diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go index b99b6f62..d3b59ae6 100644 --- a/windows/syscall_windows.go +++ b/windows/syscall_windows.go @@ -277,8 +277,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx //sys VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery //sys VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx -//sys ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uint32, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory -//sys WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uint32, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory +//sys ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory +//sys WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory //sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile //sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW //sys FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW diff --git a/windows/syscall_windows_test.go b/windows/syscall_windows_test.go index 9ceb1a41..c285b391 100644 --- a/windows/syscall_windows_test.go +++ b/windows/syscall_windows_test.go @@ -787,7 +787,7 @@ func TestReadWriteProcessMemory(t *testing.T) { } buffer := make([]byte, len(testBuffer)) - err = windows.ReadProcessMemory(process, uintptr(unsafe.Pointer(&testBuffer[0])), &buffer[0], uint32(len(buffer)), nil) + err = windows.ReadProcessMemory(process, uintptr(unsafe.Pointer(&testBuffer[0])), &buffer[0], uintptr(len(buffer)), nil) if err != nil { t.Errorf("ReadProcessMemory failed: %v", err) } @@ -796,7 +796,7 @@ func TestReadWriteProcessMemory(t *testing.T) { } buffer = []byte{0xDE, 0xAD, 0xBE, 0xEF} - err = windows.WriteProcessMemory(process, uintptr(unsafe.Pointer(&testBuffer[0])), &buffer[0], uint32(len(buffer)), nil) + err = windows.WriteProcessMemory(process, uintptr(unsafe.Pointer(&testBuffer[0])), &buffer[0], uintptr(len(buffer)), nil) if err != nil { t.Errorf("WriteProcessMemory failed: %v", err) } @@ -818,8 +818,8 @@ func TestVirtualProtect(t *testing.T) { origProtect := memBasicInfo.Protect var oldProtect uint32 - var newProtect uint32 = windows.PAGE_EXECUTE_READWRITE - err = windows.VirtualProtect(uintptr(unsafe.Pointer(&testBuffer[0])), uintptr(len(testBuffer)), newProtect, &oldProtect) // NB: Golang does not like it if you remove permissions + var newProtect uint32 = windows.PAGE_EXECUTE_READWRITE // Binary will crash if you remove read-write permissions, so add execute instead. + err = windows.VirtualProtect(uintptr(unsafe.Pointer(&testBuffer[0])), uintptr(len(testBuffer)), newProtect, &oldProtect) if err != nil { t.Fatalf("VirtualProtect failed: %v", err) } @@ -863,8 +863,8 @@ func TestVirtualProtectEx(t *testing.T) { origProtect := memBasicInfo.Protect var oldProtect uint32 - var newProtect uint32 = windows.PAGE_EXECUTE_READWRITE - err = windows.VirtualProtectEx(process, uintptr(unsafe.Pointer(&testBuffer[0])), uintptr(len(testBuffer)), newProtect, &oldProtect) // NB: Golang does not like it if you remove permissions + var newProtect uint32 = windows.PAGE_EXECUTE_READWRITE // Binary will crash if you remove read-write permissions, so add execute instead. + err = windows.VirtualProtectEx(process, uintptr(unsafe.Pointer(&testBuffer[0])), uintptr(len(testBuffer)), newProtect, &oldProtect) if err != nil { t.Fatalf("VirtualProtectEx failed: %v", err) } diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go index 91410a3c..4ea788e4 100644 --- a/windows/zsyscall_windows.go +++ b/windows/zsyscall_windows.go @@ -2641,7 +2641,7 @@ func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) ( return } -func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uint32, numberOfBytesRead *uintptr) (err error) { +func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) { r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0) if r1 == 0 { err = errnoErr(e1) @@ -3083,7 +3083,7 @@ func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) return } -func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uint32, numberOfBytesWritten *uintptr) (err error) { +func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) { r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0) if r1 == 0 { err = errnoErr(e1)