Verrous de document
Protocole de verrouillage de document
Pour demander un verrou de document pour les applications ACP, le gestionnaire TSF appelle ITextStoreACP ::RequestLock. Pour les applications basées sur l’ancre, le gestionnaire TSF appelle ITextStoreAnchor ::RequestLock. L’application accorde le verrou de document en appelant ITextStoreACPSink ::OnLockGranted (applications basées sur ACP) ou ITextStoreAnchorSink ::OnLockGranted (applications basées sur des ancres) à l’intérieur de RequestLock. Le verrou est valide uniquement pendant l’appel OnLockGranted. Lorsque onLockGranted retourne, le document est considéré comme déverrouillé.
Types de verrous de document
Il existe deux types de verrous de document, en lecture seule et en lecture-écriture. Un verrou en lecture seule permet au gestionnaire de lire le texte, mais il ne peut pas modifier ou insérer du texte. Un verrou en lecture/écriture permet au gestionnaire de lire, de modifier et d’insérer du texte. Un verrou en lecture seule est demandé en spécifiant TS_LF_READ dans dwFlags. Un verrou en lecture/écriture est demandé en spécifiant TS_LF_READWRITE dans dwFlags .
Requêtes asynchrones et synchrones
Une demande de verrouillage peut être synchrone ou asynchrone. Le gestionnaire demande un verrou synchrone à l’aide de l’indicateur de TS_LF_SYNC dans dwFlags . Si cet indicateur n’est pas présent, la requête est asynchrone.
Octroi du verrou
Lorsque RequestLock est appelé, l’application doit déterminer si le document est actuellement verrouillé. Si le document n’est pas verrouillé et qu’aucune autre raison de refuser le verrou n’existe, l’application doit définir phrSession sur S_OK et retourner S_OK.
Si le document est verrouillé et que la demande de verrouillage est synchrone, l’application doit définir phrSession sur TS_E_SYNCHRONOUS et retourner S_OK. Cela indique qu’une demande synchrone ne peut pas être accordée.
Si le document est verrouillé et que la demande de verrouillage est asynchrone, l’application doit mettre en file d’attente la requête, définir phrSession sur TS_S_ASYNC et retourner S_OK. Lorsque le document devient disponible, l’application doit supprimer la demande de la file d’attente et appeler OnLockGranted. Cette mise en file d’attente des demandes de verrou est facultative ; il existe un scénario qu’une application doit prendre en charge. Si le document a un verrou en lecture seule, la nouvelle requête de verrou est en lecture/écriture et la requête est asynchrone, l’application a appelé OnLockGranted, ce qui a provoqué un appel de réentrant à RequestLock. L’application doit définir phrSession sur TS_S_ASYNC et retourner S_OK. Une fois l’appel à OnLockGranted retourné, l’application doit traiter la demande de mise à niveau en appelant OnLockGranted à nouveau avec TS_LF_READWRITE.
Application des verrous
L’application doit s’assurer que le type de verrou approprié existe avant d’autoriser l’accès au document. Par exemple, l’application doit vérifier qu’un document a au moins un verrou en lecture seule avant d’autoriser ITextStoreACP ::GetText ou ITextStoreAnchor ::GetText à continuer. Si le verrou approprié n’existe pas, l’application doit retourner TF_E_NOLOCK.
Rubriques connexes