1// Copyright 2016 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.
4
5//go:build windows
6
7// Package sysdll is an internal leaf package that records and reports
8// which Windows DLL names are used by Go itself. These DLLs are then
9// only loaded from the System32 directory. See Issue 14959.
10package sysdll
11
12// IsSystemDLL reports whether the named dll key (a base name, like
13// "foo.dll") is a system DLL which should only be loaded from the
14// Windows SYSTEM32 directory.
15//
16// Filenames are case sensitive, but that doesn't matter because
17// the case registered with Add is also the same case used with
18// LoadDLL later.
19//
20// It has no associated mutex and should only be mutated serially
21// (currently: during init), and not concurrent with DLL loading.
22var IsSystemDLL = map[string]bool{}
23
24// Add notes that dll is a system32 DLL which should only be loaded
25// from the Windows SYSTEM32 directory. It returns its argument back,
26// for ease of use in generated code.
27func Add(dll string) string {
28	IsSystemDLL[dll] = true
29	return dll
30}
31