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); }
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); } }