FsRtlUpperOplockFsctrl

INT64 __stdcall FsRtlUpperOplockFsctrl(
        PVOID *Oplock,
        IRP *Irp,
        UINT64 OpenCount,
        UINT64 LowerOplockState,
        UINT64 Flags){
  int v5; 
  unsigned int v6; 
  char *v7; 
  UINT64 v9; 
  IRP *v10; 
  char v11; 
  unsigned int v12; 
  int v13; 
  unsigned int v14; 
  __int64 v16; 
  UINT64 LowerOplockLevel; 
  v5 = 0;
  v6 = OpenCount;
  v7 = (char *)*((_QWORD *)Irp + 23);
  v9 = 0i64;
  v10 = Irp;
  v11 = *v7;
  v12 = ((LowerOplockState & 6) << 12) | ((LowerOplockState & 1) << 12);
  if( *v7 )
  {
    switch( *((_DWORD *)v7 + 6) )
    {
      case 0x90000:
        v9 = 2i64;
        break;
      case 0x90004:
        v9 = 16i64;
        break;
      case 0x90008:
        v9 = 4i64;
        break;
      case 0x9005C:
        v9 = 8i64;
        break;
      case 0x90240:
        if( *((_DWORD *)v7 + 4) >= 0xCu )
        {
          v16 = *((_QWORD *)Irp + 3);
          if( *(_WORD *)v16 <= 1u )
          {
            if( (*(_DWORD *)(v16 + 8) & 2) != 0 )
              goto LABEL_27;
            v9 = ((*(_DWORD *)(v16 + 4) & 6) << 12) | ((*(_DWORD *)(v16 + 4) & 1u) << 12);
          }
          else
          {
            v5 = -1073741811;
          }
        }
        else
        {
          v5 = -1073741789;
        }
        break;
      default:
        goto LABEL_27;
    }
    if( !FsRtlpOplockUpperLowerCompatible(v9, v12) )
      v5 = -1073741598;
    v14 = v5;
    if( v5 )
      goto LABEL_4;
LABEL_27:
    LODWORD(LowerOplockLevel) = v12;
    return(unsigned int)FsRtlpOplockFsctrlInternal(Oplock, v10, v6, (unsigned int)Flags, LowerOplockLevel);
  }
  v13 = *((_DWORD *)v7 + 4);
  if( ((v13 & 0x100000) == 0 || (v12 & 0x4000) != 0) && ((v13 & 0x10000) == 0 || (v12 & 0x2000) != 0) )
    goto LABEL_27;
  v14 = -1073741598;
LABEL_4:
  if( v11 == 13 )
  {
    *((_DWORD *)v10 + 12) = v14;
    IofCompleteRequest(v10, 1);
  }
  return v14;
}

Referenced by:

No references.