daemon_windows.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package main
  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. func signalDaemonDump(pid int) {
  31. modkernel32 := windows.NewLazySystemDLL("kernel32.dll")
  32. procOpenEvent := modkernel32.NewProc("OpenEventW")
  33. procPulseEvent := modkernel32.NewProc("PulseEvent")
  34. ev := "Global\\docker-daemon-" + strconv.Itoa(pid)
  35. h2, _ := openEvent(0x0002, false, ev, procOpenEvent)
  36. if h2 == 0 {
  37. return
  38. }
  39. pulseEvent(h2, procPulseEvent)
  40. }
  41. func signalDaemonReload(pid int) error {
  42. return fmt.Errorf("daemon reload not supported")
  43. }
  44. func cleanupExecRoot(c *check.C, execRoot string) {
  45. }