ISearchProtocol
COM公式ドキュメント
IUrlAccessor オブジェクトの呼び出し、初期化、および管理を行うためのメソッドを提供します。(ISearchProtocol)
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プロトコルハンドラーを初期化します。
| pTimeoutInfo | TIMEOUT_INFO* | in | 接続のタイムアウトに関する情報を格納する TIMEOUT_INFO 構造体へのポインター。 |
| pProtocolHandlerSite | IProtocolHandlerSite* | in | フィルターホスト内の IFiltear にプロトコルハンドラーがアクセスできるようにする IProtocolHandlerSite インターフェイスへのポインター。 |
| pProxyInfo | PROXY_INFO* | in | コンテンツソース内のアイテムにアクセスするために必要なプロキシ設定に関する情報を格納する PROXY_INFO 構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
プロトコルハンドラーが作成された後、プロトコルハンドラー固有の初期化を行うためにこのメソッドが呼び出されます。このメソッドが再度呼び出されることはありません。
プロトコルホストは ISearchProtocol::ShutDown を呼び出す前に予期せず終了する可能性があるため、一時ファイルやレジストリエントリなどの永続的な情報を持つプロトコルハンドラーは、現在のインスタンスを開始する前に、このメソッド内で以前に開かれたリソースの初期クリーンアップを行う必要があります。
IUrlAccessor オブジェクトを作成して初期化します。
| pcwszURL | LPWSTR | in | アクセス対象のアイテムの URL を格納する、NULL 終端の Unicode 文字列へのポインター。 |
| pAuthenticationInfo | AUTHENTICATION_INFO* | in | コンテンツソース内のこのアイテムにアクセスするために必要な認証情報を格納する AUTHENTICATION_INFO 構造体へのポインター。 |
| pIncrementalAccessInfo | INCREMENTAL_ACCESS_INFO* | in | ギャザラーが最後にファイルにアクセスした日時など、増分アクセスに関する情報を格納する INCREMENTAL_ACCESS_INFO 構造体へのポインター。 |
| pItemInfo | ITEM_INFO* | in | アイテムのワークスペースカタログ名など、URL アイテムに関する情報を格納する ITEM_INFO 構造体へのポインター。 |
| ppAccessor | IUrlAccessor** | out | このメソッドによって作成された IUrlAccessor オブジェクトへのポインターのアドレスを受け取ります。このオブジェクトには、アイテムのファイル名など、URL アイテムに関する情報が格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
プロトコルホストは、ギャザラーが処理する URL ごとにプロトコルハンドラーのこのメソッドを 1 回呼び出し、IUrlAccessor オブジェクトへのポインターを取得します。このメソッドは、ギャザラーが現在アクセスしているアイテムを処理するために IUrlAccessor オブジェクトを作成して初期化します。
以前に作成した IUrlAccessor オブジェクトを閉じます。
| pAccessor | IUrlAccessor* | in | 現在の URL アイテムの処理に使用された IUrlAccessor オブジェクトへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
プロトコルホストは、このメソッドが戻るときに、このメソッドに渡された pAccessor ポインターを解放します。このメソッドを使用して IUrlAccessor オブジェクトに関連付けられたリソースを解放し、プロトコルハンドラーが再利用できるようにしてください。
アクセサーは、必要に応じてプロトコルハンドラーが使用するリソースとしてプールに作成・保持することができ、これによってパフォーマンスが向上する場合があります。IUrlAccessor オブジェクトのプールを実装する場合は、IUnknown::AddRef を使用して IUrlAccessor をプールに追加してください。
プロトコルハンドラーをシャットダウンします。
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、プロトコルハンドラーが関連するリソースをクリーンアップして解放できるようにするために、プロトコルホストから呼び出されます。
プロトコルホストは、終了する前にこのメソッドを 1 回呼び出します。このメソッドが呼び出された後、このインスタンスが再び使用されることはありません。ただし、プロトコルホストのプロセスがこのメソッドを呼び出さずに突然終了する場合もあります。レジストリエントリや一時ファイルなど、グローバルな状態を永続化しているプロトコルハンドラーは、初期化の前に ISearchProtocol::Init メソッドでそれらのリソースがクリーンアップされることを確認する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISearchProtocol "{C73106BA-AC80-11D1-8DF3-00C04FB6EF4F}" #usecom global ISearchProtocol IID_ISearchProtocol "{}" #comfunc global ISearchProtocol_Init 3 var,sptr,var #comfunc global ISearchProtocol_CreateAccessor 4 wstr,var,var,var,sptr #comfunc global ISearchProtocol_CloseAccessor 5 sptr #comfunc global ISearchProtocol_ShutDown 6 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISearchProtocol "{C73106BA-AC80-11D1-8DF3-00C04FB6EF4F}" #usecom global ISearchProtocol IID_ISearchProtocol "{}" #comfunc global ISearchProtocol_Init 3 sptr,sptr,sptr #comfunc global ISearchProtocol_CreateAccessor 4 wstr,sptr,sptr,sptr,sptr #comfunc global ISearchProtocol_CloseAccessor 5 sptr #comfunc global ISearchProtocol_ShutDown 6 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。