/// <summary> /// Helper function to create job object /// </summary> private void CreateJobObject() { this.jobHandle = WinAPI.CreateJobObject(IntPtr.Zero, null); if (this.jobHandle == IntPtr.Zero) { EqtTrace.Warning("CreateJobObject : Failed {0}", Marshal.GetLastWin32Error()); } if (ProcessJobObject.Is32Bit) { BasicLimits32 basicInfo = default(BasicLimits32); basicInfo.LimitFlags = LimitFlags.LimitKillOnJobClose; ExtendedLimits32 extendedInfo = default(ExtendedLimits32); extendedInfo.BasicLimits = basicInfo; JobObjectInfo info = default(JobObjectInfo); info.basicLimits32 = basicInfo; info.extendedLimits32 = extendedInfo; if (!WinAPI.SetInformationJobObject( this.jobHandle, JobObjectInfoClass.ExtendedLimitInformation, ref info, Marshal.SizeOf <ExtendedLimits32>())) { EqtTrace.Warning("CreateJobObject [32] : Failed to setInformation {0}", Marshal.GetLastWin32Error()); } } else { BasicLimits64 basicInfo = default(BasicLimits64); basicInfo.LimitFlags = LimitFlags.LimitKillOnJobClose; ExtendedLimits64 extendedInfo = default(ExtendedLimits64); extendedInfo.BasicLimits = basicInfo; JobObjectInfo info = default(JobObjectInfo); info.basicLimits64 = basicInfo; info.extendedLimits64 = extendedInfo; if (!WinAPI.SetInformationJobObject( this.jobHandle, JobObjectInfoClass.ExtendedLimitInformation, ref info, Marshal.SizeOf <ExtendedLimits64>())) { EqtTrace.Warning("CreateJobObject [64] : Failed to setInformation {0}", Marshal.GetLastWin32Error()); } } }
public static extern bool SetInformationJobObject( [In] IntPtr jobHandle, [In] JobObjectInfoClass jobObjectInfoClass, [In] ref JobObjectInfo jobObjectInfo, [In] int jobObjectInfoLength);