共用方式為


2.1.1.10 Per Oplock

  • ExclusiveOpen: The Open used to request the opportunistic lock.

  • IIOplocks: A list of zero or more Opens used to request a LEVEL_TWO opportunistic lock, as specified in section 2.1.5.18.1.

  • ROplocks: A list of zero or more Opens used to request a LEVEL_GRANULAR(RequestedOplockLevel: READ_CACHING) opportunistic lock, as specified in section 2.1.5.18.1.

  • RHOplocks: A list of zero or more Opens used to request a LEVEL_GRANULAR(RequestedOplockLevel: (READ_CACHING|HANDLE_CACHING)) opportunistic lock, as specified in section 2.1.5.18.1.

  • RHBreakQueue: A list of zero or more RHOpContext objects. This queue is used to track (READ_CACHING|HANDLE_CACHING) oplocks as they are breaking.

  • WaitList: A list of zero or more Opens belonging to operations that are waiting for an oplock to break, as specified in section 2.1.4.12.

  • State: The current state of the oplock, expressed as a combination of one or more flags. Valid flags are:

    • NO_OPLOCK - Indicates that this Oplock does not represent a currently granted or breaking oplock. This is semantically equivalent to the Oplock object being entirely absent from a Stream. This flag always appears alone.

    • LEVEL_ONE_OPLOCK - Indicates that this Oplock represents a Level 1 (also called Exclusive) oplock.

    • BATCH_OPLOCK - Indicates that this Oplock represents a Batch oplock.

    • LEVEL_TWO_OPLOCK - Indicates that this Oplock represents a Level 2 (also called Shared) oplock.

    • EXCLUSIVE - Indicates that this Oplock represents an oplock that can be held by exactly one client at a time. This flag always appears in combination with other flags that indicate the actual oplock level. For example, (READ_CACHING|WRITE_CACHING|EXCLUSIVE) represents a read caching and write caching oplock, which can be held by only one client at a time.

    • BREAK_TO_TWO - Indicates that this Oplock represents an oplock that is currently breaking from either Level 1 or Batch to Level 2; the oplock has broken but the break has not yet been acknowledged.

    • BREAK_TO_NONE - Indicates that this Oplock represents an oplock that is currently breaking from either Level 1 or Batch to None (that is, no oplock); the oplock has broken but the break has not yet been acknowledged.

    • BREAK_TO_TWO_TO_NONE - Indicates that this Oplock represents an oplock that is currently breaking from either Level 1 or Batch to None (that is, no oplock), and was previously breaking from Level 1 or Batch to Level 2; the oplock has broken but the break has not yet been acknowledged.

    • READ_CACHING - Indicates that this Oplock represents an oplock that provides caching of reads; this provides the SMB 2.1 read caching lease, as described in [MS-SMB2] section 2.2.13.2.8.

    • HANDLE_CACHING - Indicates that this Oplock represents an oplock that provides caching of handles; this provides the SMB 2.1 handle caching lease, as described in [MS-SMB2] section 2.2.13.2.8.

    • WRITE_CACHING - Indicates that this Oplock represents an oplock that provides caching of writes; this provides the SMB 2.1 write caching lease, as described in [MS-SMB2] section 2.2.13.2.8.

    • MIXED_R_AND_RH - Always appears together with READ_CACHING and HANDLE_CACHING. Indicates that this Oplock represents an oplock on which at least one client has been granted a read caching oplock, and at least one other client has been granted a read caching and handle caching oplock.

    • BREAK_TO_READ_CACHING - Indicates that this Oplock represents an oplock that is currently breaking to an oplock that provides caching of reads; the oplock has broken but the break has not yet been acknowledged.

    • BREAK_TO_WRITE_CACHING - Indicates that this Oplock represents an oplock that is currently breaking to an oplock that provides caching of writes; the oplock has broken but the break has not yet been acknowledged.

    • BREAK_TO_HANDLE_CACHING - Indicates that this Oplock represents an oplock that is currently breaking to an oplock that provides caching of handles; the oplock has broken but the break has not yet been acknowledged.

    • BREAK_TO_NO_CACHING - Indicates that this Oplock represents an oplock that is currently breaking to None (that is, no oplock); the oplock has broken but the break has not yet been acknowledged.