HalpPutAcpiHacksInRegistry

INT64 __stdcall HalpPutAcpiHacksInRegistry(){
  INT64 result; 
  NTSTATUS v1; 
  UINT64 CreateOptions; 
  UINT64 CreateOptionsa; 
  UINT64 CreateOptionsb; 
  UINT64 CreateOptionsc; 
  UINT64 CreateOptionsd; 
  __int64 v7[2]; 
  __int64 v8[2]; 
  struct _UNICODE_STRING ValueName; 
  UNICODE_STRING v10; 
  UNICODE_STRING v11; 
  UNICODE_STRING v12; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  ULONG Data; 
  UINT64 Disposition; 
  HANDLE Handle; 
  void *KeyHandle; 
  KeyHandle = 0i64;
  LODWORD(Disposition) = 0;
  Handle = 0i64;
  *(&ObjectAttributes.Length + 1) = 0;
  memset(&ObjectAttributes.Attributes + 1, 0, 20);
  ObjectAttributes.RootDirectory = 0i64;
  v7[1] = (__int64)L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET\\Control\\HAL";
  v8[1] = (__int64)L"CStateHacks";
  ValueName.Buffer = L"Piix4";
  v10.Buffer = L"440BX";
  v11.Buffer = L"Piix4Slot";
  v12.Buffer = L"Piix4DevActB";
  ObjectAttributes.ObjectName = (_UNICODE_STRING *)v7;
  v7[0] = 7209068i64;
  v8[0] = 1572886i64;
  *(_QWORD *)&ValueName.Length = 786442i64;
  *(_QWORD *)&v10.Length = 786442i64;
  *(_QWORD *)&v11.Length = 1310738i64;
  *(_QWORD *)&v12.Length = 1703960i64;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 64;
  LODWORD(result) = ZwOpenKey(&KeyHandle, 0x20019u, &ObjectAttributes);
  if( (int)result >= 0 )
  {
    ObjectAttributes.RootDirectory = KeyHandle;
    ObjectAttributes.Length = 48;
    ObjectAttributes.ObjectName = (_UNICODE_STRING *)v8;
    ObjectAttributes.Attributes = 64;
    LODWORD(CreateOptions) = 1;
    *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
    v1 = ZwCreateKey(&Handle, 0x20019ui64, &ObjectAttributes, 0i64, 0i64, CreateOptions, &Disposition);
    LODWORD(result) = ZwClose(KeyHandle);
    if( v1 >= 0 )
    {
      Data = (unsigned __int8)HalpPiix4;
      LODWORD(CreateOptionsa) = 4;
      ZwSetValueKey(Handle, &ValueName, 0i64, 4ui64, &Data, CreateOptionsa);
      Data = (unsigned __int8)HalpBroken440BX;
      LODWORD(CreateOptionsb) = 4;
      ZwSetValueKey(Handle, &v10, 0i64, 4ui64, &Data, CreateOptionsb);
      Data = HalpPiix4SlotNumber | (HalpPiix4BusNumber << 16);
      LODWORD(CreateOptionsc) = 4;
      ZwSetValueKey(Handle, &v11, 0i64, 4ui64, &Data, CreateOptionsc);
      Data = *(_DWORD *)&HalpPiix4DevActB;
      LODWORD(CreateOptionsd) = 4;
      ZwSetValueKey(Handle, &v12, 0i64, 4ui64, &Data, CreateOptionsd);
      LODWORD(result) = ZwClose(Handle);
    }
  }
  return result;
}

Referenced by:

HaliInitPowerManagement