in ibazel/process_group/process_group_windows.go [43:91]
func (pg *winProcessGroup) Start() error {
if pg.job != 0 {
return errors.New("job already started")
}
err := pg.root.Start()
if err != nil {
return err
}
pg.job, err = createJobObject()
if err != nil {
return err
}
pg.ioport, err = syscall.CreateIoCompletionPort(syscall.InvalidHandle, syscall.Handle(0), 0, 1)
if err != nil {
return err
}
port := jobObjectAssociationCompletionPort{
CompletionKey: pg.job,
CompletionPort: pg.ioport,
}
err = setInformationJobObject(pg.job, jobObjectAssociateCompletionPortInformation, uintptr(unsafe.Pointer(&port)), unsafe.Sizeof(port))
if err != nil {
return err
}
process, err := syscall.OpenProcess(processAllAccess, false, uint32(pg.root.Process.Pid))
if err != nil {
return err
}
err = assignProcessToJobObject(pg.job, process)
if err != nil {
return err
}
err = ntResumeProcess(process)
if err != nil {
return err
}
syscall.CloseHandle(process)
return nil
}