This commit is contained in:
Yu Leng
2025-05-15 11:31:38 +08:00
parent e59589432e
commit 96be28e095
3 changed files with 79 additions and 67 deletions

View File

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

View File

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

View File

@@ -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");