CmpUpdateReorganizeRegistryValues
VOID __stdcall CmpUpdateReorganizeRegistryValues(){
INT64 v0;
__int64 v1;
_UNICODE_STRING *Class;
UINT64 CreateOptions;
UINT64 CreateOptionsa;
UINT64 CreateOptionsb;
UINT64 CreateOptionsc;
VOID *KeyHandle;
_UNICODE_STRING DestinationString;
_LARGE_INTEGER LocalTime;
_TIME_FIELDS TimeFields;
_OBJECT_ATTRIBUTES ObjectAttributes;
__int16 Dst[16];
*(&ObjectAttributes.Length + 1) = 0;
*(&ObjectAttributes.Attributes + 1) = 0;
DestinationString = 0i64;
KeyHandle = 0i64;
TimeFields = 0i64;
LocalTime.QuadPart = 0i64;
if( *(&stru_140CF2E80 + 935) )
{
if( CmpAccessBitForPhase == 2 )
{
RtlInitUnicodeString(
&DestinationString,
L"\\registry\\machine\\system\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager\\Defrag");
LODWORD(CreateOptions) = 0;
ObjectAttributes.Length = 48;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.Attributes = 704;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( ZwCreateKey(&KeyHandle, 2ui64, &ObjectAttributes, 0i64, 0i64, CreateOptions, 0i64) >= 0 )
{
ExSystemTimeToLocalTime(&CmpReorganizeLastRun, &LocalTime);
RtlTimeToTimeFields((INT64 *)&LocalTime, (WORD *)&TimeFields, v0);
LODWORD(CreateOptionsa) = TimeFields.Year % 10000;
LODWORD(Class) = TimeFields.Day;
v1 = -1i64;
if( (unsigned int)swprintf_s(
(WCHAR *)Dst,
0x10ui64,
(WCHAR *)L"%02d:%02d:%04d",
(unsigned int)TimeFields.Month,
Class,
CreateOptionsa) != -1 )
{
RtlInitUnicodeString(&DestinationString, L"LastRun");
do
++v1;
while( Dst[v1] );
LODWORD(CreateOptionsb) = 2 * v1;
if( ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 1ui64, Dst, CreateOptionsb) >= 0 )
{
RtlInitUnicodeString(&DestinationString, L"TotalBytesSaved");
LODWORD(CreateOptionsc) = 8;
ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 0xBui64, (char *)&stru_140CF2E80 + 7480, CreateOptionsc);
}
}
ZwClose((_HANDLE)KeyHandle);
}
}
}
}Referenced by:
CmpReorganizeHive
CmpUpdatePhaseAccessBit