PopDiagTraceIrpFinish
VOID __stdcall PopDiagTraceIrpFinish(_IRP *Irp){
const WCHAR *v1;
__int64 v2;
int Status;
char v4;
int v5;
__int64 v6;
__int64 v7;
INT64 v8;
_DEVICE_OBJECT *DeviceThatFailedIrp;
UINT64 v10;
NTSTATUS v11;
wchar_t *v12;
__int64 v13;
_IRP *Irpa;
_EVENT_DATA_DESCRIPTOR UserData;
__int64 *v16;
__int64 v17;
const WCHAR *v18;
int v19;
int v20;
wchar_t DriverName[64];
Irpa = Irp;
PopDiagTraceIrpFinishTelemetry((INT64)Irp);
if( PopDiagHandleRegistered && EtwEventEnabled(PopDiagHandle, &POP_ETW_EVENT_IRPFINISH) )
{
v1 = &ppszDestEnd;
v2 = *((_QWORD *)&Irpa->Tail.IrpExtension + 9 * Irpa->StackCount);
Status = Irpa->IoStatus.Status;
LODWORD(v13) = Status;
v4 = *(_BYTE *)(v2 + 184);
v5 = *(_DWORD *)(v2 + 188);
if( Status < 0 && !v5 )
{
DeviceThatFailedIrp = IoFindDeviceThatFailedIrp(Irpa);
v11 = PopDiagGetDriverName(DeviceThatFailedIrp, DriverName, v10);
Status = v13;
v12 = DriverName;
if( v11 < 0 )
v12 = (wchar_t *)&ppszDestEnd;
v1 = v12;
}
if( v5 == 1 && v4 == 2 )
{
v7 = *(_QWORD *)(v2 + 24);
if( v7 )
v8 = *(_QWORD *)(*(_QWORD *)(v7 + 312) + 40i64);
else
v8 = 0i64;
PopFxAddLogEntry(v8, 0, 23, Status);
}
*(_QWORD *)&UserData.Size = 8i64;
UserData.Ptr = (unsigned __int64)&Irpa;
v16 = &v13;
v6 = -1i64;
v17 = 4i64;
v18 = v1;
do
++v6;
while( v1[v6] );
v19 = 2 * v6 + 2;
v20 = 0;
EtwWriteEx(PopDiagHandle, &POP_ETW_EVENT_IRPFINISH, 0i64, 0, 0, 0, 3u, &UserData);
}
}Referenced by:
PopDequeueQuerySetIrp
PopRequestCompletion