檔鎖定
檔鎖定通訊協定
若要要求 ACP 型應用程式的文件鎖定,TSF 管理員會呼叫 ITextStoreACP::RequestLock。 針對錨點型應用程式,TSF 管理員會呼叫 ITextStoreAnchor::RequestLock。 應用程式會呼叫 ITextStoreACPSink::OnLockGranted (ACP 型應用程式 )或 ITextStoreAnchorSink::OnLockGranted (錨點型應用程式),以授與文件鎖定。 鎖定只有在 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 ,這會導致重新呼叫 RequestLock。 應用程式應該將 phrSession 設定為TS_S_ASYNC並傳回S_OK。 呼叫 OnLockGranted 傳回之後,應用程式應該使用 TS_LF_READWRITE 再次呼叫 OnLockGranted 來處理升級要求。
鎖定強制
應用程式必須確定有適當的鎖定類型,才能允許存取檔。 例如,應用程式應該先確認檔至少有只讀鎖定,再允許 ITextStoreACP::GetText 或 ITextStoreAnchor::GetText 繼續進行。 如果適當的鎖定不存在,應用程式應該會傳回TF_E_NOLOCK。
相關主題