Share via


檔鎖定

檔鎖定通訊協定

若要要求 ACP 型應用程式的檔鎖定,TSF 管理員會呼叫 ITextStoreACP::RequestLock。 針對錨點型應用程式,TSF 管理員會呼叫 ITextStoreAnchor::RequestLock。 應用程式會呼叫 ITextStoreACPSink::OnLockGranted (ACP 應用程式) 或 ITextStoreAnchorSink::OnLockGranted (以錨點為基礎的應用程式,) RequestLock內授與檔鎖定。 鎖定只有在 OnLockGranted 呼叫期間才有效。 當 OnLockGranted傳回時,會將檔視為解除鎖定。

檔鎖定的類型

檔鎖定有兩種類型:唯讀和讀取/寫入。 唯讀鎖定可讓管理員讀取文字,但無法修改或插入文字。 讀取/寫入鎖定可讓管理員讀取、修改及插入文字。 在 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。 此鎖定要求的佇列是選擇性的;應用程式必須支援一個案例。 如果檔具有唯讀鎖定,則新的鎖定要求是可讀寫的,而且要求是非同步,應用程式已呼叫 OnLockGranted ,這會導致 要求Lock的重新進入呼叫。 應用程式應該將 phrSession 設定為TS_S_ASYNC,並傳回S_OK。 呼叫 OnLockGranted 之後,應用程式應該使用 TS_LF_READWRITE 再次呼叫 OnLockGranted 來處理升級要求。

鎖定強制

應用程式必須確定有適當的鎖定類型,才能允許存取檔。 例如,應用程式應該先確認檔至少有唯讀鎖定,再允許 ITextStoreACP::GetTextITextStoreAnchor::GetText 繼續。 如果適當的鎖定不存在,應用程式應該會傳回TF_E_NOLOCK。

文字存放區

ITextStoreACP::RequestLock

ITextStoreACPSink::OnLockGranted

ITextStoreACP::GetText

ITextStoreAnchor::RequestLock

ITextStoreAnchorSink::OnLockGranted

ITextStoreAnchor::GetText