Function at 0x20ac8
Capabilities:
Query or enumerate registry value
Set registry value

Disassembly:
mov qword [rsp + 0x18], rbx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0xab0
mov rax, qword [0x00028100]
xor rax, rsp
mov qword [rsp + 0xaa0], rax
mov rbx, rcx
mov r14, rdx
mov r12d, 0x200
lea rcx, [rsp + 0x6a0]
xor esi, esi
xor edx, edx
mov r8, r12
mov r15d, r9d
mov qword [rsp + 0x50], rsi
call fcn.00021f50
lea rcx, [rsp + 0x8a0]
mov r8, r12
xor edx, edx
call fcn.00021f50
lea rcx, [rsp + 0x4a0]
mov r8, r12
xor edx, edx
call fcn.00021f50
and qword [rsp + 0x60], rsi
and qword [rsp + 0x48], rsi
and qword [rsp + 0x98], rsi
and qword [rsp + 0x88], rsi
and qword [rsp + 0x38], rsi
lea rcx, [rsp + 0x58]
movzx edx, r12w
call fcn.0002114c
test eax, eax
mov edi, eax
js 0x210b3
lea rcx, [rsp + 0x40]
movzx edx, r12w
call fcn.0002114c
test eax, eax
mov edi, eax
js 0x210b3
lea rcx, [rsp + 0x90]
mov dx, 0x80
call fcn.0002114c
test eax, eax
mov edi, eax
js 0x210b3
lea rcx, [rsp + 0x80]
mov dx, 0x20
call fcn.0002114c
test eax, eax
mov edi, eax
js 0x210b3
lea rcx, [rsp + 0x30]
movzx edx, r12w
call fcn.0002114c
test eax, eax
mov edi, eax
js 0x210b3
call fcn.00021a50
lea ebp, [rsi + 1]
lea rcx, [rsp + 0x58]
cmp eax, ebp
lea rdx, str.RegistryMachineSystemCurrentControlSetEnum_
je 0x20bf9
lea rdx, str.RegistryMachineEnum_
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rax, [rsp + 0x68]
lea r9, [rsp + 0x4a0]
mov r8d, r12d
mov edx, ebp
mov rcx, rbx
mov qword [rsp + 0x20], rax
call qword [sym.imp.ntoskrnl.exe_IoGetDeviceProperty]
test eax, eax
mov edi, eax
js 0x210b3
lea rax, [rsp + 0x68]
lea r9, [rsp + 0x6a0]
mov r8d, r12d
mov edx, 7
mov rcx, rbx
mov qword [rsp + 0x20], rax
call qword [sym.imp.ntoskrnl.exe_IoGetDeviceProperty]
test eax, eax
mov edi, eax
js 0x210b3
lea rdx, str.PCI_
lea rcx, [rsp + 0x4a0]
mov r8d, 8
call qword [sym.imp.ntoskrnl.exe_RtlCompareMemory]
lea rcx, [rsp + 0x58]
cmp rax, 8
jne 0x20caa
lea rdx, [rsp + 0x4a0]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea r9, [rsp + 0x6a0]
lea r8, str.Driver
lea rdx, [rsp + 0x58]
lea rcx, [rsp + 0x50]
call fcn.000211b0
jmp 0x20cd5
lea rdx, [0x00027318]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea r9, [rsp + 0x6a0]
lea r8, str.Driver
lea rdx, [rsp + 0x58]
lea rcx, [rsp + 0x50]
call fcn.000214d8
test eax, eax
mov rsi, qword [rsp + 0x50]
mov edi, eax
js 0x210b3
test eax, eax
js 0x210ae
test rsi, rsi
je 0x210ae
mov ebx, 0x400
lea rcx, [rsp + 0xa0]
xor edx, edx
mov r8, rbx
call fcn.00021f50
lea rdx, str.DeviceDesc
lea rcx, [rsp + 0x70]
call qword [sym.imp.ntoskrnl.exe_RtlInitUnicodeString]
lea r11, [rsp + 0x6c]
lea r9, [rsp + 0xa0]
mov qword [rsp + 0x28], r11
lea rdx, [rsp + 0x70]
mov r8d, ebp
mov rcx, rsi
mov dword [rsp + 0x20], ebx
call qword [sym.imp.ntoskrnl.exe_ZwQueryValueKey]
test eax, eax
mov edi, eax
js 0x210b3
mov eax, dword [rsp + 0xa8]
mov ebx, dword [rsp + 0xac]
lea rcx, [rsp + 0x8a0]
lea rbp, [rsp + rax + 0xa0]
mov r8, rbx
mov rdx, rbp
call fcn.00022060
xor r12d, r12d
test ebx, 0xfffffffe
lea r13d, [rbx - 2]
jbe 0x20dc0
lea rdx, str.__RSW
mov r8d, 8
mov rcx, rbp
call qword [sym.imp.ntoskrnl.exe_RtlCompareMemory]
cmp rax, 8
je 0x20dbb
mov eax, dword [rsp + 0xac]
add r12d, 1
add rbp, 2
shr eax, 1
cmp r12d, eax
jb 0x20d87
jmp 0x20dc0
and word [rbp], 0
mov eax, dword [rsp + 0xa8]
lea rcx, [rsp + 0x40]
lea rdx, [rsp + rax + 0xa0]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rdx, str.__RSW
lea rcx, [rsp + 0x40]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
mov edx, 0xa
lea r8, [rsp + 0x90]
lea r12d, [rdx - 9]
mov ecx, r12d
call qword [sym.imp.ntoskrnl.exe_RtlIntegerToUnicodeString]
test eax, eax
js 0x210b3
lea rdx, [rsp + 0x90]
lea rcx, [rsp + 0x40]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeStringToString]
lea rdx, [0x00027344]
lea rcx, [rsp + 0x40]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea r8, [rsp + 0x80]
lea edx, [r12 + 0xf]
mov ecx, r15d
call qword [sym.imp.ntoskrnl.exe_RtlIntegerToUnicodeString]
test eax, eax
js 0x210b3
lea rdx, [rsp + 0x80]
lea rcx, [rsp + 0x40]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeStringToString]
lea rdx, [0x00027348]
lea rcx, [rsp + 0x40]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
test r14, r14
je 0x20ead
lea rdx, [0x0002734c]
lea rcx, [rsp + 0x40]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rcx, [rsp + 0x40]
mov rdx, r14
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeStringToString]
lea rdx, [0x00027354]
lea rcx, [rsp + 0x40]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
movzx eax, word [rsp + 0x40]
lea rdx, [rsp + 0x70]
mov r9d, r12d
add eax, 2
xor r8d, r8d
mov rcx, rsi
mov dword [rsp + 0x28], eax
mov rax, qword [rsp + 0x48]
mov qword [rsp + 0x20], rax
call qword [sym.imp.ntoskrnl.exe_ZwSetValueKey]
test eax, eax
mov edi, eax
js 0x210b3
mov ebx, 0x400
lea rcx, [rsp + 0xa0]
xor edx, edx
mov r8, rbx
call fcn.00021f50
lea rdx, [0x00027358]
lea rcx, [rsp + 0x70]
call qword [sym.imp.ntoskrnl.exe_RtlInitUnicodeString]
lea r11, [rsp + 0x6c]
lea r9, [rsp + 0xa0]
mov qword [rsp + 0x28], r11
lea rdx, [rsp + 0x70]
mov r8d, r12d
mov rcx, rsi
mov dword [rsp + 0x20], ebx
call qword [sym.imp.ntoskrnl.exe_ZwQueryValueKey]
xor edi, edi
test eax, eax
js 0x210b3
test dword [rsp + 0xac], 0xfffffffe
mov eax, dword [rsp + 0xa8]
lea rbx, [rsp + rax + 0xa0]
jbe 0x20f91
mov ebp, r13d
lea rdx, [rsp + 0x8a0]
mov r8, rbp
mov rcx, rbx
call qword [sym.imp.ntoskrnl.exe_RtlCompareMemory]
cmp rax, rbp
je 0x20f89
mov eax, dword [rsp + 0xac]
add edi, r12d
add rbx, 2
shr eax, 1
cmp edi, eax
jb 0x20f5a
jmp 0x20f91
test edi, edi
je 0x20f91
and word [rbx], 0
mov eax, dword [rsp + 0xac]
shr eax, 1
cmp edi, eax
mov eax, dword [rsp + 0xa8]
lea rdx, [rsp + rax + 0xa0]
jb 0x21046
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rdx, str._RSW
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rdx, [rsp + 0x90]
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeStringToString]
lea rdx, [0x00027344]
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rdx, [rsp + 0x80]
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeStringToString]
lea rdx, [0x00027348]
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
test r14, r14
je 0x21080
lea rdx, [0x0002734c]
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rcx, [rsp + 0x30]
mov rdx, r14
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeStringToString]
lea rdx, [0x00027354]
jmp 0x21075
cmp rbx, rdx
je 0x21056
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
lea rdx, [rsp + 0x40]
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeStringToString]
mov r11d, r13d
add rbx, r11
cmp word [rbx], 0
je 0x21080
mov rdx, rbx
lea rcx, [rsp + 0x30]
call qword [sym.imp.ntoskrnl.exe_RtlAppendUnicodeToString]
movzx eax, word [rsp + 0x30]
lea rdx, [rsp + 0x70]
mov r9d, r12d
add eax, 2
xor r8d, r8d
mov rcx, rsi
mov dword [rsp + 0x28], eax
mov rax, qword [rsp + 0x38]
mov qword [rsp + 0x20], rax
call qword [sym.imp.ntoskrnl.exe_ZwSetValueKey]
mov edi, eax
jmp 0x210b3
mov edi, 0xc000000e
mov rcx, qword [rsp + 0x60]
test rcx, rcx
je 0x210c3
call qword [sym.imp.ntoskrnl.exe_ExFreePool]
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x210d3
call qword [sym.imp.ntoskrnl.exe_ExFreePool]
mov rcx, qword [rsp + 0x98]
test rcx, rcx
je 0x210e6
call qword [sym.imp.ntoskrnl.exe_ExFreePool]
mov rcx, qword [rsp + 0x88]
test rcx, rcx
je 0x210f9
call qword [sym.imp.ntoskrnl.exe_ExFreePool]
mov rcx, qword [rsp + 0x38]
test rcx, rcx
je 0x21109
call qword [sym.imp.ntoskrnl.exe_ExFreePool]
test rsi, rsi
je 0x21117
mov rcx, rsi
call qword [sym.imp.ntoskrnl.exe_ZwClose]
mov eax, edi
mov rcx, qword [rsp + 0xaa0]
xor rcx, rsp
call fcn.00021ef0
mov rbx, qword [rsp + 0xb00]
add rsp, 0xab0
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret