CmpSetSystemValues

__int64 __fastcall CmpSetSystemValues(__int64 a1, __int64 a2, __int64 a3, INT64 a4){
  int v5; 
  int v7; 
  VOID *Data; 
  VOID *Dataa; 
  INT64 DataSize; 
  UINT64 DataSizea; 
  UINT64 DataSizeb; 
  UINT64 DataSizec; 
  UINT64 DataSized; 
  INT64 v15; 
  int v16; 
  int v17; 
  UINT64 ResultLength; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  int KeyValueInformation[64]; 

  *(_QWORD *)&ObjectAttributes.Length = 48i64;
  LODWORD(ResultLength) = 0;
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.ObjectName = (_UNICODE_STRING *)L"df";
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
  v5 = ZwOpenKey((VOID **)&v15, 0xF003Fui64, &ObjectAttributes, a4, (INT64)Data, DataSize, 0i64, 0i64);
  if( v5 >= 0 )
  {
    LODWORD(DataSizea) = CmpLoadOptions.Length;
    v5 = ZwSetValueKey(
           (VOID *)v15,
           (_UNICODE_STRING *)&CmpSystemStartOptionsString,
           0i64,
           1ui64,
           CmpLoadOptions.Buffer,
           DataSizea);
    if( v5 >= 0 )
    {
      v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpSystemBootDeviceString);
      if( v5 >= 0 )
      {
        v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpFirmwareBootDeviceString);
        if( v5 >= 0 )
        {
          v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpWindowsSysPartString);
          if( v5 >= 0 )
          {
            v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpOsBootstatPathString);
            if( v5 >= 0 )
            {
              LODWORD(DataSizeb) = 4;
              v16 = *(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 1;
              v5 = ZwSetValueKey(
                     (VOID *)v15,
                     (_UNICODE_STRING *)&CmpLastBootSucceededString,
                     0i64,
                     4ui64,
                     &v16,
                     DataSizeb);
              if( v5 >= 0 )
              {
                LODWORD(DataSizec) = 4;
                v16 = (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) >> 1) & 1;
                v5 = ZwSetValueKey(
                       (VOID *)v15,
                       (_UNICODE_STRING *)&CmpLastBootShutdownString,
                       0i64,
                       4ui64,
                       &v16,
                       DataSizec);
                if( v5 >= 0 )
                {
                  if( (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 2) == 0 )
                  {
                    LODWORD(Dataa) = 256;
                    if( ZwQueryValueKey(
                           (VOID *)v15,
                           (_UNICODE_STRING *)&CmpDirtyShutdownCountString,
                           KeyValueFullInformation,
                           KeyValueInformation,
                           (UINT64)Dataa,
                           &ResultLength) >= 0
                      && KeyValueInformation[1] == 4 )
                    {
                      v7 = *(int *)((char *)KeyValueInformation + (unsigned int)KeyValueInformation[2]) + 1;
                    }
                    else
                    {
                      v7 = 1;
                    }
                    v17 = v7;
                    LODWORD(DataSized) = 4;
                    v5 = ZwSetValueKey(
                           (VOID *)v15,
                           (_UNICODE_STRING *)&CmpDirtyShutdownCountString,
                           0i64,
                           4ui64,
                           &v17,
                           DataSized);
                  }
                  if( v5 >= 0 )
                    v5 = 0;
                }
              }
            }
          }
        }
      }
    }
  }
  if( v15 )
    ZwClose(v15);
  return(unsigned int)v5;
}

Referenced by:

CmInitSystem1