Opportunistische vergrendelingen losmaken
Het verbreken van een opportunistische vergrendeling is het proces van het degraderen van de vergrendeling die de ene client op een bestand heeft, zodat een andere client het bestand kan openen, met of zonder een opportunistische vergrendeling. Wanneer de andere client de open bewerking aanvraagt, vertraagt de server de open bewerking en meldt het aan de client die de opportunistische vergrendeling heeft.
De client die de vergrendeling vasthoudt, voert vervolgens acties uit die geschikt zijn voor het type vergrendeling, bijvoorbeeld het afbreken van leesbuffers, het sluiten van het bestand, enzovoort. Alleen wanneer de client met de opportunistische vergrendeling de server meldt dat deze is uitgevoerd, opent de server het bestand voor de client die de open bewerking aanvraagt. Wanneer een vergrendeling op niveau 2 echter wordt verbroken, rapporteert de server aan de client dat deze is verbroken, maar wacht niet op bevestiging, omdat er geen gegevens in de cache worden leeggemaakt naar de server.
Bij het bevestigen van een doorbraak van een exclusieve vergrendeling (filter, niveau 1 of batch), kan de houder van een gebroken vergrendeling geen andere exclusieve vergrendeling aanvragen. Het kan een exclusieve vergrendeling verlagen tot een niveau 2-slot of helemaal geen slot. De houder laat de vergrendeling doorgaans los en sluit het bestand wanneer het bestand toch bijna wordt gesloten.
Toepassingen worden op de hoogte gesteld dat een opportunistische vergrendeling is verbroken door gebruik te maken van het hEvent lid van de OVERLAPPED structuur die is gekoppeld aan het bestand waarop de vergrendeling is verbroken. Toepassingen kunnen ook functies zoals GetOverlappedResult en HasOverlappedIoCompletedgebruiken.