public bool DisplayFilterPropPage(IntPtr hParent, string strFilter, bool bDisplay) { if (_graphBuilder == null) { return(false); } IBaseFilter pFilter; _graphBuilder.FindFilterByName(strFilter, out pFilter); if (pFilter == null) { return(false); } var bRet = false; var pProp = pFilter as ISpecifyPropertyPages; if (pProp != null) { CAUUID caGuid; var hr = pProp.GetPages(out caGuid); if (DsHlp.SUCCEEDED(hr) && caGuid.cElems > 0) { bRet = true; if (bDisplay) { // Show the page object pFilterUnk = pFilter; DsUtils.OleCreatePropertyFrame( hParent, // Parent window 0, 0, // Reserved strFilter, // Caption for the dialog box 1, // Number of objects (just the filter) ref pFilterUnk, // Array of object pointers. caGuid.cElems, // Number of property pages caGuid.pElems, // Array of property page CLSIDs 0, // Locale identifier 0, IntPtr.Zero // Reserved ); } } // Clean up if (caGuid.pElems != IntPtr.Zero) { Marshal.FreeCoTaskMem(caGuid.pElems); } } Marshal.ReleaseComObject(pFilter); return(bRet); }