Win32 API 日本語リファレンス
ホームSystem.Search › IOpLockStatus

IOpLockStatus

COM
IIDc731065d-ac80-11d1-8df3-00c04fb6ef4f継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Microsoft Windows Desktop Search (WDS) がインデックス作成中にアイテムに対して使用する便宜的ロック (opportunistic lock) を確認するためのメソッドを提供します。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT IsOplockValid(BOOL* pfIsOplockValid)

インデックス作成対象のアイテムに対する便宜的ロック (OpLock) の状態を確認します。(IOpLockStatus.IsOplockValid)

pfIsOplockValidBOOL*outOpLock が正常に取得されたかどうかを示す BOOL 値へのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

OpLock は便宜的ロックであり、他のプロセスがアイテムにアクセスしていないときに、インデクサーがそのアイテムをロックできるようにするものです。他のプロセスが互換性のないアクセスモードを要求した場合、インデクサーはアイテムを解放し、ロックは無効化 (ブレーク) されます。これにより、インデクサーはバックグラウンドで実行され、他のプロセスによるこれらのアイテムへのアクセスを妨げません。

OpLock は、基になる IUrlAccessor オブジェクトの初期化後に取得されることはありません。そのため、同じオブジェクトに対してこのメソッドを呼び出すと、常に同じ出力値が得られます。

vtbl 4 HRESULT IsOplockBroken(BOOL* pfIsOplockBroken)

インデックス作成対象のアイテムに対する便宜的ロック (OpLock) の状態を確認します。(IOpLockStatus.IsOplockBroken)

pfIsOplockBrokenBOOL*outOpLock がブレークされたかどうかを示す BOOL 値へのポインターを受け取ります。OpLock が取得された後にブレークされた場合は TRUE、それ以外の場合 (OpLock が取得されなかった場合を含む) は FALSE です。

戻り値

型: HRESULT

OpLock がブレークされている場合は S_OK を返し、そうでない場合は S_FALSE を返します。

解説(Remarks)

OpLock は便宜的ロックであり、他のプロセスがアイテムにアクセスしていないときに、インデクサーがそのアイテムをロックできるようにするものです。他のプロセスが互換性のないアクセスモードを要求した場合、インデクサーはアイテムを解放し、ロックは無効化 (ブレーク) されます。これにより、インデクサーはバックグラウンドで実行され、他のプロセスによるこれらのアイテムへのアクセスを妨げません。

vtbl 5 HRESULT GetOplockEventHandle(HANDLE* phOplockEv)

便宜的ロック (OpLock) のイベントハンドルを取得します。OpLock がブレークされるとイベントオブジェクトはシグナル状態に設定され、インデクサーは基になる IUrlAccessor オブジェクトに対するすべての操作を停止できます。

phOplockEvHANDLE*outOpLock に関連付けられたイベントのハンドルへのポインターを受け取ります。OpLock が取得されていない場合は NULL になります。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IOpLockStatus "{C731065D-AC80-11D1-8DF3-00C04FB6EF4F}"
#usecom global IOpLockStatus IID_IOpLockStatus "{}"
#comfunc global IOpLockStatus_IsOplockValid         3 var
#comfunc global IOpLockStatus_IsOplockBroken        4 var
#comfunc global IOpLockStatus_GetOplockEventHandle  5 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。