CmpOpenSystemDriverHiveContext
NTSTATUS __stdcall CmpOpenSystemDriverHiveContext(PCUNICODE_STRING Source){
__int64 v1;
unsigned __int16 Length;
__int64 v3;
VOID *v5;
int appended;
INT64 v7;
INT8 v8;
OBJECT_HANDLE_INFORMATION *HandleInformation;
INT64 v11;
_UNICODE_STRING Destination;
_OBJECT_ATTRIBUTES ObjectAttributes;
VOID *KeyHandle;
OBJECT_HANDLE_INFORMATION v15;
Length = Source->Length;
*(&Destination.MaximumLength + 2) = 0;
v15 = 0i64;
v3 = v1;
*(_DWORD *)&Destination.MaximumLength = (unsigned __int16)(CmRegistryMachineName.Length + Length + 4);
KeyHandle = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
v5 = 0i64;
Destination.Length = 0;
Destination.Buffer = (wchar_t *)ExAllocatePoolWithTag(1ui64, Destination.MaximumLength, 538987843i64);
if( Destination.Buffer )
{
appended = RtlAppendUnicodeStringToString(&Destination, &CmRegistryMachineName);
if( appended >= 0 )
{
appended = RtlAppendUnicodeToString(&Destination, (WCHAR *)L"\\");
if( appended >= 0 )
{
appended = RtlAppendUnicodeStringToString(&Destination, (_UNICODE_STRING *)Source);
if( appended >= 0 )
{
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = &Destination;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.Attributes = 576;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
appended = ZwOpenKey(
&KeyHandle,
0x20019ui64,
&ObjectAttributes,
v7,
(INT64)HandleInformation,
v11,
*(INT64 *)&Destination.Length,
(INT64)Destination.Buffer);
if( appended >= 0 )
{
appended = CmObReferenceObjectByHandle(KeyHandle, 1ui64, v8, 0i64, &v15);
if( appended >= 0 )
{
if( RtlCreateUnicodeString(v3 + 16, (INT8 *)Source->Buffer) )
{
*(_QWORD *)(v3 + 32) = KeyHandle;
*(OBJECT_HANDLE_INFORMATION *)(v3 + 40) = v15;
KeyHandle = 0i64;
goto LABEL_9;
}
appended = -1073741801;
}
v5 = (VOID *)v15;
}
}
}
}
}
else
{
appended = -1073741801;
}
LABEL_9:
if( Destination.Buffer )
ExFreePoolWithTag(Destination.Buffer, 0);
if( v5 )
ObfDereferenceObjectWithTag(v5, 0x746C6644ui64);
if( KeyHandle )
ZwClose((_HANDLE)KeyHandle);
return appended;
}Referenced by:
CmGetSystemDriverList