PnpLogVetoInformation
VOID __stdcall PnpLogVetoInformation(_UNICODE_STRING *DeviceInstance, _LIST_ENTRY *VetoProcessListHead){
_LIST_ENTRY *Flink;
bool i;
_LIST_ENTRY **p_Blink;
char v7;
_EPROCESS *v8;
UINT64 v9;
_UNICODE_STRING *v10;
const char *ProcessImageFileName;
INT8 v12;
char *j;
__int64 v14;
char *v15;
struct _STRING DestinationString;
UNICODE_STRING v17;
PVOID P;
_EPROCESS *Process;
Flink = VetoProcessListHead->Flink;
P = 0i64;
v17 = 0i64;
Process = 0i64;
for( i = VetoProcessListHead == Flink; ; i = VetoProcessListHead == Flink )
{
p_Blink = &Flink[-2].Blink;
if( i )
break;
v7 = 0;
if( PsLookupProcessByProcessId((HANDLE)*((unsigned int *)p_Blink + 4), (PEPROCESS *)&Process) >= 0 )
{
v8 = Process;
if( (int)PsGetAllocatedFullProcessImageName((__int64)Process, &P) >= 0 )
{
v10 = (_UNICODE_STRING *)P;
if( !*(_WORD *)P )
{
v7 = 1;
DestinationString = 0i64;
ExFreePoolWithTag(P, 0);
v10 = &v17;
P = &v17;
ProcessImageFileName = (const char *)PsGetProcessImageFileName((__int64)v8);
RtlInitAnsiString(&DestinationString, ProcessImageFileName, v12);
RtlAnsiStringToUnicodeString(&v17, &DestinationString, 1u);
}
}
else
{
v10 = 0i64;
P = 0i64;
}
PnpDiagnosticTraceAppVeto(v9, (UNICODE_STRING *)*((unsigned int *)v8 + 272), v10);
for( j = (char *)*p_Blink; ; j = (char *)*((_QWORD *)v15 + 1) )
{
v15 = j - 8;
if( p_Blink == (_LIST_ENTRY **)j )
break;
if( *(_QWORD *)v15 )
v14 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)v15 + 312i64) + 40i64);
else
v14 = 0i64;
PnpTraceDeviceRemoveProcessVeto(DeviceInstance, (UNICODE_STRING *)(v14 + 40), v10);
}
if( v7 )
{
RtlFreeAnsiString(v10);
}
else if( v10 )
{
ExFreePoolWithTag(v10, 0);
}
ObfDereferenceObjectWithTag(v8, 0x746C6644ui64);
}
Flink = p_Blink[3];
}
}Referenced by:
PipSendQueryRemoveIrpAndCheckOpenHandles