PopRecordPoIrpBlackboxInformation
VOID __stdcall PopRecordPoIrpBlackboxInformation(){
UINT64 v0;
__int64 v1;
int v2;
_DWORD *v3;
UINT64 v4;
unsigned __int64 v5;
__int64 v6;
_DWORD *PoolWithTag;
ULONG_PTR v8;
char *v9;
__int64 i;
__int64 v11;
UINT64 v12;
__int64 v13;
UINT64 OutputBufferLength;
struct _KLOCK_QUEUE_HANDLE LockHandle;
__int64 InputBuffer;
__int128 InputBuffer_8;
__int128 v18;
__int16 Src[64];
InputBuffer_8 = 0i64;
InputBuffer = 0i64;
v18 = 0i64;
*(_OWORD *)&LockHandle.LockQueue.Lock = 0i64;
KeAcquireInStackQueuedSpinLock(&PopIrpLock, (KLOCK_QUEUE_HANDLE *)&LockHandle.LockQueue.Lock);
v1 = PopIrpList;
v2 = 0;
v3 = 0i64;
v4 = 64i64;
if( (__int64 *)PopIrpList == &PopIrpList )
goto LABEL_22;
do
{
if( *(_BYTE *)(v1 + 196) )
{
v5 = 24i64;
if( PopDiagGetDriverName(*(DEVICE_OBJECT **)(v1 + 32), (PWCHAR)Src, v0) >= 0 )
{
v6 = -1i64;
do
++v6;
while( Src[v6] );
v5 = 2 * v6 + 26;
if( v5 < 0x18 )
goto LABEL_22;
}
++v2;
if( v4 + v5 < v4 )
goto LABEL_22;
v4 += v5;
}
v1 = *(_QWORD *)v1;
}
while( (__int64 *)v1 != &PopIrpList );
if( !v2 )
{
LABEL_22:
v4 = 0i64;
}
else
{
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, v4, 0x42424F50ui64);
v3 = PoolWithTag;
if( PoolWithTag )
{
memset((INT64)PoolWithTag, 0i64);
v3[2] = v2;
*((_QWORD *)v3 + 3) = &PopIrpThreadList;
v8 = ExWorkerQueue;
*((_QWORD *)v3 + 2) = &PopIrpList;
v9 = (char *)(v3 + 10);
*((_QWORD *)v3 + 4) = v8;
v3[1] = 1;
*v3 = v4;
for( i = PopIrpList; (__int64 *)i != &PopIrpList; i = *(_QWORD *)i )
{
if( *(_BYTE *)(i + 196) )
{
*((_DWORD *)v9 + 2) = *(unsigned __int8 *)(i + 184);
*((_DWORD *)v9 + 3) = *(_DWORD *)(i + 188);
*((_DWORD *)v9 + 4) = *(_DWORD *)(i + 192);
v11 = 24i64;
*((_DWORD *)v9 + 1) = (KiQueryUnbiasedInterruptTime(1u) - *(_QWORD *)(i + 48)) / 0x2710;
if( PopDiagGetDriverName(*(DEVICE_OBJECT **)(i + 32), (PWCHAR)Src, v12) >= 0 )
{
v13 = -1i64;
do
++v13;
while( Src[v13] );
v11 = 2 * v13 + 26;
memmove((UINT8 *)v9 + 20, (UINT8 *)Src, 2 * v13);
*(_WORD *)&v9[2 * v13 + 20] = 0;
}
*(_DWORD *)v9 = v11;
v9 += v11;
}
}
}
}
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&LockHandle.LockQueue.Lock);
__writecr8((unsigned __int8)InputBuffer);
if( v4 )
{
*(_QWORD *)&v18 = 0i64;
*((_QWORD *)&v18 + 1) = 4i64;
*(_QWORD *)&InputBuffer_8 = v3;
*((_QWORD *)&InputBuffer_8 + 1) = (unsigned int)v4;
LODWORD(OutputBufferLength) = 0;
NtPowerInformation(TraceApplicationPowerMessage|0x40, &InputBuffer_8, 0x20ui64, 0i64, OutputBufferLength);
}
if( v3 )
ExFreePoolWithTag(v3, 0x42424F50u);
}Referenced by:
PopRecordPoBlackboxInformation