PiDevCfgResolveVariableSwitchCase

INT64 __fastcall PiDevCfgResolveVariableSwitchCase(INT64 a1, VOID *a2, INT64 a3){
  int RegistryValue; 
  unsigned int *v7; 
  int v8; 
  unsigned int v9; 
  wchar_t *v10; 
  NTSTATUS v11; 
  const WCHAR *v12; 
  NTSTATUS v13; 
  int v15; 
  PVOID P; 
  CHAR *v17; 
  INT64 v18; 
  wchar_t pszDest[12]; 
  P = 0i64;
  v17 = 0i64;
  v18 = 0i64;
  RegistryValue = IopGetRegistryValue(a2, (PWCHAR)L"Switch", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
  if( RegistryValue < 0 )
    goto LABEL_20;
  v7 = (unsigned int *)P;
  if( !PnpValidateRegistryString((KEY_VALUE_FULL_INFORMATION *)P) )
  {
LABEL_3:
    RegistryValue = -1073741823;
    goto LABEL_21;
  }
  v8 = PiDevCfgResolveVariable(a1, (const WCHAR *)((char *)v7 + v7[2]), &v17);
  RegistryValue = v8;
  if( v8 < 0 )
    goto LABEL_5;
  ExFreePoolWithTag(v7, 0);
  P = 0i64;
  v9 = *((_DWORD *)v17 + 8);
  if( !v9 )
    goto LABEL_11;
  if( v9 <= 2 )
  {
LABEL_26:
    v10 = (wchar_t *)*((_QWORD *)v17 + 5);
LABEL_12:
    if( !v10 )
      goto LABEL_17;
    goto LABEL_13;
  }
  if( v9 != 4 )
  {
    if( v9 != 7 )
    {
LABEL_11:
      v10 = 0i64;
      goto LABEL_12;
    }
    goto LABEL_26;
  }
  RtlStringCchPrintfW(pszDest, 0xBui64, (WCHAR *)L"%u");
  if( v15 < 0 )
    goto LABEL_17;
  v10 = pszDest;
LABEL_13:
  v11 = IopGetRegistryValue(a2, v10, 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
  RegistryValue = v11;
  if( v11 != -1073741772 )
  {
    if( v11 >= 0 )
    {
      v7 = (unsigned int *)P;
      if( !PnpValidateRegistryString((KEY_VALUE_FULL_INFORMATION *)P) )
        goto LABEL_3;
      v12 = (const WCHAR *)((char *)v7 + v7[2]);
      if( v12 )
        goto LABEL_29;
      goto LABEL_17;
    }
LABEL_20:
    v7 = (unsigned int *)P;
    goto LABEL_21;
  }
LABEL_17:
  v13 = IopGetRegistryValue(a2, (PWCHAR)L"Default", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
  RegistryValue = v13;
  if( v13 < 0 )
  {
    if( v13 == -1073741772 )
      RegistryValue = -1073741823;
    goto LABEL_20;
  }
  v7 = (unsigned int *)P;
  if( !PnpValidateRegistryString((KEY_VALUE_FULL_INFORMATION *)P) )
    goto LABEL_3;
  v12 = (const WCHAR *)((char *)v7 + v7[2]);
LABEL_29:
  v8 = PiDevCfgResolveVariable(a1, v12, (CHAR **)&v18);
  RegistryValue = v8;
  if( v8 >= 0 )
  {
    RegistryValue = PiDevCfgCopyVariableData(a3, v18);
    goto LABEL_21;
  }
LABEL_5:
  if( v8 == -1073741772 )
    goto LABEL_3;
LABEL_21:
  if( v7 )
    ExFreePoolWithTag(v7, 0);
  return(unsigned int)RegistryValue;
}

Referenced by:

No references.