@@ -0,0 +1,38 @@
1+//go:build windows
2+
3+package watcher
4+
5+import (
6+ "syscall"
7+ "unsafe"
8+
9+ "golang.org/x/sys/windows"
10+)
11+
12+var (
13+ kernel32 = windows.NewLazyDLL("kernel32.dll")
14+ procGetProcessHandleCount = kernel32.NewProc("GetProcessHandleCount")
15+)
16+
17+func Ulimit() (uint64, error) {
18+ // Windows doesn't have the same file descriptor limits as Unix systems
19+ // Instead, we can get the current handle count for monitoring purposes
20+ currentProcess := windows.CurrentProcess()
21+
22+ var handleCount uint32
23+ ret, _, err := procGetProcessHandleCount.Call(
24+ uintptr(currentProcess),
25+ uintptr(unsafe.Pointer(&handleCount)),
26+ )
27+
28+ if ret == 0 {
29+ // If the call failed, return a reasonable default
30+ if err != syscall.Errno(0) {
31+ return 2048, nil
32+ }
33+ }
34+
35+ // Windows typically allows much higher handle counts than Unix file descriptors
36+ // Return the current count, which serves as a baseline for monitoring
37+ return uint64(handleCount), nil
38+}