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.