FsRtlpReleaseIrpsWaitingForRH
VOID __fastcall FsRtlpReleaseIrpsWaitingForRH(INT64 a1){
INT64 v1;
_WAITING_IRP *Blink;
char v4;
_QWORD **v5;
_QWORD *v6;
_WAITING_IRP *v7;
INT64 v8;
_QWORD *v9;
v1 = a1 + 88;
Blink = *(_WAITING_IRP **)(a1 + 88);
v4 = 1;
if( Blink != (_WAITING_IRP *)(a1 + 88) )
{
v5 = (_QWORD **)(a1 + 72);
do
{
v6 = *v5;
v7 = Blink;
if( *v5 == v5 && (*(_DWORD *)(a1 + 144) & 0x10000) == 0 )
goto LABEL_17;
if( !Blink->BreakAllRH )
{
if( (*(_DWORD *)(a1 + 144) & 0x10000) != 0 )
v6 = *(_QWORD **)(a1 + 120);
v8 = a1 + ((*(_DWORD *)(a1 + 144) & 0x10000) != 0 ? 120i64 : 72i64);
while( v6 != (_QWORD *)v8 )
{
v9 = v6 - 7;
if( (*(_DWORD *)(a1 + 144) & 0x10000) == 0 )
v9 = v6;
if( !FsRtlpOplockKeysEqual(Blink->FileObject, (_FILE_OBJECT *)v9[3], 0i64) )
{
v4 = 0;
break;
}
v6 = (_QWORD *)*v6;
}
if( v4 )
{
LABEL_17:
Blink = (_WAITING_IRP *)Blink->Links.Blink;
FsRtlpRemoveAndCompleteWaitingIrp(v7);
}
}
Blink = (_WAITING_IRP *)Blink->Links.Flink;
}
while( Blink != (_WAITING_IRP *)v1 );
}
}Referenced by:
FsRtlCheckOplockEx2
FsRtlpAcknowledgeOplockBreakByCacheFlags
FsRtlpCancelOplockRHIrp
FsRtlpOplockBreakByCacheFlags
FsRtlpOplockCleanup
FsRtlpOplockFsctrlInternal