2.1.4.12.2 Algorithm to Compare Oplock Keys

msdn link

The inputs for this algorithm are:

  • OperationOpen: The Open used in the request that can cause an oplock to break.

  • OplockOpen: The Open originally used to request the oplock, as specified in section 2.1.5.17.

  • Flags: If unspecified it is considered to contain 0. Valid nonzero values are:

    • PARENT_OBJECT

This algorithm returns TRUE if the appropriate oplock key field of OperationOpen equals OplockOpen.TargetOplockKey, and FALSE otherwise.

Pseudocode for the algorithm is as follows:

  • If OperationOpen equals OplockOpen:

    • Return TRUE.

  • If both OperationOpen.TargetOplockKey and OperationOpen.ParentOplockKey are empty or both OplockOpen.TargetOplockKey and OplockKey.ParentOplockKey are empty:

    • Return FALSE.

  • If OplockOpen.TargetOplockKey is empty or

    (Flags does not contain PARENT_OBJECT and OperationOpen.TargetOplockKey is empty):

    • Return FALSE.

  • If Flags contains PARENT_OBJECT and

    OperationOpen.ParentOplockKey is empty:

    • Return FALSE.

  • If Flags contains PARENT_OBJECT:

    • If OperationOpen.ParentOplockKey equals OplockOpen.TargetOplockKey:

      • Return TRUE.

    • Else:

      • Return FALSE.

    • EndIf

  • Else:

    • If OperationOpen.TargetOplockKey equals OplockOpen.TargetOplockKey:

      • Return TRUE.

    • Else:

      • Return FALSE.

    • EndIf

  • EndIf