ドキュメント ロック
ドキュメント ロック プロトコル
ACP ベースのアプリケーションのドキュメント ロックを要求するために、TSF マネージャーは ITextStoreACP::RequestLock を呼び出します。 アンカー ベースのアプリケーションの場合、TSF マネージャーは ITextStoreAnchor::RequestLock を呼び出します。 アプリケーションは、ITextStoreACPSink::OnLockGranted (ACP ベースのアプリケーション) または ITextStoreAnchorSink::OnLockGranted (アンカーベースのアプリケーション) RequestLock内で呼び出すことによって、ドキュメント ロックを許可します。 ロックは、OnLockGranted 呼び出し中にのみ有効です。 OnLockGranted 返されると、ドキュメントはロック解除されたと見なされます。
ドキュメント ロックの種類
ドキュメント ロックには、読み取り専用と読み取り/書き込みの 2 種類があります。 読み取り専用ロックを使用すると、マネージャーはテキストを読み取ることができますが、テキストを変更または挿入することはできません。 読み取り/書き込みロックを使用すると、マネージャーはテキストの読み取り、変更、挿入を行います。 読み取り専用ロックは、dwFlags でTS_LF_READ指定することによって要求されます。 読み取り/書き込みロックは、dwFlags でTS_LF_READWRITE指定することによって要求されます。
非同期要求と同期要求
ロック要求には、同期または非同期のいずれかを指定できます。 マネージャーは、dwFlags の TS_LF_SYNC フラグ使用して同期ロックを要求します。 このフラグが存在しない場合、要求は非同期です。
ロックの付与
RequestLock 呼び出されると、アプリケーションはドキュメントが現在ロックされているかどうかを判断する必要があります。 ドキュメントがロックされておらず、ロックを拒否するその他の理由がない場合は、アプリケーション phrSession をS_OKに設定し、S_OKを返す必要があります。
ドキュメントがロックされていて、ロック要求が同期的な場合、アプリケーションは phrSession TS_E_SYNCHRONOUSに設定し、S_OKを返す必要があります。 これは、同期要求を許可できないことを示します。
ドキュメントがロックされていて、ロック要求が非同期の場合、アプリケーションは要求をキューに入れ、phrSession TS_S_ASYNCに設定し、S_OKを返す必要があります。 ドキュメントが使用可能になると、アプリケーションはキューから要求を削除し、OnLockGranted 呼び出す必要があります。 このロック要求のキューは省略可能です。アプリケーションでサポートする必要があるシナリオが 1 つあります。 ドキュメントに読み取り専用ロックがあり、新しいロック要求が読み取り/書き込みであり、要求が非同期である場合、アプリケーションは OnLockGranted 呼び出しました。これにより、RequestLock への再入呼び出し発生しました。 アプリケーション phrSession をTS_S_ASYNCに設定し、S_OKを返す必要があります。 OnLockGranted 呼び出しが返された後、アプリケーションは、TS_LF_READWRITEを使用して OnLockGranted をもう一度呼び出すことによって、アップグレード要求を処理する必要があります。
ロックの適用
アプリケーションは、ドキュメントへのアクセスを許可する前に、適切な種類のロックが存在することを確認する必要があります。 たとえば、アプリケーションは、ITextStoreACP::GetText または ITextStoreAnchor::GetText の続行を許可する前に、ドキュメントに少なくとも読み取り専用ロックがあることを確認する必要があります。 適切なロックが存在しない場合、アプリケーションはTF_E_NOLOCKを返す必要があります。
関連トピック