RegistryOverwriteCentralProcessor

INT64 __fastcall RegistryOverwriteCentralProcessor(){
  WCHAR v0; 
  NTSTATUS v1; 
  unsigned int v2; 
  UINT64 i; 
  WCHAR v4; 
  WCHAR v5; 
  wchar_t *Buffer; 
  int v7; 
  WCHAR v8; 
  WCHAR v9; 
  WCHAR v10; 
  PVOID Data; 
  UINT64 DataSizea; 
  UINT64 DataSizeb; 
  UINT64 DataSize; 
  UINT64 ResultLength; 
  HANDLE Handle; 
  void *KeyHandle; 
  struct _UNICODE_STRING ValueName; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  struct _UNICODE_STRING v21; 
  struct _UNICODE_STRING DestinationString; 
  struct _UNICODE_STRING v23; 
  __int128 KeyInformation; 
  WCHAR SourceString[8]; 
  __int64 v26; 
  *(_QWORD *)&ObjectAttributes.Length = 48i64;
  *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
  KeyHandle = 0i64;
  LODWORD(ResultLength) = 0;
  v26 = 0i64;
  Handle = 0i64;
  DestinationString = 0i64;
  v23 = 0i64;
  ValueName = 0i64;
  KeyInformation = 0i64;
  *(_OWORD *)SourceString = 0i64;
  v21 = 0i64;
  RtlInitUnicodeString(&DestinationString, L"\\Registry\\Machine\\Hardware\\Description\\System\\CentralProcessor", v0);
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.ObjectName = &DestinationString;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  v1 = ZwOpenKey(&KeyHandle, 8u, &ObjectAttributes);
  if( v1 >= 0 )
  {
    v2 = 0;
    for( i = 0i64; ; i = v2 )
    {
      LODWORD(Data) = 38;
      v1 = ZwEnumerateKey(KeyHandle, i, KeyBasicInformation, &KeyInformation, (UINT64)Data, &ResultLength);
      if( v1 == -2147483622 )
        break;
      ++v2;
      if( v1 >= 0 )
      {
        SourceString[(unsigned __int64)HIDWORD(KeyInformation) >> 1] = 0;
        RtlInitUnicodeString(&v23, SourceString, v10);
        ObjectAttributes.RootDirectory = KeyHandle;
        ObjectAttributes.Length = 48;
        ObjectAttributes.ObjectName = &v23;
        ObjectAttributes.Attributes = 576;
        *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
        if( ZwOpenKey(&Handle, 0xF003Fu, &ObjectAttributes) >= 0 )
        {
          RtlInitUnicodeString(&v21, L"Not Available", v4);
          RtlInitUnicodeString(&ValueName, L"VendorIdentifier", v5);
          Buffer = v21.Buffer;
          v7 = v21.Length + 2;
          LODWORD(DataSize) = v7;
          ZwSetValueKey(Handle, &ValueName, 0i64, 1ui64, v21.Buffer, DataSize);
          RtlInitUnicodeString(&ValueName, L"ProcessorNameString", v8);
          LODWORD(DataSizea) = v7;
          ZwSetValueKey(Handle, &ValueName, 0i64, 1ui64, Buffer, DataSizea);
          RtlInitUnicodeString(&ValueName, L"Identifier", v9);
          LODWORD(DataSizeb) = v7;
          ZwSetValueKey(Handle, &ValueName, 0i64, 1ui64, Buffer, DataSizeb);
          ZwClose(Handle);
        }
      }
    }
  }
  if( KeyHandle )
    ZwClose(KeyHandle);
  return(unsigned int)v1;
}

Referenced by:

StartFirstUserProcess