diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchCatalogManager.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchCatalogManager.cs index cb728dc95b..9c1bf9993a 100644 --- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchCatalogManager.cs +++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchCatalogManager.cs @@ -12,71 +12,63 @@ namespace Microsoft.CmdPal.Ext.Indexer.Indexer.SystemSearch; [Guid("AB310581-AC80-11D1-8DF3-00C04FB6EF50")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [GeneratedComInterface] -[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1212:Property accessors should follow order", Justification = "The order of the property accessors must match the order in which the methods were defined in the vtable")] +[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should begin with upper-case letter", Justification = "Please do not change the function name")] public partial interface ISearchCatalogManager { - [return: MarshalAs(UnmanagedType.LPWStr)] - string GetName(); + [return: MarshalAs(UnmanagedType.BStr)] + string get_Name(); - IntPtr GetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName); - - void SetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName, [MarshalAs(UnmanagedType.Interface)] ref object pValue); - - void GetCatalogStatus([MarshalAs(UnmanagedType.Interface)] out object pStatus, [MarshalAs(UnmanagedType.Interface)] out object pPausedReason); + void GetCatalogStatus(out uint pdwStatus, out uint pdwPausedReason); void Reset(); void Reindex(); - void ReindexMatchingURLs([MarshalAs(UnmanagedType.LPWStr)] string pszPattern); - void ReindexSearchRoot([MarshalAs(UnmanagedType.LPWStr)] string pszRoot); - [return: MarshalAs(UnmanagedType.LPWStr)] - string GetConnectTimeout(); + IntPtr GetCrawlScopeManager(); - [return: MarshalAs(UnmanagedType.LPWStr)] - string GetDataTimeout(); + [return: MarshalAs(UnmanagedType.Interface)] + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + ISearchQueryHelper GetQueryHelper(); - int NumberOfItems(); + uint NumberOfItems(); - void NumberOfItemsToIndex( - out int plIncrementalCount, - out int plNotificationQueue, - out int plHighPriorityQueue); + uint NumberOfItemsToIndex(); [return: MarshalAs(UnmanagedType.LPWStr)] string URLBeingIndexed(); - uint GetURLIndexingState([MarshalAs(UnmanagedType.LPWStr)] string psz); + IntPtr GetItemsChangedSink(); - [return: MarshalAs(UnmanagedType.Interface)] - object GetPersistentItemsChangedSink(); + IntPtr GetPersistentItemsChangedSink(); - void RegisterViewForNotification( - [MarshalAs(UnmanagedType.LPWStr)] string pszView, - [MarshalAs(UnmanagedType.Interface)] object pViewChangedSink, - out uint pdwCookie); - - void GetItemsChangedSink( - [MarshalAs(UnmanagedType.Interface)] object pISearchNotifyInlineSite, - ref Guid riid, - out IntPtr ppv, - out Guid pGUIDCatalogResetSignature, - out Guid pGUIDCheckPointSignature, - out uint pdwLastCheckPointNumber); + void RegisterViewForNotification([MarshalAs(UnmanagedType.LPWStr)] string pszView, IntPtr pViewNotify, out uint pdwCookie); void UnregisterViewForNotification(uint dwCookie); - void SetExtensionClusion([MarshalAs(UnmanagedType.LPWStr)] string pszExtension, int fExclude); + void GetURLIndexingState([MarshalAs(UnmanagedType.LPWStr)] string pszURL, out uint pdwState); - [return: MarshalAs(UnmanagedType.Interface)] - object EnumerateExcludedExtensions(); + uint get_DataTimeout(); - ISearchQueryHelper GetQueryHelper(); + void put_DataTimeout(uint dwTimeout); - int GetDiacriticSensitivity(); + uint get_ConnectTimeout(); - [return: MarshalAs(UnmanagedType.Interface)] - object GetCrawlScopeManager(); + void put_ConnectTimeout(uint dwTimeout); + + void EnumerateExcludedExtensions(); + + void SetExtensionClusion([MarshalAs(UnmanagedType.LPWStr)] string pszExtension, [MarshalAs(UnmanagedType.Bool)] bool fExclude); + + [return: MarshalAs(UnmanagedType.Bool)] + bool get_DiacriticSensitivity(); + + void put_DiacriticSensitivity([MarshalAs(UnmanagedType.Bool)] bool fDiacriticSensitive); + + void GetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName, out IntPtr pValue); + + void SetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName, ref IntPtr pValue); + + void ReindexMatchingURLs([MarshalAs(UnmanagedType.LPWStr)] string pszPattern); } diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchManager.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchManager.cs index 59b26f774e..c8f03d4f5b 100644 --- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchManager.cs +++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/SystemSearch/ISearchManager.cs @@ -10,40 +10,46 @@ using System.Runtime.InteropServices.Marshalling; namespace Microsoft.CmdPal.Ext.Indexer.Indexer.SystemSearch; [Guid("AB310581-AC80-11D1-8DF3-00C04FB6EF69")] -[InterfaceType(1)] +[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [GeneratedComInterface] +[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should begin with upper-case letter", Justification = "Please do not change the function name")] public partial interface ISearchManager { - void GetIndexerVersionStr([MarshalAs(UnmanagedType.LPWStr)] out string ppszVersionString); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [return: MarshalAs(UnmanagedType.Interface)] + ISearchCatalogManager GetCatalog([MarshalAs(UnmanagedType.LPWStr)] string pszCatalog); void GetIndexerVersion(out uint pdwMajor, out uint pdwMinor); - IntPtr GetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName); + [return: MarshalAs(UnmanagedType.BStr)] + string GetIndexerVersionStr(); - void SetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName, [MarshalAs(UnmanagedType.Interface)] ref object pValue); + [return: MarshalAs(UnmanagedType.BStr)] + string get_UserAgent(); - [return: MarshalAs(UnmanagedType.LPWStr)] - string GetProxyName(); + void put_UserAgent([MarshalAs(UnmanagedType.BStr)] string pszUserAgent); - [return: MarshalAs(UnmanagedType.LPWStr)] - string GetBypassList(); + [return: MarshalAs(UnmanagedType.BStr)] + string get_ProxyName(); + + uint get_PortNumber(); + + [return: MarshalAs(UnmanagedType.BStr)] + string get_BypassList(); + + [return: MarshalAs(UnmanagedType.Bool)] + bool get_UseProxy(); + + [return: MarshalAs(UnmanagedType.Bool)] + bool get_LocalBypass(); void SetProxy( - [MarshalAs(UnmanagedType.Interface)] object sUseProxy, - int fLocalByPassProxy, - uint dwPortNumber, - [MarshalAs(UnmanagedType.LPWStr)] string pszProxyName, - [MarshalAs(UnmanagedType.LPWStr)] string pszByPassList); + [MarshalAs(UnmanagedType.BStr)] string pszProxyName, + [MarshalAs(UnmanagedType.Bool)] bool fLocalBypass, + [MarshalAs(UnmanagedType.BStr)] string pszBypassList, + uint dwPortNumber); - ISearchCatalogManager GetCatalog([MarshalAs(UnmanagedType.LPWStr)] string pszCatalog); + void GetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName, [MarshalAs(UnmanagedType.Struct)] out object pValue); - [return: MarshalAs(UnmanagedType.LPWStr)] - string GetUserAgent(); - - [return: MarshalAs(UnmanagedType.Interface)] - object GetUseProxy(); - - int GetLocalBypass(); - - uint GetPortNumber(); + void SetParameter([MarshalAs(UnmanagedType.LPWStr)] string pszName, [MarshalAs(UnmanagedType.Struct)] ref object pValue); } diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/Utils/QueryStringBuilder.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/Utils/QueryStringBuilder.cs index 4932b9cc44..27e503ffcd 100644 --- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/Utils/QueryStringBuilder.cs +++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Indexer/Indexer/Utils/QueryStringBuilder.cs @@ -26,7 +26,7 @@ internal sealed partial class QueryStringBuilder private static readonly Guid CLSIDSearchManager = new Guid("7D096C5F-AC08-4F1F-BEB7-5C22C517CE39"); private static readonly Guid IIDISearchManager = new Guid("AB310581-AC80-11D1-8DF3-00C04FB6EF69"); - private const uint CLSCTXINPROCSERVER = 1; + private const uint CLSCTXINPROCSERVER = 23; public static string GenerateQuery(string searchText, uint whereId) { @@ -39,14 +39,28 @@ internal sealed partial class QueryStringBuilder var hr = NativeMethods.CoCreateInstance(CLSIDSearchManager, IntPtr.Zero, CLSCTXINPROCSERVER, IIDISearchManager, out var searchManagerPtr); if (hr != 0) { - throw new ArgumentException("Failed to create SearchManager instance."); + throw new ArgumentException($"Failed to create SearchManager instance. HR: 0x{hr:X}"); } - var searchManager = (CSearchManager)cw.GetOrCreateObjectForComInstance( + var searchManager = (ISearchManager)cw.GetOrCreateObjectForComInstance( searchManagerPtr, CreateObjectFlags.None); + if (searchManager == null) + { + throw new ArgumentException("Failed to get ISearchManager interface"); + } + ISearchCatalogManager catalogManager = searchManager.GetCatalog(SystemIndex); + if (catalogManager == null) + { + throw new ArgumentException($"Failed to get catalog manager for {SystemIndex}"); + } + queryHelper = catalogManager.GetQueryHelper(); + if (queryHelper == null) + { + throw new ArgumentException("Failed to get query helper from catalog manager"); + } queryHelper.SetQuerySelectColumns(Properties); queryHelper.SetQueryContentProperties("System.FileName");