1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| // Copyright 2016 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 os
|
| import (
| "internal/syscall/windows"
| "syscall"
| )
|
| func getModuleFileName(handle syscall.Handle) (string, error) {
| n := uint32(1024)
| var buf []uint16
| for {
| buf = make([]uint16, n)
| r, err := windows.GetModuleFileName(handle, &buf[0], n)
| if err != nil {
| return "", err
| }
| if r < n {
| break
| }
| // r == n means n not big enough
| n += 1024
| }
| return syscall.UTF16ToString(buf), nil
| }
|
| func executable() (string, error) {
| return getModuleFileName(0)
| }
|
|