PiDevCfgQueryResolveValue

__int64 __fastcall PiDevCfgQueryResolveValue(__int64 a1, void *a2, const WCHAR *a3, _QWORD *a4){
  NTSTATUS RegistryValue; 
  UINT8 *v7; 
  int v8; 
  WCHAR *v9; 
  CHAR *v10; 
  UINT8 *PoolWithTag; 
  UINT8 *v12; 
  UINT64 VariableModifiers; 
  PVOID P; 
  CHAR *v16; 
  _UNICODE_STRING VariableName; 
  P = 0i64;
  LODWORD(VariableModifiers) = 0;
  v16 = 0i64;
  VariableName = 0i64;
  RegistryValue = IopGetRegistryValue(a2, (PWCHAR)a3, 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
  v7 = (UINT8 *)P;
  v8 = RegistryValue;
  if( RegistryValue >= 0 )
  {
    *((_WORD *)P + 3) = 0;
    if( *(_QWORD *)(a1 + 16)
      && (unsigned int)(*((_DWORD *)v7 + 1) - 1) <= 1
      && PnpValidateStringData((PWCHAR)&v7[*((unsigned int *)v7 + 2)], *((unsigned int *)v7 + 3))
      && PiDevCfgParseVariableName(v9, &VariableName, &VariableModifiers) )
    {
      v8 = PiDevCfgResolveVariable(a1, VariableName.Buffer, &v16);
      if( v8 >= 0 )
      {
        v10 = v16;
        PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(
                                 PagedPool,
                                 (unsigned int)(*((_DWORD *)v7 + 4) + 26 + *((_DWORD *)v16 + 9)),
                                 0x63647050ui64);
        v12 = PoolWithTag;
        if( PoolWithTag )
        {
          *(_DWORD *)PoolWithTag = *(_DWORD *)v7;
          *((_DWORD *)PoolWithTag + 4) = *((_DWORD *)v7 + 4);
          *((_DWORD *)PoolWithTag + 1) = *((_DWORD *)v10 + 8);
          *((_DWORD *)PoolWithTag + 3) = *((_DWORD *)v10 + 9);
          *((_DWORD *)PoolWithTag + 2) = *((_DWORD *)v7 + 4) + 22;
          memmove(PoolWithTag + 20, v7 + 20, *((unsigned int *)v7 + 4));
          *(_WORD *)&v7[2 * ((unsigned __int64)*((unsigned int *)v7 + 4) >> 1) + 20] = 0;
          memmove(&v12[*((unsigned int *)v12 + 2)], *((UINT8 **)v10 + 5), *((unsigned int *)v10 + 9));
          *a4 = v12;
        }
        else
        {
          v8 = -1073741670;
        }
      }
    }
    else
    {
      *a4 = v7;
      v7 = 0i64;
    }
  }
  if( v7 )
    ExFreePoolWithTag(v7, 0);
  return(unsigned int)v8;
}

Referenced by:

PiDevCfgConfigureDeviceKeys
PiDevCfgVerifyDeviceAllowed