CmLogMcUpdateStatus
__int64 __fastcall CmLogMcUpdateStatus(UINT64 Value, __int64 a2){
unsigned int v3;
INT64 v4;
int v5;
INT64 v6;
INT64 v7;
VOID *Data;
VOID *Dataa;
VOID *Datab;
VOID *Datac;
INT64 DataSize;
INT64 DataSizea;
INT64 DataSizeb;
UINT64 DataSizec;
UINT64 DataSized;
UINT64 DataSizee;
UINT64 DataSizef;
UINT64 DataSizeg;
INT64 v21;
INT64 v22;
INT64 v23;
INT64 v24;
INT64 v25;
INT64 v26;
VOID *Handle;
_UNICODE_STRING ValueName;
VOID *KeyHandle;
UINT64 v30;
_OBJECT_ATTRIBUTES ObjectAttributes;
_UNICODE_STRING v32;
_STRING DestinationString;
_CONFIGURATION_COMPONENT_DATA a1;
CHAR String[16];
char v36;
v3 = Value;
DestinationString = 0i64;
memset(&a1, 0i64, sizeof(a1));
*(_QWORD *)&ObjectAttributes.Length = 48i64;
*(_QWORD *)&ObjectAttributes.Attributes = 576i64;
Handle = (VOID *)-1i64;
ObjectAttributes.ObjectName = &CmRegistryMachineHardwareDescriptionSystemName;
v30 = -1i64;
KeyHandle = (VOID *)-1i64;
ObjectAttributes.RootDirectory = 0i64;
v32 = 0i64;
ValueName = 0i64;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
v5 = ZwOpenKey(&KeyHandle, 0x20019ui64, &ObjectAttributes, v4, (INT64)Data, DataSize, v21, v24);
if( v5 >= 0 )
{
ObjectAttributes.RootDirectory = KeyHandle;
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = &CmTypeName + 1;
ObjectAttributes.Attributes = 576;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
v5 = ZwOpenKey((VOID **)&v30, 0x20019ui64, &ObjectAttributes, v6, (INT64)Dataa, DataSizea, v22, v25);
if( v5 >= 0 )
{
RtlIntegerToChar(v3, 0xAui64, 0xCu, String);
RtlInitAnsiString(&DestinationString, String);
*(_DWORD *)&v32.Length = 1572864;
v32.Buffer = (wchar_t *)&v36;
RtlAnsiStringToUnicodeString(&v32, &DestinationString, 0);
ObjectAttributes.RootDirectory = (void *)v30;
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = &v32;
ObjectAttributes.Attributes = 576;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( ZwOpenKey(&Handle, 0x2001Fui64, &ObjectAttributes, v7, (INT64)Datab, DataSizeb, v23, v26) >= 0 )
goto LABEL_7;
CmpConfigurationData = ExAllocatePoolWithTag(1ui64, (unsigned int)CmpConfigurationAreaSize, 538987843i64);
if( !CmpConfigurationData )
{
v5 = -1073741670;
goto LABEL_12;
}
LODWORD(Datac) = -1;
a1.ComponentEntry.Class = ProcessorClass;
a1.ComponentEntry.Type = CentralProcessor;
a1.ComponentEntry.Key = v3;
v5 = CmpInitializeRegistryNode(
&a1,
KeyHandle,
&Handle,
InterfaceTypeUndefined,
(UINT64)Datac,
(UINT16 *)CmpDeviceIndexTable);
ExFreePoolWithTag(CmpConfigurationData, 0);
CmpConfigurationData = 0i64;
if( v5 >= 0 )
{
LABEL_7:
RtlInitUnicodeString(&ValueName, L"Update Revision");
LODWORD(DataSizec) = 8;
v5 = ZwSetValueKey(Handle, &ValueName, 0i64, 3ui64, (VOID *)(a2 + 8), DataSizec);
if( v5 >= 0 )
{
RtlInitUnicodeString(&ValueName, L"Previous Update Revision");
LODWORD(DataSized) = 8;
v5 = ZwSetValueKey(Handle, &ValueName, 0i64, 3ui64, (VOID *)(a2 + 16), DataSized);
if( v5 >= 0 )
{
RtlInitUnicodeString(&ValueName, L"Update Status");
LODWORD(DataSizee) = 4;
v5 = ZwSetValueKey(Handle, &ValueName, 0i64, 4ui64, (VOID *)(a2 + 4), DataSizee);
if( v5 >= 0 )
{
RtlInitUnicodeString(&ValueName, L"Platform Specific Field 1");
LODWORD(DataSizef) = 4;
v5 = ZwSetValueKey(Handle, &ValueName, 0i64, 4ui64, (VOID *)(a2 + 24), DataSizef);
if( v5 >= 0 )
{
RtlInitUnicodeString(&ValueName, L"Platform Specific Field 2");
LODWORD(DataSizeg) = 4;
v5 = ZwSetValueKey(Handle, &ValueName, 0i64, 3ui64, (VOID *)(a2 + 28), DataSizeg);
}
}
}
}
}
}
}
LABEL_12:
if( Handle != (VOID *)-1i64 )
ZwClose((_HANDLE)Handle);
if( v30 != -1i64 )
ZwClose(v30);
if( KeyHandle != (VOID *)-1i64 )
ZwClose((_HANDLE)KeyHandle);
return(unsigned int)v5;
}Referenced by:
HvlpLogMicrocodeUpdateStatus