LdrpVerifyAlternateResourceModuleEx

BOOL __fastcall LdrpVerifyAlternateResourceModuleEx(VOID *a1, VOID *a2, INT64 a3, const WCHAR *a4, INT64 a5){
  char *v7; 
  INT64 v8; 
  char *v9; 
  char *v10; 
  __int64 v11; 
  void *v13[3]; 
  PVOID RcConfig; 
  RcConfig = 0i64;
  v13[0] = 0i64;
  if( (a5 & 0x1000) != 0 )
  {
    LODWORD(v7) = LdrResGetRCConfig(a1, 0i64, &RcConfig, 0x1000ui64, 1u);
    if( (int)v7 >= 0 )
    {
      LODWORD(v7) = LdrResGetRCConfig(a2, 0i64, v13, 0x1000ui64, 0);
      if( (int)v7 < 0 )
        goto LABEL_11;
      v9 = (char *)RcConfig;
      v10 = (char *)v13[0];
LABEL_4:
      v11 = *(_QWORD *)(v9 + 44) - *(_QWORD *)(v10 + 44);
      if( !v11 )
        v11 = *(_QWORD *)(v9 + 52) - *(_QWORD *)(v10 + 52);
      if( !v11 )
      {
        if( (a5 & 0x1000000) != 0 )
          goto LABEL_10;
        if( a4 )
        {
          LODWORD(v7) = wcsicmp(a4, (const wchar_t *)&v10[*((unsigned int *)v10 + 29)]);
          if( !(_DWORD)v7 )
            goto LABEL_10;
        }
      }
LABEL_11:
      LOBYTE(v7) = 0;
      return(int)v7;
    }
    if( (_DWORD)v7 != -1073741686 )
      goto LABEL_11;
  }
  else
  {
    v7 = (char *)LdrpGetRcConfig(a1, (INT64)a2, 0, 1);
    v9 = v7;
    if( v7 )
    {
      v7 = (char *)LdrpGetRcConfig(a2, v8, 0, 0);
      v10 = v7;
      if( !v7 )
        goto LABEL_11;
      goto LABEL_4;
    }
  }
  if( (a5 & 0x1000000) == 0 )
    goto LABEL_11;
LABEL_10:
  LOBYTE(v7) = 1;
  return(int)v7;
}

Referenced by:

LdrLoadAlternateResourceModuleEx