CmpSetSystemValues
__int64 __fastcall CmpSetSystemValues(__int64 a1, __int64 a2, __int64 a3, INT64 a4){
int v5;
int v7;
VOID *Data;
VOID *Dataa;
INT64 DataSize;
UINT64 DataSizea;
UINT64 DataSizeb;
UINT64 DataSizec;
UINT64 DataSized;
INT64 v15;
int v16;
int v17;
UINT64 ResultLength;
_OBJECT_ATTRIBUTES ObjectAttributes;
int KeyValueInformation[64];
*(_QWORD *)&ObjectAttributes.Length = 48i64;
LODWORD(ResultLength) = 0;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)L"df";
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
*(_QWORD *)&ObjectAttributes.Attributes = 576i64;
v5 = ZwOpenKey((VOID **)&v15, 0xF003Fui64, &ObjectAttributes, a4, (INT64)Data, DataSize, 0i64, 0i64);
if( v5 >= 0 )
{
LODWORD(DataSizea) = CmpLoadOptions.Length;
v5 = ZwSetValueKey(
(VOID *)v15,
(_UNICODE_STRING *)&CmpSystemStartOptionsString,
0i64,
1ui64,
CmpLoadOptions.Buffer,
DataSizea);
if( v5 >= 0 )
{
v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpSystemBootDeviceString);
if( v5 >= 0 )
{
v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpFirmwareBootDeviceString);
if( v5 >= 0 )
{
v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpWindowsSysPartString);
if( v5 >= 0 )
{
v5 = CmpSetSystemRegistryString((HANDLE)v15, (PUNICODE_STRING)&CmpOsBootstatPathString);
if( v5 >= 0 )
{
LODWORD(DataSizeb) = 4;
v16 = *(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 1;
v5 = ZwSetValueKey(
(VOID *)v15,
(_UNICODE_STRING *)&CmpLastBootSucceededString,
0i64,
4ui64,
&v16,
DataSizeb);
if( v5 >= 0 )
{
LODWORD(DataSizec) = 4;
v16 = (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) >> 1) & 1;
v5 = ZwSetValueKey(
(VOID *)v15,
(_UNICODE_STRING *)&CmpLastBootShutdownString,
0i64,
4ui64,
&v16,
DataSizec);
if( v5 >= 0 )
{
if( (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 2) == 0 )
{
LODWORD(Dataa) = 256;
if( ZwQueryValueKey(
(VOID *)v15,
(_UNICODE_STRING *)&CmpDirtyShutdownCountString,
KeyValueFullInformation,
KeyValueInformation,
(UINT64)Dataa,
&ResultLength) >= 0
&& KeyValueInformation[1] == 4 )
{
v7 = *(int *)((char *)KeyValueInformation + (unsigned int)KeyValueInformation[2]) + 1;
}
else
{
v7 = 1;
}
v17 = v7;
LODWORD(DataSized) = 4;
v5 = ZwSetValueKey(
(VOID *)v15,
(_UNICODE_STRING *)&CmpDirtyShutdownCountString,
0i64,
4ui64,
&v17,
DataSized);
}
if( v5 >= 0 )
v5 = 0;
}
}
}
}
}
}
}
}
if( v15 )
ZwClose(v15);
return(unsigned int)v5;
}Referenced by:
CmInitSystem1