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.