126.96.36.199 Object Store Indicates an Oplock Break
The underlying object store on the local resource indicates the breaking of an opportunistic lock, specifying the LocalOpen and the new oplock level, a status code of the oplock break, and optionally expects the new oplock level in return. The new oplock level MUST be either SMB2_OPLOCK_LEVEL_NONE or SMB2_OPLOCK_LEVEL_II. The conditions under which each oplock level is to be indicated are described in [MS-FSA] section 188.8.131.52.3.
The server MUST locate the open by walking the GlobalOpenTable to find an entry whose Open.LocalOpen matches the one provided in the oplock break. If no entry is found, the break indication MUST be ignored and the server MUST complete the oplock break call with SMB2_OPLOCK_LEVEL_NONE as the new oplock level.
If an entry is found, the server MUST check the state of Open.Connection. If Open.Connection.Dialect belongs to the SMB 3.x dialect family and Open.Connection is NULL, the server MUST select an alternate connection in Session.ChannelList and update Open.Connection.
If Open.Connection is NULL, Open.IsResilient is FALSE, and Open.IsPersistent is FALSE, the server SHOULD close the Open as specified in section 184.108.40.206.
If Open.Connection is not NULL, the server MUST construct an Oplock Break Notification following the syntax specified in section 220.127.116.11 to send back to the client. The server MUST set the Command in the SMB2 header to SMB2 OPLOCK_BREAK, and the MessageId to 0xFFFFFFFFFFFFFFFF. The server MUST set the SessionId and TreeId in the SMB2 header to 0. The FileId field of the response structure MUST be set to the values from the Open structure, with the volatile part set to Open.FileId and the persistent part set to Open.DurableFileId. The oplock Level of the response MUST be set to the value provided by the object store. The server MUST set Open.OplockState to Breaking and set Open.OplockTimeout to the current time plus an implementation-specific default value in milliseconds.<191> The SMB2 Oplock Break Notification is sent to the client. The message SHOULD NOT be signed. The server MUST start the oplock break acknowledgment timer as specified in section 18.104.22.168.