From 31514732b21be2eb9e7d0a1142f76dced4694d7a Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Mon, 30 Mar 2026 23:28:07 -0700 Subject: [PATCH] Add win32k feature if available in default Signed-off-by: Derek McGowan --- defaults_windows.go | 17 +++++++++++++++++ defaults_windows_test.go | 1 + 2 files changed, 18 insertions(+) diff --git a/defaults_windows.go b/defaults_windows.go index 64e2846..eb87f31 100644 --- a/defaults_windows.go +++ b/defaults_windows.go @@ -19,11 +19,27 @@ package platforms import ( "fmt" "runtime" + "sync" specs "github.com/opencontainers/image-spec/specs-go/v1" "golang.org/x/sys/windows" ) +var ( + win32kOnce sync.Once + win32kFeatures []string +) + +func detectWin32k() []string { + win32kOnce.Do(func() { + user32 := windows.NewLazySystemDLL("user32.dll") + if err := user32.Load(); err == nil { + win32kFeatures = []string{"win32k"} + } + }) + return win32kFeatures +} + // DefaultSpec returns the current platform's default platform specification. func DefaultSpec() specs.Platform { major, minor, build := windows.RtlGetNtVersionNumbers() @@ -31,6 +47,7 @@ func DefaultSpec() specs.Platform { OS: runtime.GOOS, Architecture: runtime.GOARCH, OSVersion: fmt.Sprintf("%d.%d.%d", major, minor, build), + OSFeatures: detectWin32k(), // The Variant field will be empty if arch != ARM. Variant: cpuVariant(), } diff --git a/defaults_windows_test.go b/defaults_windows_test.go index c3193a5..3fafb08 100644 --- a/defaults_windows_test.go +++ b/defaults_windows_test.go @@ -32,6 +32,7 @@ func TestDefault(t *testing.T) { OS: runtime.GOOS, Architecture: runtime.GOARCH, OSVersion: fmt.Sprintf("%d.%d.%d", major, minor, build), + OSFeatures: detectWin32k(), Variant: cpuVariant(), } p := DefaultSpec()