/// <summary>
 /// lears DACL and adds ACE for an event trace.
 /// </summary>
 /// <param name="guid">The event trace GUID.</param>
 /// <param name="sid">The SID to set.</param>
 /// <param name="access_mask">The access mask to set.</param>
 /// <param name="allow">True to allow, false to deny.</param>
 public static void SetTraceSecurityDacl(Guid guid, Sid sid, TraceAccessRights access_mask, bool allow)
 {
     SetTraceSecurityDacl(guid, sid, access_mask, allow, true);
 }
 /// <summary>
 /// Modify trace security.
 /// </summary>
 /// <param name="guid">The event trace GUID.</param>
 /// <param name="operation">The operation to perform.</param>
 /// <param name="sid">The SID to set.</param>
 /// <param name="access_mask">The access mask to set.</param>
 /// <param name="allow">True to allow, false to deny.</param>
 public static void ControlTraceSecurity(Guid guid, EventSecurityOperation operation, Sid sid, TraceAccessRights access_mask, bool allow)
 {
     ControlTraceSecurity(guid, operation, sid, access_mask, allow, true);
 }
 /// <summary>
 /// Clears DACL and adds ACE for an event trace.
 /// </summary>
 /// <param name="guid">The event trace GUID.</param>
 /// <param name="sid">The SID to set.</param>
 /// <param name="access_mask">The access mask to set.</param>
 /// <param name="allow">True to allow, false to deny.</param>
 /// <param name="throw_on_error">True to throw on error.</param>
 /// <returns>The NT status code.</returns>
 public static NtStatus SetTraceSecurityDacl(Guid guid, Sid sid, TraceAccessRights access_mask, bool allow, bool throw_on_error)
 {
     return(ControlTraceSecurity(guid, EventSecurityOperation.SetDacl, sid, access_mask, allow, throw_on_error));
 }
 /// <summary>
 /// Modify trace security.
 /// </summary>
 /// <param name="guid">The event trace GUID.</param>
 /// <param name="operation">The operation to perform.</param>
 /// <param name="sid">The SID to set.</param>
 /// <param name="access_mask">The access mask to set.</param>
 /// <param name="allow">True to allow, false to deny.</param>
 /// <param name="throw_on_error">True to throw on error.</param>
 /// <returns>The NT status code.</returns>
 public static NtStatus ControlTraceSecurity(Guid guid, EventSecurityOperation operation, Sid sid, TraceAccessRights access_mask, bool allow, bool throw_on_error)
 {
     using (var buffer = sid.ToSafeBuffer())
     {
         return(Win32NativeMethods.EventAccessControl(ref guid, operation, buffer, access_mask, allow).ToNtException(throw_on_error));
     }
 }