示例#1
0
        public JobObject(string jobObjectName)
        {
            if (string.IsNullOrEmpty(jobObjectName))
            {
                jobObjectName = null;
            }

            this.name = jobObjectName;

            this.jobHandle = NativeMethods.CreateJobObject(IntPtr.Zero, jobObjectName);
            if (this.jobHandle.IsInvalid)
            {
                if (jobObjectName == null)
                {
                    int error = Marshal.GetLastWin32Error();
                    throw new Win32Exception(error, "CreateJobObject failed.");
                }
                else
                {
                    // JOB_OBJECT_ALL_ACCESS = 0x1F001F
                    this.jobHandle = NativeMethods.OpenJobObject(0x1F001F, false, jobObjectName);
                    if (this.jobHandle.IsInvalid)
                    {
                        int error = Marshal.GetLastWin32Error();
                        throw new Win32Exception(error, "OpenJobObject failed.");
                    }
                }
            }

            this.UpdateExtendedLimit();
        }
示例#2
0
        public static JobObject Attach(string jobObjectName)
        {
            if (string.IsNullOrEmpty(jobObjectName))
            {
                throw new ArgumentNullException("jobObjectName");
            }

            JobObjectHandle jobHandle = null;

            JobObject result     = null;
            JobObject tempResult = null;

            try
            {
                // JOB_OBJECT_ALL_ACCESS = 0x1F001F
                jobHandle = NativeMethods.OpenJobObject(0x1F001F, false, jobObjectName);

                if (jobHandle.IsInvalid)
                {
                    int error = Marshal.GetLastWin32Error();
                    throw new Win32Exception(error, "Failed to open job object.");
                }

                tempResult = new JobObject(jobHandle, jobObjectName);

                jobHandle  = null;
                result     = tempResult;
                tempResult = null;
            }
            finally
            {
                if (jobHandle != null)
                {
                    jobHandle.Dispose();
                }

                if (tempResult != null)
                {
                    tempResult.Dispose();
                }
            }

            return(result);
        }
示例#3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="JobObject"/> class. No Windows Job Object is created.
 /// </summary>
 private JobObject(JobObjectHandle jobObject, string jobObjectName)
 {
     this.jobHandle = jobObject;
     this.name      = jobObjectName;
 }
示例#4
0
 public static extern bool AssignProcessToJobObject(JobObjectHandle hJob, IntPtr hProcess);
示例#5
0
 public static extern bool TerminateJobObject(JobObjectHandle hJob, uint uExitCode);
示例#6
0
 public static extern bool SetInformationJobObject(JobObjectHandle hJob, JobObjectInfoClass JobObjectInfoClass, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength);
示例#7
0
 public static extern bool QueryInformationJobObject(JobObjectHandle hJob, JobObjectInfoClass JobObjectInformationClass, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength, IntPtr lpReturnLength);
 public static extern bool TerminateJobObject(JobObjectHandle hJob, uint uExitCode);
示例#9
0
 public static extern bool IsProcessInJob(IntPtr Process, JobObjectHandle hJob, [MarshalAs(UnmanagedType.Bool)] out bool Result);
 public static extern bool QueryInformationJobObject(JobObjectHandle hJob, JobObjectInfoClass JobObjectInformationClass, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength, IntPtr lpReturnLength);
 public static extern bool AssignProcessToJobObject(JobObjectHandle hJob, IntPtr hProcess);
 public static extern bool SetInformationJobObject(JobObjectHandle hJob, JobObjectInfoClass JobObjectInfoClass, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength);
 public static extern bool IsProcessInJob(IntPtr Process, JobObjectHandle hJob, [MarshalAs(UnmanagedType.Bool)] out bool Result);
示例#14
0
        public static JobObject Attach(string jobObjectName)
        {
            if (string.IsNullOrEmpty(jobObjectName))
            {
                throw new ArgumentNullException("jobObjectName");
            }

            JobObjectHandle jobHandle = null;

            JobObject result = null;
            JobObject tempResult = null;

            try
            {
                // JOB_OBJECT_ALL_ACCESS = 0x1F001F
                jobHandle = NativeMethods.OpenJobObject(0x1F001F, false, jobObjectName);

                if (jobHandle.IsInvalid)
                {
                    int error = Marshal.GetLastWin32Error();
                    throw new Win32Exception(error, "Failed to open job object.");
                }

                tempResult = new JobObject(jobHandle, jobObjectName);

                jobHandle = null;
                result = tempResult;
                tempResult = null;
            }
            finally
            {
                if (jobHandle != null)
                {
                    jobHandle.Dispose();
                }

                if (tempResult != null)
                {
                    tempResult.Dispose();
                }
            }

            return result;
        }
示例#15
0
        public JobObject(string jobObjectName)
        {
            if (string.IsNullOrEmpty(jobObjectName))
            {
                jobObjectName = null;
            }

            this.name = jobObjectName;

            this.jobHandle = NativeMethods.CreateJobObject(IntPtr.Zero, jobObjectName);
            if (this.jobHandle.IsInvalid)
            {
                if (jobObjectName == null)
                {
                    int error = Marshal.GetLastWin32Error();
                    throw new Win32Exception(error, "CreateJobObject failed.");
                }
                else
                {
                    // JOB_OBJECT_ALL_ACCESS = 0x1F001F
                    this.jobHandle = NativeMethods.OpenJobObject(0x1F001F, false, jobObjectName);
                    if (this.jobHandle.IsInvalid)
                    {
                        int error = Marshal.GetLastWin32Error();
                        throw new Win32Exception(error, "OpenJobObject failed.");
                    }
                }
            }

            this.UpdateExtendedLimit();
        }
示例#16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="JobObject"/> class. No Windows Job Object is created.
 /// </summary>
 private JobObject(JobObjectHandle jobObject, string jobObjectName)
 {
     this.jobHandle = jobObject;
     this.name = jobObjectName;
 }