Sdílet prostřednictvím


Zámky dokumentů

Protokol Document Lock

Chcete-li požádat o zámek dokumentu pro aplikace založené na AKT, správce TSF volá ITextStoreACP::RequestLock. U ukotvených aplikací volá správce TSF ITextStoreAnchor::RequestLock. Aplikace uděluje zámek dokumentu voláním ITextStoreACPSink::OnLockGranted (aplikace založené na AKT) nebo ITextStoreAnchorSink::OnLockGranted (ukotvené aplikace) uvnitř RequestLock. Zámek je platný pouze během volání OnLockGranted. Když OnLockGranted vrátí, dokument se považuje za odemknuté.

Typy zámků dokumentů

Existují dva typy zámků dokumentů, jen pro čtení a pro čtení a zápis. Zámek jen pro čtení umožňuje správci číst text, ale nemůže upravovat ani vkládat text. Zámek pro čtení a zápis umožňuje správci číst, upravovat a vkládat text. Zámek jen pro čtení je požadován zadáním TS_LF_READ v dwFlags. Zámek pro čtení a zápis se požaduje zadáním TS_LF_READWRITE v dwFlags.

Asynchronní a synchronní požadavky

Požadavek na zámek může být synchronní nebo asynchronní. Správce požádá o synchronní zámek pomocí příznaku TS_LF_SYNC v dwFlags. Pokud tento příznak není k dispozici, požadavek je asynchronní.

Udělení zámku

Když se volá RequestLock, aplikace musí určit, jestli je dokument aktuálně uzamčený. Pokud dokument není uzamčen a neexistuje žádný jiný důvod k zamítnutí zámku, měla by aplikace nastavit phrSession na S_OK a vrátit S_OK.

Pokud je dokument uzamčen a požadavek na zámek je synchronní, měla by aplikace nastavit phrSession na TS_E_SYNCHRONOUS a vrátit S_OK. To znamená, že synchronní požadavek nelze udělit.

Pokud je dokument uzamčen a požadavek na zámek je asynchronní, aplikace by měla požadavek zařadit do fronty, nastavit phrSession na TS_S_ASYNC a vrátit S_OK. Jakmile bude dokument k dispozici, aplikace by měla odebrat požadavek z fronty a volat OnLockGranted. Toto řazení žádostí o zámek do fronty je volitelné; existuje jeden scénář, který musí aplikace podporovat. Pokud má dokument zámek jen pro čtení, nový požadavek zámku je pro čtení/zápis a požadavek je asynchronní, aplikace volala do OnLockGranted , což způsobilo opakované volání RequestLock. Aplikace by měla nastavit phrSession na TS_S_ASYNC a vrátit S_OK. Jakmile se volání OnLockGranted vrátí, aplikace by měla požadavek na upgrade zpracovat voláním OnLockGranted znovu s TS_LF_READWRITE.

Vynucení zámku

Před povolením přístupu k dokumentu musí aplikace zajistit, aby existoval správný typ zámku. Aplikace by například měla před povolením ITextStoreACP::GetText nebo ITextStoreAnchor::GetText pokračovat, ověřit, zda má dokument alespoň zámek jen pro čtení. Pokud správný zámek neexistuje, měla by aplikace vrátit TF_E_NOLOCK.

textová úložiště

ITextStoreACP::RequestLock

ITextStoreACPSink::OnLockGranted

ITextStoreACP::GetText

ITextStoreAnchor::RequestLock

ITextStoreAnchorSink::OnLockGranted

ITextStoreAnchor::GetText