CmpAddAcpiAliasEntry

__int64 __fastcall CmpAddAcpiAliasEntry(
        void *a1,
        unsigned __int16 *a2,
        int a3,
        WCHAR *a4,
        UINT64 a5,
        VOID *KeyHandle,
        int a7,
        int Data){
  unsigned int v10; 
  INT64 v13; 
  NTSTATUS v14; 
  INT64 v15; 
  _UNICODE_STRING *Class; 
  _UNICODE_STRING *Classa; 
  INT64 CreateOptions; 
  UINT64 CreateOptionsa; 
  UINT64 CreateOptionsb; 
  UINT64 CreateOptionsc; 
  UINT64 CreateOptionsd; 
  UINT64 *Disposition; 
  UINT64 *Dispositiona; 
  INT64 v26; 
  INT64 v27; 
  _UNICODE_STRING DestinationString; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  VOID *Handle; 

  *(_QWORD *)&ObjectAttributes.Length = 48i64;
  KeyHandle = 0i64;
  Handle = 0i64;
  Data = 0;
  LODWORD(a5) = 0;
  a7 = 0;
  DestinationString = 0i64;
  v10 = 0;
  *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
  RtlInitUnicodeString(&DestinationString, L"AcpiAlias");
  ObjectAttributes.RootDirectory = a1;
  ObjectAttributes.ObjectName = &DestinationString;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  v14 = ZwOpenKey(&KeyHandle, 0x2001Fui64, &ObjectAttributes, v13, (INT64)Class, CreateOptions, (INT64)Disposition, v26);
  if( v14 == -1073741772 )
  {
    LODWORD(CreateOptionsa) = 0;
    v14 = ZwCreateKey(&KeyHandle, 0x2001Fui64, &ObjectAttributes, 0i64, 0i64, CreateOptionsa, &a5);
  }
  if( v14 >= 0 )
  {
    while( 1 )
    {
      swprintf_s(a4, 0x80ui64, (WCHAR *)L"%04d", ++v10);
      RtlInitUnicodeString(&DestinationString, a4);
      ObjectAttributes.RootDirectory = KeyHandle;
      ObjectAttributes.Length = 48;
      ObjectAttributes.ObjectName = &DestinationString;
      ObjectAttributes.Attributes = 576;
      *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
      v14 = ZwOpenKey(
              &Handle,
              0x2001Fui64,
              &ObjectAttributes,
              v15,
              (INT64)Classa,
              CreateOptionsa,
              (INT64)Dispositiona,
              v27);
      if( v14 < 0 )
        break;
      ZwClose((_HANDLE)Handle);
      Handle = 0i64;
      if( v10 >= 0xC8 )
        goto LABEL_10;
    }
    if( v14 == -1073741772 )
      v14 = 0;
LABEL_10:
    if( v14 < 0
      || (LODWORD(CreateOptionsa) = 0,
          v14 = ZwCreateKey(&Handle, 0x2001Fui64, &ObjectAttributes, 0i64, 0i64, CreateOptionsa, &a5),
          v14 < 0) )
    {
      Handle = 0i64;
    }
    else
    {
      Data = *a2;
      RtlInitUnicodeString(&DestinationString, L"DockingState");
      LODWORD(CreateOptionsb) = 4;
      ZwSetValueKey(Handle, &DestinationString, 0i64, 4ui64, &Data, CreateOptionsb);
      RtlInitUnicodeString(&DestinationString, L"AcpiSerialNumber");
      LODWORD(CreateOptionsc) = a2[1];
      ZwSetValueKey(Handle, &DestinationString, 0i64, 3ui64, a2 + 2, CreateOptionsc);
      Data = a3;
      RtlInitUnicodeString(&DestinationString, L"ProfileNumber");
      LODWORD(CreateOptionsd) = 4;
      v14 = ZwSetValueKey(Handle, &DestinationString, 0i64, 4ui64, &Data, CreateOptionsd);
    }
    if( KeyHandle )
      ZwClose((_HANDLE)KeyHandle);
  }
  else
  {
    KeyHandle = 0i64;
  }
  if( Handle )
    ZwClose((_HANDLE)Handle);
  return(unsigned int)v14;
}

Referenced by:

CmSetAcpiHwProfile