windows.go

 1//go:build windows
 2
 3package internal
 4
 5import (
 6	"errors"
 7
 8	"golang.org/x/sys/windows"
 9)
10
11// Just a dummy.
12var (
13	SyscallEACCES = errors.New("dummy")
14	UnixEACCES    = errors.New("dummy")
15)
16
17func SetRlimit()                                    {}
18func Maxfiles() uint64                              { return 1<<64 - 1 }
19func Mkfifo(path string, mode uint32) error         { return errors.New("no FIFOs on Windows") }
20func Mknod(path string, mode uint32, dev int) error { return errors.New("no device nodes on Windows") }
21
22func HasPrivilegesForSymlink() bool {
23	var sid *windows.SID
24	err := windows.AllocateAndInitializeSid(
25		&windows.SECURITY_NT_AUTHORITY,
26		2,
27		windows.SECURITY_BUILTIN_DOMAIN_RID,
28		windows.DOMAIN_ALIAS_RID_ADMINS,
29		0, 0, 0, 0, 0, 0,
30		&sid)
31	if err != nil {
32		return false
33	}
34	defer windows.FreeSid(sid)
35	token := windows.Token(0)
36	member, err := token.IsMember(sid)
37	if err != nil {
38		return false
39	}
40	return member || token.IsElevated()
41}