CmpInterlockedFunction
NTSTATUS __stdcall CmpInterlockedFunction(){
INT64 v0;
NTSTATUS result;
INT64 v2;
int v3;
INT64 Length;
INT64 Lengtha;
UINT64 Lengthb;
UINT64 *ResultLength;
UINT64 *ResultLengtha;
UINT64 *ResultLengthb;
UINT64 *ResultLengthc;
INT64 Data;
VOID *Handle;
UINT64 v13;
VOID *KeyHandle;
_UNICODE_STRING DestinationString;
_OBJECT_ATTRIBUTES ObjectAttributes;
char KeyValueInformation[12];
unsigned __int8 v18;
*(&ObjectAttributes.Length + 1) = 0;
memset(&ObjectAttributes.Attributes + 1, 0, 20);
KeyHandle = 0i64;
LODWORD(v13) = 0;
ObjectAttributes.RootDirectory = 0i64;
DestinationString = 0i64;
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = &CmRegistryMachineSystemCurrentControlSet;
ObjectAttributes.Attributes = 576;
result = ZwOpenKey(&KeyHandle, 0x2001Fui64, &ObjectAttributes, v0, Length, (INT64)ResultLength, Data, 0i64);
if( result >= 0 )
{
ObjectAttributes.RootDirectory = KeyHandle;
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)L".0";
ObjectAttributes.Attributes = 576;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
v3 = ZwOpenKey(&Handle, 0x2001Fui64, &ObjectAttributes, v2, Lengtha, (INT64)ResultLengtha, Data, (INT64)Handle);
ZwClose((_HANDLE)KeyHandle);
if( v3 < 0 )
return v3;
RtlInitUnicodeString(&DestinationString, L"ProcessorControl");
LODWORD(Lengthb) = 20;
v3 = ZwQueryValueKey(Handle, &DestinationString, KeyValuePartialInformation, KeyValueInformation, Lengthb, &v13);
if( v3 >= 0 )
{
LODWORD(Data) = v18;
if( v18 == 2 )
{
LABEL_5:
ZwClose((_HANDLE)Handle);
return v3;
}
if( v18 == 1 )
{
v3 = -1073741823;
goto LABEL_5;
}
}
LODWORD(ResultLengthb) = 4;
LODWORD(Data) = 1;
ZwSetValueKey(Handle, &DestinationString, 0i64, 4ui64, &Data, (UINT64)ResultLengthb);
ZwFlushKey(Handle);
if( (_DWORD)Data != 2 )
{
LODWORD(ResultLengthc) = 4;
LODWORD(Data) = 2;
ZwSetValueKey(Handle, &DestinationString, 0i64, 4ui64, &Data, (UINT64)ResultLengthc);
}
goto LABEL_5;
}
return result;
}Referenced by:
CmpFinishSystemHivesLoad