PiDevCfgFreeResolveContext
VOID __stdcall PiDevCfgFreeResolveContext(_PI_DEVCFG_RESOLVE_CONTEXT *ResolveContext){
__int64 v2;
unsigned int i;
void **v4;
void *v5;
void **v6;
VOID *v7;
int v8;
__int64 v9;
VOID *v10;
if( *((_QWORD *)ResolveContext + 3) )
{
for( i = 0; i < 0x7F; ++i )
{
while( 1 )
{
v4 = (void **)(*((_QWORD *)ResolveContext + 3) + 16i64 * i);
v5 = *v4;
if( *v4 == v4 )
break;
if( *((void ***)v5 + 1) != v4 || (v6 = *(void ***)v5, *(void **)(*(_QWORD *)v5 + 8i64) != v5) )
__fastfail(3u);
*v4 = v6;
v6[1] = v4;
RtlFreeAnsiString((_UNICODE_STRING *)v5 + 1);
v7 = (VOID *)*((_QWORD *)v5 + 5);
if( v7 )
{
v8 = *((_DWORD *)v5 + 8);
if( (_WORD)v8 == 0x8000 )
{
if( (v8 & 0x100000) != 0 )
{
if( *(&stru_140CF2E80 + 607) && (v9 = *(_QWORD *)(*(&stru_140CF2E80 + 607) + 224i64)) != 0 )
v10 = *(VOID **)(v9 + 8);
else
v10 = 0i64;
RegRtlDeleteTreeInternal(v7, 0i64, v10, 0);
}
ZwClose(*((_QWORD *)v5 + 5));
}
else
{
ExFreePoolWithTag(v7, 0);
}
}
ExFreePoolWithTag(v5, 0);
}
}
ExFreePoolWithTag(*((PVOID *)ResolveContext + 3), 0);
}
v2 = *((_QWORD *)ResolveContext + 2);
if( v2 )
ZwClose(v2);
}Referenced by:
PiDevCfgConfigureDeviceKeys
PiDevCfgInitResolveContext
PiDevCfgVerifyDeviceAllowed