| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package syscall |
| #include "runtime.h" |
| #include "os.h" |
| |
| func loadlibraryex(filename uintptr) (handle uint32) { |
| handle = (uint32)stdcall(LoadLibraryEx, filename, 0, 0); |
| } |
| |
| func getprocaddress(handle uint32, procname uintptr) (proc uintptr) { |
| proc = (uintptr)stdcall(GetProcAddress, handle, procname); |
| } |
| |
| func Syscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { |
| ·entersyscall(); |
| r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3); |
| r2 = 0; |
| err = (uintptr)stdcall_raw(GetLastError); |
| ·exitsyscall(); |
| } |
| |
| func Syscall6(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { |
| ·entersyscall(); |
| r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3, a4, a5, a6); |
| r2 = 0; |
| err = (uintptr)stdcall_raw(GetLastError); |
| ·exitsyscall(); |
| } |
| |
| func Syscall9(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr, a7 uintptr, a8 uintptr, a9 uintptr) (r1 uintptr, r2 uintptr, lasterr uintptr) { |
| ·entersyscall(); |
| r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); |
| r2 = 0; |
| lasterr = (uintptr)stdcall_raw(GetLastError); |
| ·exitsyscall(); |
| } |
| |
| func RawSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { |
| r1 = (uintptr)stdcall_raw((void*)trap, a1, a2, a3); |
| r2 = 0; |
| err = (uintptr)stdcall_raw(GetLastError); |
| } |