private void HookupGraphEventService(IFilterGraph pGraph)
        {
            object o;
            int    hr;

            DirectShowLib.IServiceProvider spServiceProvider = (DirectShowLib.IServiceProvider)pGraph;

            hr = spServiceProvider.QueryService(typeof(BroadcastEventService).GUID,
                                                typeof(IBroadcastEventEx).GUID,
                                                out o);

            spBroadcastEvent = o as IBroadcastEventEx;

            if (hr < 0 || spBroadcastEvent == null)
            {
                // Create the Broadcast Event Service object.
                spBroadcastEvent = new BroadcastEventService() as IBroadcastEventEx;

                IRegisterServiceProvider spRegService = (IRegisterServiceProvider)pGraph;

                // Register the Broadcast Event Service object as a service.
                hr = spRegService.RegisterService(
                    typeof(BroadcastEventService).GUID,
                    spBroadcastEvent);
            }

            DsError.ThrowExceptionForHR(hr);
        }
        private void RegisterService(IFilterGraph ifg)
        {
            int hr;

            // Get the registration interface from the graph
            IRegisterServiceProvider spRegService = ifg as IRegisterServiceProvider;

            // Create the Broadcast Event Service object.
            IBroadcastEvent spBroadcastEvent = new BroadcastEventService() as IBroadcastEvent;

            try
            {
                // Register the Broadcast Event Service object as a service.
                hr = spRegService.RegisterService(
                    SID_SBroadcastEventService,
                    spBroadcastEvent);
                DsError.ThrowExceptionForHR(hr);
            }
            finally
            {
                Marshal.ReleaseComObject(spBroadcastEvent);
            }
        }