PipMigrateCleanServiceCallback
INT64 __fastcall PipMigrateCleanServiceCallback(INT64 a1, VOID *a2, const WCHAR *a3){
char *PoolWithTag;
__int64 v5;
unsigned int v6;
ULONG v7;
ULONG i;
int v9;
unsigned int v11;
int v12;
int v13;
int v14;
unsigned int v15;
void *v16;
v16 = 0i64;
v11 = 0;
PoolWithTag = 0i64;
v14 = 0;
v15 = 0;
v13 = 0;
if( (int)PnpCtxRegOpenKey(a1, (char *)a2, a3, 0, 0xF003Fu, &v16) >= 0 )
{
v12 = 4;
if( (int)PnpCtxRegQueryValue(v5, v16, L"Clean", &v11, &v13, (__int64)&v12) >= 0 && v11 == 4 && v12 == 4 )
{
if( v13 )
{
if( (int)PnpCtxRegQueryInfoKey(v5, v16, &v14, &v15, 0i64, 0i64, 0i64) >= 0 )
{
if( v14 )
{
v6 = v15 + 1;
PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 2i64 * (v15 + 1), 0x6E697050ui64);
if( PoolWithTag )
{
v7 = 0;
for( i = 0; ; i = v7 )
{
v11 = v6;
v9 = PnpCtxRegEnumKey(v5, v16, i, PoolWithTag, &v11);
if( v9 == -2147483622 || v9 < 0 )
break;
if( (int)PnpCtxRegDeleteTree(a1, (char *)v16, (const WCHAR *)PoolWithTag) >= 0 )
v7 = 0;
else
++v7;
}
}
}
}
}
}
}
if( v16 )
PnpCtxRegCloseKey(v5, v16);
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0);
return 0i64;
}Referenced by:
No references.