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