private static WFD.IAsyncCausalityTracerStatics LoadFactory()
        {
            if (!Environment.IsWinRTSupported)
            {
                return(null);
            }

            //COM Class Id
            string ClassId = "Windows.Foundation.Diagnostics.AsyncCausalityTracer";

            //COM Interface GUID  {50850B26-267E-451B-A890-AB6A370245EE}
            Guid guid = new Guid(0x50850B26, 0x267E, 0x451B, 0xA8, 0x90, 0XAB, 0x6A, 0x37, 0x02, 0x45, 0xEE);

            Object factory = null;

            WFD.IAsyncCausalityTracerStatics validFactory = null;

            try
            {
                int hresult = Microsoft.Win32.UnsafeNativeMethods.RoGetActivationFactory(ClassId, ref guid, out factory);

                if (hresult < 0 || factory == null)
                {
                    return(null);                                //This prevents having an exception thrown in case IAsyncCausalityTracerStatics isn't registered.
                }
                validFactory = (WFD.IAsyncCausalityTracerStatics)factory;

                EventRegistrationToken token = validFactory.add_TracingStatusChanged(new EventHandler <WFD.TracingStatusChangedEventArgs>(TracingStatusChangedHandler));
                Contract.Assert(token != null, "EventRegistrationToken is null");
            }
            catch (Exception)
            {
                // Although catching generic Exception is not recommended, this file is one exception
                // since we don't want to propagate any kind of exception to the user since all we are
                // doing here depends on internal state.
                return(null);
            }

            return(validFactory);
        }
Example #2
0
        private static WFD.IAsyncCausalityTracerStatics LoadFactory()
        {
            //COM Class Id
            string ClassId = "Windows.Foundation.Diagnostics.AsyncCausalityTracer";

            //COM Interface GUID  {50850B26-267E-451B-A890-AB6A370245EE}
            Guid guid = new Guid(0x50850B26, 0x267E, 0x451B, 0xA8, 0x90, 0XAB, 0x6A, 0x37, 0x02, 0x45, 0xEE);

            Object factory = null;

            try
            {
                factory = Microsoft.Win32.UnsafeNativeMethods.RoGetActivationFactory(ClassId, ref guid);
            }
            catch (COMException)
            {
                //IAsyncCausalityTracerStatics interface not present in this OS
                return(null);
            }
            catch (EntryPointNotFoundException)
            {
                //RoGetActivationFactory method not present in combase.dll
                return(null);
            }
            catch (DllNotFoundException)
            {
                //combase.dll not found
                return(null);
            }

            WFD.IAsyncCausalityTracerStatics validFactory = (WFD.IAsyncCausalityTracerStatics)factory;

            EventRegistrationToken token = validFactory.add_TracingStatusChanged(new EventHandler <WFD.TracingStatusChangedEventArgs>(TracingStatusChangedHandler));

            Contract.Assert(token != null, "EventRegistrationToken is null");

            return(validFactory);
        }
        static AsyncCausalityTracer()
        {
            if (!Environment.IsWinRTSupported) return;

            //COM Class Id
            string ClassId = "Windows.Foundation.Diagnostics.AsyncCausalityTracer";

            //COM Interface GUID  {50850B26-267E-451B-A890-AB6A370245EE}
            Guid guid = new Guid(0x50850B26, 0x267E, 0x451B, 0xA8, 0x90, 0XAB, 0x6A, 0x37, 0x02, 0x45, 0xEE);

            Object factory = null;

            try
            {
                int hresult = Microsoft.Win32.UnsafeNativeMethods.RoGetActivationFactory(ClassId, ref guid, out factory);

                if (hresult < 0 || factory == null) return; //This prevents having an exception thrown in case IAsyncCausalityTracerStatics isn't registered.
                
                s_TracerFactory = (WFD.IAsyncCausalityTracerStatics)factory;

                EventRegistrationToken token = s_TracerFactory.add_TracingStatusChanged(new EventHandler<WFD.TracingStatusChangedEventArgs>(TracingStatusChangedHandler));
                Contract.Assert(token != default(EventRegistrationToken), "EventRegistrationToken is null");
            }
            catch (Exception ex)
            {
                // Although catching generic Exception is not recommended, this file is one exception
                // since we don't want to propagate any kind of exception to the user since all we are
                // doing here depends on internal state.
                LogAndDisable(ex);
            }
           
        }