Bryta opportunistiska lås
Att bryta ett opportunistiskt lås är processen att nedgradera låset som en klient har på en fil så att en annan klient kan öppna filen, med eller utan ett opportunistiskt lås. När den andra klienten begär den öppna åtgärden fördröjer servern den öppna åtgärden och meddelar klienten som har det opportunistiska låset.
Klienten som håller låset vidtar sedan åtgärder som är lämpliga för typen av lås, till exempel att överge läsbuffertar, stänga filen och så vidare. Först när klienten som har det opportunistiska låset meddelar servern att det är gjort öppnar servern filen för klienten som begär den öppna åtgärden. Men när ett nivå 2-lås bryts rapporterar servern till klienten att det har brutits men inte väntar på någon bekräftelse, eftersom det inte finns några cachelagrade data som ska tömmas till servern.
När innehavaren av ett trasigt lås bekräftar brytningen av ett exklusivt lås (filter, nivå 1 eller batch) kan hen inte begära ett annat exklusivt lås. Det kan försämra ett exklusivt lås till ett nivå 2-lås eller inget lås alls. Innehavaren släpper vanligtvis låset och stänger filen när innehavaren ändå är på väg att stänga den.
Program meddelas om att ett opportunistiskt lås bryts med hjälp av hEvent medlem i OVERLAPPED struktur som är associerad med filen där låset är brutet. Program kan också använda funktioner som GetOverlappedResult och HasOverlappedIoCompleted.