ドキュメント ロック
ドキュメント ロック プロトコル
ACP ベースのアプリケーションのドキュメント ロックを要求するために、TSF マネージャーは ITextStoreACP::RequestLock を呼び出します。 アンカー ベースのアプリケーションの場合、TSF マネージャーは ITextStoreAnchor::RequestLock を呼び出します。 アプリケーションは、RequestLock 内で ITextStoreACPSink::OnLockGranted (ACP ベースのアプリケーション) または ITextStoreAnchorSink::OnLockGranted (アンカーベースのアプリケーション) を呼び出すことによって、ドキュメント ロックを許可します。 ロックは 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 の呼び出しが返された後、アプリケーションは onLockGranted をもう一度呼び出してアップグレード要求を処理TS_LF_READWRITE。
ロックの適用
アプリケーションは、ドキュメントへのアクセスを許可する前に、適切な種類のロックが存在することを確認する必要があります。 たとえば、ITextStoreACP::GetText または ITextStoreAnchor::GetText を続行する前に、ドキュメントに読み取り専用ロックが設定されていることをアプリケーションで確認する必要があります。 適切なロックが存在しない場合、アプリケーションはTF_E_NOLOCKを返す必要があります。
関連トピック