FsRtlOplockBreakH

NTSTATUS __fastcall FsRtlOplockBreakH(
        INT64 *a1,
        UINT64 a2,
        INT64 a3,
        INT64 a4,
        INT64 CompletionRoutine,
        INT64 PostIrpRoutine){
  unsigned int v6; 
  _NONOPAQUE_OPLOCK *v8; 
  __int64 v9; 
  NTSTATUS v10; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 

  v16 = a4;
  v6 = a3;
  v8 = (_NONOPAQUE_OPLOCK *)*a1;
  v9 = *(_QWORD *)(a2 + 184);
  LOBYTE(v14) = 0;
  v10 = 0;
  LOBYTE(v15) = 0;
  if( !v8 )
    return v10;
  v10 = FsRtlpAttachOplockKey((_IRP *)a2);
  if( !v10 )
  {
    if( *(_BYTE *)v9 )
    {
LABEL_8:
      v12 = PostIrpRoutine;
      v13 = CompletionRoutine;
      do
      {
        LOBYTE(v15) = 0;
        if( !(_BYTE)v14 )
        {
          ExAcquireFastMutexUnsafe(v8->FastMutex);
          LOBYTE(v14) = 1;
        }
        v10 = FsRtlpOplockBreakByCacheFlags(
                v8,
                v9,
                (_IRP *)a2,
                v6,
                0,
                0x2000,
                v16,
                v13,
                v12,
                0i64,
                0i64,
                0i64,
                (__int64)&v14,
                (__int64)&v15);
      }
      while( (_BYTE)v15 );
      goto LABEL_14;
    }
    if( (*(_DWORD *)(*(_QWORD *)(v9 + 8) + 16i64) & 0xFFEFFE7F) != 0 )
    {
      if( (*(_DWORD *)(v9 + 16) & 0x10000) != 0 )
        v6 |= 0x10000000u;
      goto LABEL_8;
    }
    v10 = 0;
  }
LABEL_14:
  if( (_BYTE)v14 )
    ExReleaseFastMutexUnsafe(v8->FastMutex);
  return v10;
}

Referenced by:

No references.