FsRtlpRemoveAndCompleteReadOnlyIrp
VOID __stdcall FsRtlpRemoveAndCompleteReadOnlyIrp(_LIST_ENTRY *Link, INT64 CompletionStatus, UINT64 NewOplockLevel){
_LIST_ENTRY *Flink;
_IRP *p_Blink;
int v5;
unsigned int v7;
INT64 v8;
INT64 v9;
_LIST_ENTRY *v10;
_LIST_ENTRY *Blink;
_LIST_ENTRY *v12;
__int64 v13;
bool v14;
int v15;
NTSTATUS IsEnabled;
_CCHAR v17;
Flink = Link[1].Flink;
p_Blink = (_IRP *)&Link[-11].Blink;
v5 = CompletionStatus;
v7 = NewOplockLevel;
ObfDereferenceObjectWithTag(Flink[3].Flink, 0x746C6644ui64);
BYTE5(Link[-7].Blink) = KeAcquireQueuedSpinLock(7i64, v8, v9);
_InterlockedExchange64((volatile __int64 *)&Link[-4], 0i64);
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, BYTE5(Link[-7].Blink));
v10 = Link->Flink;
if( Link->Flink->Blink != Link || (Blink = Link->Blink, Blink->Flink != Link) )
__fastfail(3u);
Blink->Flink = v10;
v10->Blink = Blink;
if( LODWORD(Flink[1].Blink) == 590400 )
{
if( BYTE4(Link[-7].Blink) )
{
v14 = Feature_Servicing_39887415__private_IsEnabled() == 0;
v15 = -1073741536;
v13 = 0i64;
if( v14 )
v15 = v5;
v5 = v15;
}
else
{
v12 = Link[-9].Flink;
v13 = 24i64;
*(_LIST_ENTRY **)((char *)&v12->Blink + 4) = 0i64;
HIDWORD(v12[1].Flink) = 0;
LODWORD(v12->Flink) = 1572865;
LODWORD(v12->Blink) = (v7 >> 12) & 7;
HIDWORD(v12->Flink) = 1;
}
}
else
{
if( Feature_Servicing_39887415__private_IsEnabled() && BYTE4(Link[-7].Blink) )
v5 = -1073741536;
v13 = 8i64;
}
Link[-7].Flink = (_LIST_ENTRY *)v13;
IsEnabled = Feature_Servicing_39887415__private_IsEnabled();
LOBYTE(v17) = 1;
if( !IsEnabled && BYTE4(Link[-7].Blink) )
v5 = -1073741536;
LODWORD(Link[-8].Blink) = v5;
IofCompleteRequest(p_Blink, v17);
}Referenced by:
FsRtlCheckUpperOplock
FsRtlpCancelReadOnlyOplockIrp
FsRtlpOplockBreakByCacheFlags
FsRtlpOplockBreakToNone
FsRtlpOplockCleanup
FsRtlpRequestExclusiveOplock
FsRtlpRequestShareableOplock