CmpInterlockedFunction

NTSTATUS __stdcall CmpInterlockedFunction(){
  INT64 v0; 
  NTSTATUS result; 
  INT64 v2; 
  int v3; 
  INT64 Length; 
  INT64 Lengtha; 
  UINT64 Lengthb; 
  UINT64 *ResultLength; 
  UINT64 *ResultLengtha; 
  UINT64 *ResultLengthb; 
  UINT64 *ResultLengthc; 
  INT64 Data; 
  VOID *Handle; 
  UINT64 v13; 
  VOID *KeyHandle; 
  _UNICODE_STRING DestinationString; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  char KeyValueInformation[12]; 
  unsigned __int8 v18; 

  *(&ObjectAttributes.Length + 1) = 0;
  memset(&ObjectAttributes.Attributes + 1, 0, 20);
  KeyHandle = 0i64;
  LODWORD(v13) = 0;
  ObjectAttributes.RootDirectory = 0i64;
  DestinationString = 0i64;
  ObjectAttributes.Length = 48;
  ObjectAttributes.ObjectName = &CmRegistryMachineSystemCurrentControlSet;
  ObjectAttributes.Attributes = 576;
  result = ZwOpenKey(&KeyHandle, 0x2001Fui64, &ObjectAttributes, v0, Length, (INT64)ResultLength, Data, 0i64);
  if( result >= 0 )
  {
    ObjectAttributes.RootDirectory = KeyHandle;
    ObjectAttributes.Length = 48;
    ObjectAttributes.ObjectName = (_UNICODE_STRING *)L".0";
    ObjectAttributes.Attributes = 576;
    *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
    v3 = ZwOpenKey(&Handle, 0x2001Fui64, &ObjectAttributes, v2, Lengtha, (INT64)ResultLengtha, Data, (INT64)Handle);
    ZwClose((_HANDLE)KeyHandle);
    if( v3 < 0 )
      return v3;
    RtlInitUnicodeString(&DestinationString, L"ProcessorControl");
    LODWORD(Lengthb) = 20;
    v3 = ZwQueryValueKey(Handle, &DestinationString, KeyValuePartialInformation, KeyValueInformation, Lengthb, &v13);
    if( v3 >= 0 )
    {
      LODWORD(Data) = v18;
      if( v18 == 2 )
      {
LABEL_5:
        ZwClose((_HANDLE)Handle);
        return v3;
      }
      if( v18 == 1 )
      {
        v3 = -1073741823;
        goto LABEL_5;
      }
    }
    LODWORD(ResultLengthb) = 4;
    LODWORD(Data) = 1;
    ZwSetValueKey(Handle, &DestinationString, 0i64, 4ui64, &Data, (UINT64)ResultLengthb);
    ZwFlushKey(Handle);
    if( (_DWORD)Data != 2 )
    {
      LODWORD(ResultLengthc) = 4;
      LODWORD(Data) = 2;
      ZwSetValueKey(Handle, &DestinationString, 0i64, 4ui64, &Data, (UINT64)ResultLengthc);
    }
    goto LABEL_5;
  }
  return result;
}

Referenced by:

CmpFinishSystemHivesLoad