CmpMigrateOOBELanguageToInstallationLanguage

__int64 __fastcall CmpMigrateOOBELanguageToInstallationLanguage(__int64 a1, __int64 a2, __int64 a3, INT64 a4){
  NTSTATUS v5; 
  unsigned __int16 v6; 
  __int64 i; 
  __int16 v8; 
  unsigned __int16 v9; 
  VOID *Data; 
  INT64 DataSize; 
  UINT64 DataSizea; 
  VOID *KeyHandle; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  __int64 v15; 

  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  KeyHandle = 0i64;
  v15 = 0i64;
  if( !CmInstallUILanguageFallbackToOOBm )
    return 0i64;
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.ObjectName = (_UNICODE_STRING *)&CmpCurrentControlSetControlNlsLanguagePathString;
  ObjectAttributes.Attributes = 576;
  ObjectAttributes.Length = 48;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  v5 = ZwOpenKey(
         &KeyHandle,
         0xF003Fui64,
         &ObjectAttributes,
         a4,
         (INT64)Data,
         DataSize,
         (INT64)KeyHandle,
         *(INT64 *)&ObjectAttributes.Length);
  if( v5 >= 0 )
  {
    v6 = PsInstallUILanguageId;
    for( i = 3i64; i >= 0; --i )
    {
      v8 = 55;
      v9 = v6 & 0xF;
      if( v9 <= 9u )
        v8 = 48;
      v6 >>= 4;
      *((_WORD *)&v15 + i) = v9 + v8;
    }
    LODWORD(DataSizea) = 8;
    v5 = ZwSetValueKey(KeyHandle, (_UNICODE_STRING *)&CmpInstallLanguageString, 0i64, 1ui64, &v15, DataSizea);
    if( v5 >= 0 )
      v5 = 0;
  }
  if( KeyHandle )
    ZwClose((_HANDLE)KeyHandle);
  return(unsigned int)v5;
}

Referenced by:

CmInitSystem1