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