1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
15 "golang.org/x/sys/windows"
18 func TestWin32finddata(t *testing.T) {
19 dir, err := ioutil.TempDir("", "go-build")
21 t.Fatalf("failed to create temp directory: %v", err)
23 defer os.RemoveAll(dir)
25 path := filepath.Join(dir, "long_name.and_extension")
26 f, err := os.Create(path)
28 t.Fatalf("failed to create %v: %v", path, err)
33 fd windows.Win32finddata
35 pad [10]byte // to protect ourselves
38 var want byte = 2 // it is unlikely to have this character in the filename
41 pathp, _ := windows.UTF16PtrFromString(path)
42 h, err := windows.FindFirstFile(pathp, &(x.fd))
44 t.Fatalf("FindFirstFile failed: %v", err)
46 err = windows.FindClose(h)
48 t.Fatalf("FindClose failed: %v", err)
52 t.Fatalf("memory corruption: want=%d got=%d", want, x.got)
56 func TestFormatMessage(t *testing.T) {
57 dll := windows.MustLoadDLL("pdh.dll")
59 pdhOpenQuery := func(datasrc *uint16, userdata uint32, query *windows.Handle) (errno uintptr) {
60 r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhOpenQueryW").Addr(), 3, uintptr(unsafe.Pointer(datasrc)), uintptr(userdata), uintptr(unsafe.Pointer(query)))
64 pdhCloseQuery := func(query windows.Handle) (errno uintptr) {
65 r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhCloseQuery").Addr(), 1, uintptr(query), 0, 0)
70 name, err := windows.UTF16PtrFromString("no_such_source")
74 errno := pdhOpenQuery(name, 0, &q)
77 t.Fatal("PdhOpenQuery succeeded, but expected to fail.")
80 const flags uint32 = syscall.FORMAT_MESSAGE_FROM_HMODULE | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS
81 buf := make([]uint16, 300)
82 _, err = windows.FormatMessage(flags, uintptr(dll.Handle), uint32(errno), 0, buf, nil)
84 t.Fatal("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, errno, err)
88 func abort(funcname string, err error) {
89 panic(funcname + " failed: " + err.Error())
92 func ExampleLoadLibrary() {
93 h, err := windows.LoadLibrary("kernel32.dll")
95 abort("LoadLibrary", err)
97 defer windows.FreeLibrary(h)
98 proc, err := windows.GetProcAddress(h, "GetVersion")
100 abort("GetProcAddress", err)
102 r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0)
104 minor := uint8(r >> 8)
105 build := uint16(r >> 16)
106 print("windows version ", major, ".", minor, " (Build ", build, ")\n")