예제 #1
0
 /// <summary>
 /// Create a debug object
 /// </summary>
 /// <param name="name">The debug object name (can be null)</param>
 /// <param name="root">The root directory for relative names</param>
 /// <param name="flags">Debug object flags.</param>
 /// <returns>The debug object</returns>
 public static NtDebug Create(string name, NtObject root, DebugObjectFlags flags)
 {
     using (ObjectAttributes obja = new ObjectAttributes(name, AttributeFlags.CaseInsensitive, root))
     {
         return(Create(obja, DebugAccessRights.MaximumAllowed, flags));
     }
 }
예제 #2
0
        /// <summary>
        /// Set kill process on close flag.
        /// </summary>
        /// <param name="kill_on_close">The flag state.</param>
        /// <param name="throw_on_error">True to throw on error.</param>
        /// <returns>The NT status code.</returns>
        public NtStatus SetKillOnClose(bool kill_on_close, bool throw_on_error)
        {
            DebugObjectFlags flags = kill_on_close ? DebugObjectFlags.KillOnClose : DebugObjectFlags.None;

            using (var buffer = ((int)flags).ToBuffer()) {
                return(NtSystemCalls.NtSetInformationDebugObject(Handle, DebugObjectInformationClass.DebugObjectKillProcessOnExitInformation,
                                                                 buffer, buffer.Length, out int return_length).ToNtException(throw_on_error));
            }
        }
        public void SetFlags(DebugObjectFlags flags)
        {
            unsafe
            {
                int retLength;

                Win32.NtSetInformationDebugObject(
                    this,
                    DebugObjectInformationClass.DebugObjectFlags,
                    new IntPtr(&flags),
                    sizeof(DebugObjectFlags),
                    out retLength
                    ).ThrowIf();
            }
        }
예제 #4
0
        public void SetFlags(DebugObjectFlags flags)
        {
            unsafe
            {
                NtStatus status;
                int      retLength;

                if ((status = Win32.NtSetInformationDebugObject(
                         this,
                         DebugObjectInformationClass.DebugObjectFlags,
                         new IntPtr(&flags),
                         sizeof(DebugObjectFlags),
                         out retLength
                         )) >= NtStatus.Error)
                {
                    Win32.Throw(status);
                }
            }
        }
예제 #5
0
        public static DebugObjectHandle Create(DebugObjectAccess access, string name, ObjectFlags objectFlags, DirectoryHandle rootDirectory, DebugObjectFlags flags)
        {
            NtStatus         status;
            ObjectAttributes oa = new ObjectAttributes(name, objectFlags, rootDirectory);
            IntPtr           handle;

            try
            {
                if ((status = Win32.NtCreateDebugObject(
                         out handle,
                         access,
                         ref oa,
                         flags
                         )) >= NtStatus.Error)
                {
                    Win32.Throw(status);
                }
            }
            finally
            {
                oa.Dispose();
            }

            return(new DebugObjectHandle(handle, true));
        }
예제 #6
0
 public static DebugObjectHandle Create(DebugObjectAccess access, string name, DebugObjectFlags flags)
 {
     return(Create(access, name, 0, null, flags));
 }
예제 #7
0
 /// <summary>
 /// Create a debug object
 /// </summary>
 /// <param name="desired_access">Desired access for the debug object</param>
 /// <param name="object_attributes">Object attributes for debug object</param>
 /// <param name="flags">Debug object flags.</param>
 /// <param name="throw_on_error">True to throw an exception on error.</param>
 /// <returns>The NT status code and object result.</returns>
 public static NtResult <NtDebug> Create(ObjectAttributes object_attributes, DebugAccessRights desired_access, DebugObjectFlags flags, bool throw_on_error)
 {
     return(NtSystemCalls.NtCreateDebugObject(out SafeKernelObjectHandle handle, desired_access, object_attributes, flags).CreateResult(throw_on_error, () => new NtDebug(handle)));
 }
예제 #8
0
 /// <summary>
 /// Create a debug object
 /// </summary>
 /// <param name="desired_access">Desired access for the debug object</param>
 /// <param name="object_attributes">Object attributes for debug object</param>
 /// <param name="flags">Debug object flags.</param>
 /// <returns>The debug object</returns>
 public static NtDebug Create(ObjectAttributes object_attributes, DebugAccessRights desired_access, DebugObjectFlags flags)
 {
     return(Create(object_attributes, desired_access, flags, true).Result);
 }
 public static extern NtStatus NtCreateDebugObject(out SafeKernelObjectHandle DebugObjectHandle,
                                                   DebugAccessRights DesiredAccess, [In] ObjectAttributes ObjectAttributes, DebugObjectFlags Flags);
        public static DebugObjectHandle Create(DebugObjectAccess access, string name, ObjectFlags objectFlags, DirectoryHandle rootDirectory, DebugObjectFlags flags)
        {
            ObjectAttributes oa = new ObjectAttributes(name, objectFlags, rootDirectory);
            IntPtr handle;

            try
            {
                Win32.NtCreateDebugObject(
                    out handle,
                    access,
                    ref oa,
                    flags
                    ).ThrowIf();
            }
            finally
            {
                oa.Dispose();
            }

            return new DebugObjectHandle(handle, true);
        }
 public static DebugObjectHandle Create(DebugObjectAccess access, DebugObjectFlags flags)
 {
     return Create(access, null, flags);
 }