/// <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)); } }
/// <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(); } }
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); } } }
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)); }
public static DebugObjectHandle Create(DebugObjectAccess access, string name, DebugObjectFlags flags) { return(Create(access, name, 0, null, flags)); }
/// <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))); }
/// <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); }