IopPerfCompleteRequest
VOID __stdcall IopPerfCompleteRequest(_IRP *Irp, CHAR PriorityBoost){
bool v2;
char v5;
char v6;
__int64 v7;
unsigned __int8 *v8;
IRP *v9;
__int64 v10;
__int64 v11;
signed __int32 v12;
bool v13;
char v14;
UINT64 Flag;
UINT64 Flaga;
__int128 v17;
__int128 v18;
_IRP *v19;
int v20;
__int64 v21[2];
int v22;
EVENT_DATA_DESCRIPTOR EventData;
EVENT_DATA_DESCRIPTOR v24;
v2 = *(_WORD *)Irp == 6;
v17 = 0i64;
v18 = 0i64;
if( v2 )
{
v5 = *((_BYTE *)Irp + 66);
v6 = *((_BYTE *)Irp + 67);
if( v6 <= (char)(v5 + 1) )
{
v7 = 0i64;
v8 = 0i64;
if( v6 <= v5 )
{
v8 = (unsigned __int8 *)*((_QWORD *)Irp + 23);
if( *((_QWORD *)v8 + 5) )
{
if( (IopPerfStatus & 2) != 0 && IopIrpHasExtensionType(Irp, 1ui64) && !IopIrpHasExtensionType(v9, 4ui64) )
{
IopProcessIoTracking(
*(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - *(_QWORD *)(*((_QWORD *)Irp + 25) + 40i64),
*(unsigned int *)(*((_QWORD *)v8 + 5) + 72i64));
IopFreeIrpExtension((__int64)Irp, 1, 1);
}
v10 = *(_QWORD *)(*((_QWORD *)v8 + 5) + 8i64);
if( v10 )
{
v11 = *v8;
if( (unsigned __int8)v11 <= 0x1Bu )
v7 = *(_QWORD *)(v10 + 8 * v11 + 112);
}
}
else
{
v7 = *((_QWORD *)v8 + 7);
}
}
if( (IopPerfStatus & 1) != 0 )
{
EventData.Reserved = 0;
v21[0] = v7;
v21[1] = (__int64)Irp;
v12 = _InterlockedIncrement(&IopPerfDriverUniqueMatchId);
LODWORD(Flag) = 4200450;
v22 = v12;
EventData.Ptr = (unsigned __int64)v21;
EventData.Size = 20;
EtwTraceKernelEvent(&EventData, 1ui64, 0x20000010ui64, 0x134u, Flag);
if( !v8 )
{
LABEL_19:
IopfCompleteRequest(Irp, PriorityBoost);
v24.Reserved = 0;
v24.Ptr = (unsigned __int64)&v19;
v19 = Irp;
v20 = v12;
v24.Size = 12;
LODWORD(Flaga) = 4200450;
EtwTraceKernelEvent(&v24, 1ui64, 0x20000010ui64, 0x135u, Flaga);
return;
}
v13 = *((int *)Irp + 12) < 0;
*((_QWORD *)&v17 + 1) = *((_QWORD *)v8 + 8);
*(_QWORD *)&v17 = v8;
DWORD2(v18) = v12;
BYTE12(v18) = v8[3];
v14 = v8[3];
if( v13 )
{
if( v14 < 0 )
goto LABEL_17;
}
else if( (v14 & 0x40) != 0 )
{
goto LABEL_17;
}
if( !*((_BYTE *)Irp + 68) || (v14 & 0x20) == 0 )
{
v8[3] = v14 | 0xC0;
goto LABEL_18;
}
LABEL_17:
*(_QWORD *)&v18 = *((_QWORD *)v8 + 7);
*((_QWORD *)&v17 + 1) = *((_QWORD *)v8 + 8);
LABEL_18:
*((_QWORD *)v8 + 7) = IopPerfCompletionRoutine;
*((_QWORD *)v8 + 8) = &v17;
goto LABEL_19;
}
}
}
IopfCompleteRequest(Irp, PriorityBoost);
}Referenced by:
IofCompleteRequest
IovCompleteRequest