mirror of
https://github.com/golang/sys.git
synced 2026-02-08 11:46:04 +03:00
windows: correct signature of recently added GetWindowThreadProcessId
This function returns 0 and sets last error on failure. While this isn't said explicitly on MSDN, there's no PID 0, and trivial reverse engineering shows that this is the case. For example: .text:00000001800035ED loc_1800035ED: ; CODE XREF: GetWindowThreadProcessId+23↑j .text:00000001800035ED ; GetWindowThreadProcessId+3D↑j ... .text:00000001800035ED mov ecx, 578h ; LastError .text:00000001800035F2 call cs:__imp_RtlSetLastWin32Error .text:00000001800035F9 nop dword ptr [rax+rax+00h] .text:00000001800035FE .text:00000001800035FE loc_1800035FE: ; CODE XREF: GetWindowThreadProcessId+65↑j .text:00000001800035FE xor eax, eax .text:0000000180003600 jmp short loc_1800035AA This function was also just added by a user who is likely its only consumer, so this error is not too late to fix. Change-Id: I5dd24e78c006686bb8f1288ad0fe63cd67df56a6 Reviewed-on: https://go-review.googlesource.com/c/sys/+/285272 Trust: Jason A. Donenfeld <Jason@zx2c4.com> Trust: Alex Brainman <alex.brainman@gmail.com> Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
@@ -215,7 +215,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
||||
//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW
|
||||
//sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error)
|
||||
//sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW
|
||||
//sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32) = user32.GetWindowThreadProcessId
|
||||
//sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId
|
||||
//sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow
|
||||
//sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW
|
||||
//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx
|
||||
|
||||
@@ -2904,9 +2904,12 @@ func GetShellWindow() (shellWindow HWND) {
|
||||
return
|
||||
}
|
||||
|
||||
func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32) {
|
||||
r0, _, _ := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0)
|
||||
func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0)
|
||||
tid = uint32(r0)
|
||||
if tid == 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user