RtlpMuiRegLoadLicInformation

NTSTATUS __stdcall RtlpMuiRegLoadLicInformation(_MUIREGISTRYINFO *RegInfo){
  _MUIREGISTRYINFO *v1; 
  VOID *v2; 
  VOID *v3; 
  _MUIREGISTRYINFO v4; 
  VOID *v5; 
  size_t v6; 
  size_t v7; 
  VOID **PoolWithTag; 
  const wchar_t *v9; 
  int v10; 
  WCHAR *v11; 
  WCHAR *v12; 
  size_t v13; 
  size_t v14; 
  VOID **v15; 
  int v16; 
  const wchar_t *v17; 
  WCHAR *v18; 
  WCHAR *v19; 
  size_t v20; 
  size_t v21; 
  VOID **v22; 
  int v23; 
  const wchar_t *v24; 
  WCHAR *v25; 
  WCHAR *v26; 
  NTSTATUS v27; 
  NTSTATUS result; 
  _MUIREGISTRYINFO v29; 
  int v30; 
  _MUIREGISTRYINFO v31; 
  int v32; 
  _MUIREGISTRYINFO v33; 
  int v34; 
  int v35; 
  int v36; 
  UINT8 *Value; 
  unsigned __int64 v38; 
  _UNICODE_STRING DestinationString[2]; 
  UINT64 ValueSize; 
  UINT64 Lcid; 
  UINT64 Type; 

  v36 = -1;
  LODWORD(Lcid) = 0;
  LODWORD(Type) = 0;
  v1 = RegInfo;
  LODWORD(ValueSize) = 0;
  v2 = 0i64;
  Value = 0i64;
  v3 = 0i64;
  v31 = 0;
  v4 = 0;
  v29 = 0;
  v5 = 0i64;
  v33 = 0;
  v35 = 0;
  DestinationString[0] = 0i64;
  if( !RegInfo )
  {
    v27 = -1073741811;
    goto LABEL_58;
  }
  if( RtlpGetWindowsPolicy((WCHAR *)L"WindowsExcludedProcs", &Type, &ValueSize, &Value) >= 0 )
  {
    v35 = 1;
    if( Value )
      ExFreeHeapPool(Value);
    Value = 0i64;
  }
  if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Number-Allowed", &Type, &ValueSize, &Value) >= 0 )
  {
    v36 = *(_DWORD *)Value;
    ExFreeHeapPool(Value);
    Value = 0i64;
  }
  if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Language-Allowed", &Type, &ValueSize, &Value) >= 0 )
  {
    v6 = ValueSize;
    v32 = ValueSize + 4;
    if( (_DWORD)ValueSize != -4 )
    {
      v7 = ValueSize + 4;
      PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)(ValueSize + 4), 1920232557i64);
      v2 = PoolWithTag;
      if( PoolWithTag )
        memset(PoolWithTag, 0i64, v7);
      v6 = ValueSize;
    }
    v38 = (unsigned __int64)v2;
    if( !v2 )
    {
      v31 = 0;
      goto LABEL_65;
    }
    memmove(v2, Value, v6);
    v9 = (const wchar_t *)v2;
    v10 = 0;
    v11 = wcspbrk((WCHAR *)v2, (WCHAR *)L";");
    LOWORD(v12) = 0;
    if( v11 )
    {
      do
      {
        *v11 = 0;
        RtlInitUnicodeString(DestinationString, v9);
        if( RtlCultureNameToLCID(DestinationString, &Lcid) )
          ++v10;
        v9 = v11 + 1;
        v12 = wcspbrk(v11 + 1, (WCHAR *)L";");
        v11 = v12;
      }
      while( v12 );
      v1 = RegInfo;
    }
    if( *v9 != (_WORD)v12 )
    {
      RtlInitUnicodeString(DestinationString, v9);
      if( RtlCultureNameToLCID(DestinationString, &Lcid) )
        ++v10;
    }
    if( !v10 )
      ExFreeHeapPool(v2);
    v31 = v10 != 0 ? v32 : 0;
    v2 = (VOID *)(v38 & -(__int64)(v10 != 0));
    if( Value )
      ExFreeHeapPool(Value);
    Value = 0i64;
    v4 = 0;
  }
  if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Language-Disallowed", &Type, &ValueSize, &Value) >= 0 )
  {
    v13 = ValueSize;
    v30 = ValueSize + 4;
    if( (_DWORD)ValueSize == -4 )
    {
      v3 = 0i64;
    }
    else
    {
      v14 = ValueSize + 4;
      v15 = ExAllocatePoolWithTag(1ui64, (unsigned int)(ValueSize + 4), 1920232557i64);
      v3 = v15;
      if( v15 )
        memset(v15, 0i64, v14);
      v13 = ValueSize;
    }
    v38 = (unsigned __int64)v3;
    if( !v3 )
    {
      v4 = 0;
      goto LABEL_65;
    }
    memmove(v3, Value, v13);
    v16 = 0;
    v17 = (const wchar_t *)v3;
    v18 = wcspbrk((WCHAR *)v3, (WCHAR *)L";");
    LOWORD(v19) = 0;
    if( v18 )
    {
      do
      {
        *v18 = 0;
        RtlInitUnicodeString(DestinationString, v17);
        if( RtlCultureNameToLCID(DestinationString, &Lcid) )
          ++v16;
        v17 = v18 + 1;
        v19 = wcspbrk(v18 + 1, (WCHAR *)L";");
        v18 = v19;
      }
      while( v19 );
      v1 = RegInfo;
    }
    if( *v17 != (_WORD)v19 )
    {
      RtlInitUnicodeString(DestinationString, v17);
      if( RtlCultureNameToLCID(DestinationString, &Lcid) )
        ++v16;
    }
    if( !v16 )
      ExFreeHeapPool(v3);
    v4 = v16 != 0 ? v30 : 0;
    v29 = v4;
    v3 = (VOID *)(v38 & -(__int64)(v16 != 0));
    if( Value )
      ExFreeHeapPool(Value);
    Value = 0i64;
  }
  if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Language-SKU", &Type, &ValueSize, &Value) >= 0 )
  {
    v20 = ValueSize;
    v34 = ValueSize + 4;
    if( (_DWORD)ValueSize == -4 )
    {
      v5 = 0i64;
    }
    else
    {
      v21 = ValueSize + 4;
      v22 = ExAllocatePoolWithTag(1ui64, (unsigned int)(ValueSize + 4), 1920232557i64);
      v5 = v22;
      if( v22 )
        memset(v22, 0i64, v21);
      v20 = ValueSize;
    }
    v38 = (unsigned __int64)v5;
    if( v5 )
    {
      memmove(v5, Value, v20);
      v23 = 0;
      v24 = (const wchar_t *)v5;
      v25 = wcspbrk((WCHAR *)v5, (WCHAR *)L";");
      LOWORD(v26) = 0;
      if( v25 )
      {
        do
        {
          *v25 = 0;
          RtlInitUnicodeString(DestinationString, v24);
          if( RtlCultureNameToLCID(DestinationString, &Lcid) )
            ++v23;
          v24 = v25 + 1;
          v26 = wcspbrk(v25 + 1, (WCHAR *)L";");
          v25 = v26;
        }
        while( v26 );
        v1 = RegInfo;
      }
      if( *v24 != (_WORD)v26 )
      {
        RtlInitUnicodeString(DestinationString, v24);
        if( RtlCultureNameToLCID(DestinationString, &Lcid) )
          ++v23;
      }
      if( !v23 )
        ExFreeHeapPool(v5);
      v33 = v23 != 0 ? v34 : 0;
      v5 = (VOID *)(v38 & -(__int64)(v23 != 0));
      if( Value )
        ExFreeHeapPool(Value);
      v4 = v29;
      Value = 0i64;
      goto LABEL_54;
    }
    v33 = 0;
LABEL_65:
    v27 = -1073741801;
    goto LABEL_55;
  }
LABEL_54:
  v27 = 0;
LABEL_55:
  if( Value )
    ExFreeHeapPool(Value);
  if( v2 && v3 )
  {
    ExFreeHeapPool(v3);
    v3 = 0i64;
    v4 = 0;
  }
LABEL_58:
  *v1 |= 0x800u;
  v1[29] = v35;
  v1[30] = v36;
  v1[37] = v31;
  v1[36] = v33;
  result = v27;
  *((_QWORD *)v1 + 16) = v2;
  *((_QWORD *)v1 + 19) = v3;
  v1[40] = v4;
  *((_QWORD *)v1 + 17) = v5;
  return result;
}

Referenced by:

No references.