FsRtlpOplockKeysEqual

UINT8 __stdcall FsRtlpOplockKeysEqual(_FILE_OBJECT *OperationFileObject, _FILE_OBJECT *OplockFileObject, UINT64 Flags){
  char v3; 
  _QWORD *FileObjectExtension; 
  __int64 v7; 
  _QWORD *v8; 
  __int64 v9; 
  __int16 v10; 
  int v11; 
  int v13; 
  __int64 v15; 
  INT64 OplockKeyContext; 
  __int64 v17; 
  v3 = Flags;
  if( (Flags & 0x40) == 0
    || OperationFileObject
    && (v15 = *((_QWORD *)OperationFileObject->FsContext + 11)) != 0
    && *(_QWORD *)(v15 + 136)
    && (OplockKeyContext = IoGetOplockKeyContextEx((INT64)OperationFileObject)) != 0
    && (*(_BYTE *)(OplockKeyContext + 2) & 1) != 0
    && (v17 = *(_QWORD *)(v15 + 136), *(_DWORD *)(OplockKeyContext + 4) == *(_DWORD *)v17)
    && *(_WORD *)(OplockKeyContext + 8) == *(_WORD *)(v17 + 4)
    && *(_WORD *)(OplockKeyContext + 10) == *(_WORD *)(v17 + 6)
    && *(_BYTE *)(OplockKeyContext + 12) == *(_BYTE *)(v17 + 8)
    && *(_BYTE *)(OplockKeyContext + 13) == *(_BYTE *)(v17 + 9)
    && *(_BYTE *)(OplockKeyContext + 14) == *(_BYTE *)(v17 + 10)
    && *(_BYTE *)(OplockKeyContext + 15) == *(_BYTE *)(v17 + 11)
    && *(_BYTE *)(OplockKeyContext + 16) == *(_BYTE *)(v17 + 12)
    && *(_BYTE *)(OplockKeyContext + 17) == *(_BYTE *)(v17 + 13)
    && *(_BYTE *)(OplockKeyContext + 18) == *(_BYTE *)(v17 + 14)
    && *(_BYTE *)(OplockKeyContext + 19) == *(_BYTE *)(v17 + 15) )
  {
    if( OperationFileObject && OplockFileObject )
    {
      if( OperationFileObject == OplockFileObject )
        return 1;
      FileObjectExtension = OperationFileObject->FileObjectExtension;
      if( !FileObjectExtension
        || FileObjectExtension == (_QWORD *)IopRevocationExtension
        || (v7 = FileObjectExtension[7]) == 0
        || (*(_BYTE *)(v7 + 2) & 3) == 0 )
      {
        v7 = 0i64;
      }
      v8 = OplockFileObject->FileObjectExtension;
      if( !v8 || v8 == (_QWORD *)IopRevocationExtension || (v9 = v8[7]) == 0 || (*(_BYTE *)(v9 + 2) & 3) == 0 )
        v9 = 0i64;
      if( v7 && v9 && (*(_BYTE *)(v9 + 2) & 2) != 0 )
      {
        v10 = *(_WORD *)(v7 + 2);
        v11 = v3 & 0x10;
        if( !(v11 ? (v10 & 1) == 0 : (v10 & 2) == 0) )
        {
          v13 = *(_DWORD *)(v9 + 20);
          if( v11 )
          {
            if( *(_DWORD *)(v7 + 4) == v13
              && *(_WORD *)(v7 + 8) == *(_WORD *)(v9 + 24)
              && *(_WORD *)(v7 + 10) == *(_WORD *)(v9 + 26)
              && *(_BYTE *)(v7 + 12) == *(_BYTE *)(v9 + 28)
              && *(_BYTE *)(v7 + 13) == *(_BYTE *)(v9 + 29)
              && *(_BYTE *)(v7 + 14) == *(_BYTE *)(v9 + 30)
              && *(_BYTE *)(v7 + 15) == *(_BYTE *)(v9 + 31)
              && *(_BYTE *)(v7 + 16) == *(_BYTE *)(v9 + 32)
              && *(_BYTE *)(v7 + 17) == *(_BYTE *)(v9 + 33)
              && *(_BYTE *)(v7 + 18) == *(_BYTE *)(v9 + 34)
              && *(_BYTE *)(v7 + 19) == *(_BYTE *)(v9 + 35) )
            {
              return 1;
            }
          }
          else if( *(_DWORD *)(v7 + 20) == v13
                 && *(_WORD *)(v7 + 24) == *(_WORD *)(v9 + 24)
                 && *(_WORD *)(v7 + 26) == *(_WORD *)(v9 + 26)
                 && *(_BYTE *)(v7 + 28) == *(_BYTE *)(v9 + 28)
                 && *(_BYTE *)(v7 + 29) == *(_BYTE *)(v9 + 29)
                 && *(_BYTE *)(v7 + 30) == *(_BYTE *)(v9 + 30)
                 && *(_BYTE *)(v7 + 31) == *(_BYTE *)(v9 + 31)
                 && *(_BYTE *)(v7 + 32) == *(_BYTE *)(v9 + 32)
                 && *(_BYTE *)(v7 + 33) == *(_BYTE *)(v9 + 33)
                 && *(_BYTE *)(v7 + 34) == *(_BYTE *)(v9 + 34)
                 && *(_BYTE *)(v7 + 35) == *(_BYTE *)(v9 + 35) )
          {
            return 1;
          }
        }
      }
    }
  }
  return 0;
}

Referenced by:

FsRtlCheckOplockEx2
FsRtlOplockKeysEqual
FsRtlpAcknowledgeOplockBreakByCacheFlags
FsRtlpOplockBreakByCacheFlags
FsRtlpOplockBreakToII
FsRtlpOplockBreakToNone
FsRtlpReleaseIrpsWaitingForRH
FsRtlpRequestExclusiveOplock
FsRtlpRequestShareableOplock