FsRtlpOplockBreakByCacheFlags
__int64 __fastcall FsRtlpOplockBreakByCacheFlags(
_NONOPAQUE_OPLOCK *Oplock,
__int64 a2,
_IRP *a3,
unsigned int a4,
int a5,
int a6,
__int64 a7,
__int64 a8,
__int64 a9,
__int64 a10,
__int64 a11,
__int64 a12,
__int64 a13,
__int64 a14){
unsigned int v14;
__int64 v15;
char v17;
int v18;
unsigned int OplockState;
char v22;
unsigned int v23;
INT64 v24;
unsigned int v25;
unsigned int v26;
unsigned int v27;
bool v28;
_IRP *IrpExclusiveOplock;
_CCHAR v30;
union {_IRP *MasterIrp;int IrpCount;void *SystemBuffer;} v31;
_IRP *v32;
union {_IRP *MasterIrp;int IrpCount;void *SystemBuffer;} v33;
char v34;
int v35;
_LIST_ENTRY *v36;
char v37;
_LIST_ENTRY *i;
char v39;
_NONOPAQUE_OPLOCK *v40;
_EPROCESS *ExclusiveOplockOwner;
char v42;
_LIST_ENTRY **FileObject;
_LIST_ENTRY *p_IrpOplocksRH;
_LIST_ENTRY *v45;
_LIST_ENTRY *v46;
char v47;
INT64 v48;
INT64 v49;
int v50;
INT16 v51;
int v52;
int v53;
int v54;
UINT16 ShareMode;
_LIST_ENTRY *v56;
char v57;
_LIST_ENTRY *v58;
_LIST_ENTRY *v59;
_LIST_ENTRY *v60;
char v61;
char v62;
INT64 v63;
INT64 v64;
char v65;
_LIST_ENTRY *v66;
_LIST_ENTRY *v67;
char v68;
_IRP *v69;
_CCHAR v70;
union {_IRP *MasterIrp;int IrpCount;void *SystemBuffer;} v71;
_IRP *v72;
union {_IRP *MasterIrp;int IrpCount;void *SystemBuffer;} v73;
int v74;
_IRP *v75;
_CCHAR v76;
_CCHAR v77;
_IRP *v78;
_LIST_ENTRY *v79;
union {_IRP *MasterIrp;int IrpCount;void *SystemBuffer;} v80;
unsigned int v81;
_LIST_ENTRY *Flink;
char v83;
INT64 v84;
INT64 v85;
UINT64 AccessMode;
char v87;
char v88;
bool v89;
char v90;
__int128 v91;
__int64 v92;
__int64 v93;
unsigned int v96;
int v97;
v93 = a2;
v14 = a4;
v15 = a2;
v96 = 0;
v91 = 0i64;
v92 = 0i64;
v17 = 0;
v87 = 0;
v90 = 0;
v89 = 0;
v88 = 1;
v18 = v14 & 8;
if( a6 == 28672 || a6 == 20480 || a6 == 0x4000 || a6 == 0x2000 )
{
if( !Oplock )
return v96;
OplockState = Oplock->OplockState;
if( OplockState != 1 && (OplockState & a6) != 0 )
{
if( (v14 & 8) != 0 )
{
LABEL_14:
v23 = Oplock->OplockState;
v24 = v14 & 0x10010000;
v97 = v14 & 0x10010000;
if( (v23 & 0x40) != 0 && (_DWORD)v24 )
return(unsigned int)-1073739511;
v25 = v23 & 0x1F0FFDF;
if( (v23 & 0x1F0FFDF) > 0x105040 )
{
if( v25 <= 0x803000 )
{
if( v25 == 8400896 )
{
if( (a6 & 0x3000) != 0 )
{
if( (_DWORD)v24 )
return(unsigned int)-1073739511;
if( (a6 & 0x2000) != 0 )
{
Flink = Oplock->RHBreakQueue.Flink;
while( Flink != &Oplock->RHBreakQueue )
{
if( v18 )
goto LABEL_151;
FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)Flink[1].Blink, 0i64);
if( !v83 )
goto LABEL_151;
Flink = Flink->Flink;
v15 = v93;
}
}
}
LABEL_152:
if( v17 )
{
if( (a4 & 1) != 0 )
{
v81 = Oplock->OplockState;
if( (v81 & 0x10000) != 0 )
Oplock->OplockState = v81 | 0x20000;
return 264;
}
else
{
if( v88 )
{
FsRtlpModifyThreadPriorities(Oplock, 0i64, 1u);
FsRtlpOplockSendModernAppTermination(Oplock, 0i64);
}
*(_BYTE *)a13 = 0;
return(unsigned int)FsRtlpWaitOnIrp(
(__int64)Oplock,
(__int64)a3,
(void *)a7,
(void(__fastcall *)(void *, _IRP *))a8,
(void(__fastcall *)(void *, __int64))a9,
(char *)&v91,
v89,
a10,
a11,
(void(__fastcall *)(__int128 *))a12,
(_WAITING_IRP *)a14);
}
}
return v96;
}
if( v25 != 1077312 )
{
if( v25 == 3174464 )
{
if( a6 == 0x4000 )
{
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x107040;
}
else if( (a6 & 0x5000) == 20480 )
{
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x807040;
}
goto LABEL_151;
}
if( v25 != 5271616 )
goto LABEL_180;
if( a6 == 0x2000 )
{
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x107040;
goto LABEL_151;
}
}
if( (a6 & 0x1000) != 0 )
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x807040;
goto LABEL_151;
}
if( v25 != 8409152 )
{
if( v25 == 8417344 )
goto LABEL_151;
goto LABEL_180;
}
}
else
{
if( v25 != 1069120 )
{
if( v25 <= 0x5040 )
{
if( v25 != 20544 )
{
v26 = v25 - 4096;
if( v26 )
{
v27 = v26 - 16;
if( v27 )
{
if( v27 == 8176 )
goto LABEL_64;
v28 = (v23 & 0x1000000) == 0;
LABEL_150:
if( v28 )
goto LABEL_152;
goto LABEL_151;
}
}
goto LABEL_51;
}
if( (a6 & 0x5000) == 20480 )
{
IrpExclusiveOplock = Oplock->IrpExclusiveOplock;
IrpExclusiveOplock->CancelIrql = KeAcquireQueuedSpinLock(7i64, v24, (INT64)a3);
_InterlockedExchange64((volatile __int64 *)&IrpExclusiveOplock->CancelRoutine, 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, IrpExclusiveOplock->CancelIrql);
if( !IrpExclusiveOplock->Cancel )
{
v31.MasterIrp = (_IRP *)IrpExclusiveOplock->AssociatedIrp;
*(_OWORD *)&v31.MasterIrp->Type = 0i64;
*(_QWORD *)&v31.MasterIrp->Flags = 0i64;
*(_DWORD *)&v31.MasterIrp->Type = 1572865;
*(_DWORD *)&v31.MasterIrp->AllocationProcessorNumber = (Oplock->OplockState >> 12) & 7;
HIDWORD(v31.MasterIrp->MdlAddress) |= 1u;
IrpExclusiveOplock->IoStatus.Information = 24i64;
Oplock->IrpExclusiveOplock->IoStatus.Status = 0;
LOBYTE(v30) = 1;
IofCompleteRequest(Oplock->IrpExclusiveOplock, v30);
Oplock->IrpExclusiveOplock = 0i64;
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x805040;
LABEL_151:
v17 = 1;
goto LABEL_152;
}
}
else
{
if( (a6 & 0x4000) == 0 )
goto LABEL_152;
v32 = Oplock->IrpExclusiveOplock;
v32->CancelIrql = KeAcquireQueuedSpinLock(7i64, v24, (INT64)a3);
_InterlockedExchange64((volatile __int64 *)&v32->CancelRoutine, 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v32->CancelIrql);
if( !v32->Cancel )
{
v33.MasterIrp = (_IRP *)v32->AssociatedIrp;
*(_OWORD *)&v33.MasterIrp->Type = 0i64;
*(_QWORD *)&v33.MasterIrp->Flags = 0i64;
*(_DWORD *)&v33.MasterIrp->Type = 1572865;
*(_DWORD *)&v33.MasterIrp->AllocationProcessorNumber = (Oplock->OplockState >> 12) & 7;
LODWORD(v33.MasterIrp->MdlAddress) = 1;
HIDWORD(v33.MasterIrp->MdlAddress) |= 1u;
v32->IoStatus.Information = 24i64;
Oplock->IrpExclusiveOplock->IoStatus.Status = 0;
IofCompleteRequest(Oplock->IrpExclusiveOplock, 1);
Oplock->IrpExclusiveOplock = 0i64;
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x105040;
v17 = 1;
goto LABEL_152;
}
}
goto LABEL_140;
}
switch( v25 )
{
case 0x7040u:
if( a6 == 0x4000 )
{
v69 = Oplock->IrpExclusiveOplock;
v69->CancelIrql = KeAcquireQueuedSpinLock(7i64, v24, (INT64)a3);
_InterlockedExchange64((volatile __int64 *)&v69->CancelRoutine, 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v69->CancelIrql);
if( !v69->Cancel )
{
v71.MasterIrp = (_IRP *)v69->AssociatedIrp;
*(_OWORD *)&v71.MasterIrp->Type = 0i64;
*(_QWORD *)&v71.MasterIrp->Flags = 0i64;
*(_DWORD *)&v71.MasterIrp->Type = 1572865;
*(_DWORD *)&v71.MasterIrp->AllocationProcessorNumber = (Oplock->OplockState >> 12) & 7;
LODWORD(v71.MasterIrp->MdlAddress) = 3;
HIDWORD(v71.MasterIrp->MdlAddress) |= 1u;
v69->IoStatus.Information = 24i64;
Oplock->IrpExclusiveOplock->IoStatus.Status = 0;
LOBYTE(v70) = 1;
IofCompleteRequest(Oplock->IrpExclusiveOplock, v70);
Oplock->IrpExclusiveOplock = 0i64;
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x507040;
goto LABEL_151;
}
}
else if( a6 == 0x2000 )
{
v72 = Oplock->IrpExclusiveOplock;
v72->CancelIrql = KeAcquireQueuedSpinLock(7i64, v24, (INT64)a3);
_InterlockedExchange64((volatile __int64 *)&v72->CancelRoutine, 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v72->CancelIrql);
if( !v72->Cancel )
{
v73.MasterIrp = (_IRP *)v72->AssociatedIrp;
*(_OWORD *)&v73.MasterIrp->Type = 0i64;
*(_QWORD *)&v73.MasterIrp->Flags = 0i64;
*(_DWORD *)&v73.MasterIrp->Type = 1572865;
*(_DWORD *)&v73.MasterIrp->AllocationProcessorNumber = (Oplock->OplockState >> 12) & 7;
LODWORD(v73.MasterIrp->MdlAddress) = 5;
v74 = HIDWORD(v73.MasterIrp->MdlAddress) | 1;
HIDWORD(v73.MasterIrp->MdlAddress) = v74;
if( !*(_BYTE *)v93 )
{
HIDWORD(v73.MasterIrp->MdlAddress) = v74 | 2;
v73.MasterIrp->Flags = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(v93 + 8) + 8i64) + 20i64);
*((_WORD *)&v73.MasterIrp->Flags + 2) = *(_WORD *)(v93 + 26);
}
v72->IoStatus.Information = 24i64;
Oplock->IrpExclusiveOplock->IoStatus.Status = 0;
LOBYTE(v73.MasterIrp) = 1;
IofCompleteRequest(Oplock->IrpExclusiveOplock, v73.IrpCount);
Oplock->IrpExclusiveOplock = 0i64;
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x307040;
goto LABEL_151;
}
}
else
{
if( (a6 & 0x5000) != 20480 )
goto LABEL_152;
v75 = Oplock->IrpExclusiveOplock;
v75->CancelIrql = KeAcquireQueuedSpinLock(7i64, v24, (INT64)a3);
_InterlockedExchange64((volatile __int64 *)&v75->CancelRoutine, 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v75->CancelIrql);
if( !v75->Cancel )
{
v80.MasterIrp = (_IRP *)v75->AssociatedIrp;
*(_OWORD *)&v80.MasterIrp->Type = 0i64;
*(_QWORD *)&v80.MasterIrp->Flags = 0i64;
*(_DWORD *)&v80.MasterIrp->Type = 1572865;
*(_DWORD *)&v80.MasterIrp->AllocationProcessorNumber = (Oplock->OplockState >> 12) & 7;
HIDWORD(v80.MasterIrp->MdlAddress) |= 1u;
v75->IoStatus.Information = 24i64;
Oplock->IrpExclusiveOplock->IoStatus.Status = 0;
LOBYTE(v76) = 1;
IofCompleteRequest(Oplock->IrpExclusiveOplock, v76);
Oplock->IrpExclusiveOplock = 0i64;
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x807040;
goto LABEL_151;
}
}
LABEL_140:
FsRtlpModifyThreadPriorities(Oplock, 0i64, 0);
FsRtlpClearOwner(Oplock, 0i64);
Oplock->WaiterPriority = 0;
v78 = Oplock->IrpExclusiveOplock;
if( (_NONOPAQUE_OPLOCK *)Oplock->IrpExclusiveOplock->IoStatus.Information == Oplock )
{
v78->IoStatus.Information = 0i64;
v78 = Oplock->IrpExclusiveOplock;
}
v78->IoStatus.Status = -1073741536;
LOBYTE(v77) = 1;
IofCompleteRequest(Oplock->IrpExclusiveOplock, v77);
Oplock->IrpExclusiveOplock = 0i64;
ObfDereferenceObjectWithTag(Oplock->FileObject, 0x746C6644ui64);
Oplock->FileObject = 0i64;
Oplock->OplockState = Oplock->OplockState & 0x20 | 1;
while( 1 )
{
v79 = Oplock->WaitingIrps.Flink;
if( v79 == &Oplock->WaitingIrps )
break;
FsRtlpRemoveAndCompleteWaitingIrp((_WAITING_IRP *)v79);
}
v89 = 0;
v88 = 1;
goto LABEL_152;
case 0xB000u:
LABEL_51:
if( (a6 & 0x1000) == 0 )
goto LABEL_63;
v40 = (_NONOPAQUE_OPLOCK *)Oplock->IrpOplocksR.Flink;
while( v40 != (_NONOPAQUE_OPLOCK *)&Oplock->IrpOplocksR )
{
ExclusiveOplockOwner = v40->ExclusiveOplockOwner;
if( LODWORD(ExclusiveOplockOwner->Pcb.ProfileListHead.Flink) == 590400 )
{
if( v18 )
goto LABEL_59;
FsRtlpOplockKeysEqual(
*(_FILE_OBJECT **)(v15 + 48),
(_FILE_OBJECT *)ExclusiveOplockOwner->Pcb.ThreadListHead.Flink,
v14);
if( v42 )
{
v14 = a4;
v40 = (_NONOPAQUE_OPLOCK *)v40->IrpExclusiveOplock;
v15 = v93;
}
else
{
v14 = a4;
LABEL_59:
if( (v14 & 0x10010000) != 0 )
return(unsigned int)-1073739511;
FileObject = (_LIST_ENTRY **)v40->FileObject;
FsRtlpRemoveAndCompleteReadOnlyIrp(*FileObject, 0i64, 0i64);
v14 = a4;
v40 = (_NONOPAQUE_OPLOCK *)*FileObject;
v15 = v93;
}
}
else
{
v40 = (_NONOPAQUE_OPLOCK *)v40->IrpExclusiveOplock;
v15 = v93;
}
}
LODWORD(v24) = v97;
LABEL_63:
if( (Oplock->OplockState & 0x1F0FFDF) == 45056 )
{
LABEL_64:
if( a6 == 0x2000 )
{
p_IrpOplocksRH = &Oplock->IrpOplocksRH;
v45 = Oplock->IrpOplocksRH.Flink;
while( 1 )
{
while( 1 )
{
if( v45 == p_IrpOplocksRH )
goto LABEL_119;
v46 = v45[1].Flink;
if( !v18 )
{
FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)v45[1].Blink, 0i64);
if( v47 )
goto LABEL_85;
LODWORD(v24) = v97;
}
if( (_DWORD)v24 )
return(unsigned int)-1073739511;
if( !v45[3].Blink )
break;
v17 = 1;
v87 = 1;
v45 = v45->Flink;
v15 = v93;
p_IrpOplocksRH = &Oplock->IrpOplocksRH;
}
v45 = v45->Blink;
if( Feature_Servicing_39887415__private_IsEnabled() )
{
v50 = 1;
v51 = 0;
v52 = 0;
if( !*(_BYTE *)v93 )
{
v50 = 3;
v52 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(v93 + 8) + 8i64) + 20i64);
v51 = *(_WORD *)(v93 + 26);
}
LODWORD(v85) = v52;
LODWORD(v84) = v50;
if( !FsRtlpRemoveAndCompleteRHIrp(v45->Flink, Oplock, 0i64, 0x1000ui64, v84, v85, v51) )
{
v90 = 1;
goto LABEL_85;
}
v88 = 0;
}
else
{
BYTE5(v46[4].Flink) = KeAcquireQueuedSpinLock(7i64, v48, v49);
_InterlockedExchange64((volatile __int64 *)&v46[6].Blink, 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, BYTE5(v46[4].Flink));
if( BYTE4(v46[4].Flink) )
{
LODWORD(AccessMode) = 0;
LODWORD(v85) = 0;
LODWORD(v84) = 0;
FsRtlpRemoveAndBreakRHIrp(v45->Flink, Oplock, 0, 3221225760i64, v84, v85, AccessMode, 0);
v90 = 1;
v17 = v87;
goto LABEL_85;
}
v53 = 1;
v54 = 0;
ShareMode = 0;
if( !*(_BYTE *)v93 )
{
v53 = 3;
v54 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(v93 + 8) + 8i64) + 20i64);
ShareMode = *(_WORD *)(v93 + 26);
}
LODWORD(AccessMode) = v54;
LODWORD(v85) = v53;
LODWORD(v84) = 4096;
FsRtlpRemoveAndBreakRHIrp(v45->Flink, Oplock, 0, 0i64, v84, v85, AccessMode, ShareMode);
v88 = 0;
}
v17 = 1;
v87 = 1;
v89 = v18 != 0;
LABEL_85:
LODWORD(v24) = v97;
v45 = v45->Flink;
v15 = v93;
p_IrpOplocksRH = &Oplock->IrpOplocksRH;
}
}
if( (a6 & 0x5000) == 20480 )
{
v56 = Oplock->RHBreakQueue.Flink;
while( v56 != &Oplock->RHBreakQueue )
{
if( v18
|| (FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)v56[1].Blink, v14),
v14 = a4,
!v57) )
{
if( (v14 & 0x10010000) != 0 )
return(unsigned int)-1073739511;
LODWORD(v56[3].Flink) &= 0xFF0FFFFF;
LODWORD(v56[3].Flink) |= 0x800000u;
if( (a6 & 0x2000) != 0 )
v17 = 1;
v87 = v17;
}
v56 = v56->Flink;
v15 = v93;
}
v58 = &Oplock->IrpOplocksRH;
v59 = Oplock->IrpOplocksRH.Flink;
while( 1 )
{
while( 1 )
{
if( v59 == v58 )
goto LABEL_119;
v60 = v59[1].Flink;
if( !v18 )
{
FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)v59[1].Blink, v14);
if( v61 )
goto LABEL_118;
v14 = a4;
}
if( (v14 & 0x10010000) != 0 )
return(unsigned int)-1073739511;
if( !v59[3].Blink )
break;
v62 = v17;
if( (a6 & 0x2000) != 0 )
v62 = 1;
v17 = v62;
v87 = v62;
v59 = v59->Flink;
v15 = v93;
v58 = &Oplock->IrpOplocksRH;
}
v59 = v59->Blink;
if( Feature_Servicing_39887415__private_IsEnabled() )
{
LODWORD(v85) = 0;
LODWORD(v84) = 1;
if( !FsRtlpRemoveAndCompleteRHIrp(v59->Flink, Oplock, 0i64, 0i64, v84, v85, 0) )
{
v90 = 1;
goto LABEL_118;
}
v88 = 0;
v65 = v17;
if( (a6 & 0x2000) != 0 )
v65 = 1;
v87 = v65;
v89 = v18 != 0;
}
else
{
BYTE5(v60[4].Flink) = KeAcquireQueuedSpinLock(7i64, v63, v64);
_InterlockedExchange64((volatile __int64 *)&v60[6].Blink, 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, BYTE5(v60[4].Flink));
v66 = v59->Flink;
LODWORD(AccessMode) = 0;
if( BYTE4(v60[4].Flink) )
{
LODWORD(v85) = 0;
LODWORD(v84) = 0;
FsRtlpRemoveAndBreakRHIrp(v66, Oplock, 0, 3221225760i64, v84, v85, AccessMode, 0);
v90 = 1;
v17 = v87;
goto LABEL_118;
}
LODWORD(v85) = 1;
LODWORD(v84) = 0;
FsRtlpRemoveAndBreakRHIrp(v66, Oplock, 0, 0i64, v84, v85, AccessMode, 0);
v88 = 0;
v65 = v87;
if( (a6 & 0x2000) != 0 )
v65 = 1;
v87 = v65;
v89 = v18 != 0;
}
v17 = v65;
LABEL_118:
v14 = a4;
v59 = v59->Flink;
v15 = v93;
v58 = &Oplock->IrpOplocksRH;
}
}
LABEL_119:
if( v90 )
FsRtlpReleaseIrpsWaitingForRH(Oplock);
if( !v17 )
{
v67 = Oplock->RHBreakQueue.Flink;
if( v67 != &Oplock->RHBreakQueue && (a6 & 0x2000) != 0 )
{
if( v18 )
{
LABEL_128:
v17 = 1;
}
else
{
while( v67 != &Oplock->RHBreakQueue )
{
FsRtlpOplockKeysEqual((_FILE_OBJECT *)v67[1].Blink, *(_FILE_OBJECT **)(v93 + 48), 0i64);
if( !v68 )
goto LABEL_128;
v67 = v67->Flink;
}
}
}
}
}
FsRtlpComputeShareableOplockState(Oplock);
goto LABEL_152;
case 0x103000u:
v34 = 0;
v35 = a6 & 0x1000;
if( (a6 & 0x1000) != 0 )
{
v36 = Oplock->RHBreakQueue.Flink;
while( v36 != &Oplock->RHBreakQueue )
{
if( v18
|| (FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)v36[1].Blink, v14),
v14 = a4,
!v37) )
{
v34 = 1;
if( (v14 & 0x10010000) != 0 )
return(unsigned int)-1073739511;
LODWORD(v36[3].Flink) &= 0xFF0FFFFF;
LODWORD(v36[3].Flink) |= 0x800000u;
}
v36 = v36->Flink;
v15 = v93;
}
FsRtlpComputeShareableOplockState(Oplock);
v35 = a6 & 0x1000;
}
if( (a6 & 0x2000) == 0 )
goto LABEL_152;
if( !v34 )
{
if( !v35 )
{
for( i = Oplock->RHBreakQueue.Flink; i != &Oplock->RHBreakQueue; i = i->Flink )
{
if( v18 )
goto LABEL_151;
FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v93 + 48), (_FILE_OBJECT *)i[1].Blink, 0i64);
if( !v39 )
goto LABEL_151;
}
}
goto LABEL_152;
}
goto LABEL_151;
}
LABEL_180:
v28 = (v23 & 0x1000000) == 0;
goto LABEL_150;
}
if( (a6 & 0x1000) != 0 )
Oplock->OplockState = Oplock->OplockState & 0x20 | 0x805040;
}
v28 = (a6 & 0x5000) == 0;
goto LABEL_150;
}
FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(a2 + 48), Oplock->FileObject, v14);
if( !v22 )
{
v15 = v93;
v14 = a4;
goto LABEL_14;
}
}
return 0;
}
if( a3 )
{
a3->IoStatus.Status = -1073741597;
LOBYTE(a2) = 1;
IofCompleteRequest(a3, a2);
}
return 3221225699i64;
}Referenced by:
FsRtlCheckOplockEx2
FsRtlCheckUpperOplock
FsRtlOplockBreakH
FsRtlOplockBreakToNoneEx