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