daemon_windows.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package daemon
  2. import (
  3. "fmt"
  4. "strconv"
  5. "syscall"
  6. "unsafe"
  7. "github.com/go-check/check"
  8. "golang.org/x/sys/windows"
  9. )
  10. func openEvent(desiredAccess uint32, inheritHandle bool, name string, proc *windows.LazyProc) (handle syscall.Handle, err error) {
  11. namep, _ := syscall.UTF16PtrFromString(name)
  12. var _p2 uint32
  13. if inheritHandle {
  14. _p2 = 1
  15. }
  16. r0, _, e1 := proc.Call(uintptr(desiredAccess), uintptr(_p2), uintptr(unsafe.Pointer(namep)))
  17. handle = syscall.Handle(r0)
  18. if handle == syscall.InvalidHandle {
  19. err = e1
  20. }
  21. return
  22. }
  23. func pulseEvent(handle syscall.Handle, proc *windows.LazyProc) (err error) {
  24. r0, _, _ := proc.Call(uintptr(handle))
  25. if r0 != 0 {
  26. err = syscall.Errno(r0)
  27. }
  28. return
  29. }
  30. // SignalDaemonDump sends a signal to the daemon to write a dump file
  31. func SignalDaemonDump(pid int) {
  32. modkernel32 := windows.NewLazySystemDLL("kernel32.dll")
  33. procOpenEvent := modkernel32.NewProc("OpenEventW")
  34. procPulseEvent := modkernel32.NewProc("PulseEvent")
  35. ev := "Global\\docker-daemon-" + strconv.Itoa(pid)
  36. h2, _ := openEvent(0x0002, false, ev, procOpenEvent)
  37. if h2 == 0 {
  38. return
  39. }
  40. pulseEvent(h2, procPulseEvent)
  41. }
  42. func signalDaemonReload(pid int) error {
  43. return fmt.Errorf("daemon reload not supported")
  44. }
  45. func cleanupExecRoot(c *check.C, execRoot string) {
  46. }