public static DiagnosticsNativeMethods.CriticalTraceRegistrationHandle RegisterTrace(Guid provider, ref DiagnosticsNativeMethods.TraceGuidRegistration guidRegistration, DiagnosticsNativeMethods.ControlCallback callback)
            {
                DiagnosticsNativeMethods.CriticalTraceRegistrationHandle criticalTraceRegistrationHandle = new DiagnosticsNativeMethods.CriticalTraceRegistrationHandle();
                long handle;
                int  num = DiagnosticsNativeMethods.CriticalTraceRegistrationHandle.RegisterTraceGuids(callback, IntPtr.Zero, ref provider, 1, ref guidRegistration, null, null, out handle);

                if (num != 0)
                {
                    throw new Win32Exception(num);
                }
                criticalTraceRegistrationHandle.Initialize(callback, handle);
                return(criticalTraceRegistrationHandle);
            }
 private static extern int RegisterTraceGuids([In] DiagnosticsNativeMethods.ControlCallback callback, [In] IntPtr context, [In] ref Guid controlGuid, [In] int guidCount, [In] ref DiagnosticsNativeMethods.TraceGuidRegistration guidRegistration, [In] string mofImagePath, [In] string mofResourceName, out long registrationHandle);