func setInformationJobObject(hJob syscall.Handle, JobObjectInfoClass uint32, lpJobObjectInfo unsafe.Pointer, cbJobObjectInfoLength uint32) error {
	ret, _, err := procSetInformationJobObject.Call(
		uintptr(hJob),
		uintptr(JobObjectInfoClass),
		uintptr(lpJobObjectInfo),
		uintptr(cbJobObjectInfoLength),
	)
	if ret == 0 {
		return err
	}
	return nil
}
BOOL WINAPI SetInformationJobObject(
_In_ HANDLE             hJob,
_In_ JOBOBJECTINFOCLASS JobObjectInfoClass,
_In_ LPVOID             lpJobObjectInfo,
_In_ DWORD              cbJobObjectInfoLength
);
https://msdn.microsoft.com/en-us/ms686216
package win32
import (
	"fmt"
	"syscall"
	"unsafe"
)
var (
	procCreateJobObjectW         = kernel32DLL.NewProc("CreateJobObjectW")
	procAssignProcessToJobObject = kernel32DLL.NewProc("AssignProcessToJobObject")
)
func createJobObject(attr *syscall.SecurityAttributes, name string) (syscall.Handle, error) {
	ret, _, err := procCreateJobObjectW.Call(
		uintptr(unsafe.Pointer(attr)),
		uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(name))),
	)
	if err != syscall.Errno(0) {
		return 0, err
	}
	return syscall.Handle(ret), nil
}
func assignProcessToJobObject(hJob syscall.Handle, hProcess syscall.Handle) error {
	ret, _, err := procAssignProcessToJobObject.Call(
		uintptr(hJob),
		uintptr(hProcess),
	)
	if ret == 0 {
		return err
	}
	return nil
}