Ejemplo n.º 1
0
        /// <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());
                }
            }
        }
Ejemplo n.º 2
0
 public static extern bool SetInformationJobObject(
     [In] IntPtr jobHandle,
     [In] JobObjectInfoClass jobObjectInfoClass,
     [In] ref JobObjectInfo jobObjectInfo,
     [In] int jobObjectInfoLength);