Function at 0x14001c440
Capabilities:
Get thread local storage value
Set thread local storage value

Disassembly:
mov rax, rsp
push rsi
push rdi
push r12
sub rsp, 0x4f0
mov qword [rsp + 0x60], 0xfffffffffffffffe
mov qword [rax + 0x18], rbx
mov qword [rax + 0x20], rbp
mov rax, qword [0x14002f198]
xor rax, rsp
mov qword [rsp + 0x4e0], rax
mov rbp, rdx
mov rsi, rcx
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ebx, eax
lea r12, [0x140031530]
mov ecx, dword [0x1400302f0]
cmp ecx, 0xffffffff
je 0x14001c4a9
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rdi, rax
test rax, rax
je 0x14001c4a9
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
jmp 0x14001c4b4
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
mov rdi, r12
mov r9d, 0xc
mov r8, rsi
lea rdx, [0x14002c260]
mov rcx, rdi
call fcn.14001a360
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ebx, eax
mov ecx, dword [0x1400302f0]
cmp ecx, 0xffffffff
je 0x14001c4f7
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rdi, rax
test rax, rax
je 0x14001c4f7
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
jmp 0x14001c502
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
mov rdi, r12
xor ebx, ebx
mov qword [rsp + 0x40], rbx
mov qword [rsp + 0x48], rbx
mov qword [rsp + 0x50], rdi
mov dword [rsp + 0x58], 0xff
mov ecx, dword [0x1400302f4]
cmp ecx, 0xffffffff
je 0x14001c574
cmp dword [0x1400302f8], 0xffffffff
je 0x14001c574
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov qword [rsp + 0x40], rax
mov ecx, dword [0x1400302f8]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov qword [rsp + 0x48], rax
lea rdx, str.OpenDatabaseExecuteViewByUpgradeCode
mov ecx, dword [0x1400302f4]
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
lea rdx, [rsp + 0x40]
mov ecx, dword [0x1400302f8]
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
mov rdi, qword [rsp + 0x50]
test rdi, rdi
je 0x14001c582
mov rcx, rdi
call fcn.140018ec0
nop
mov dword [rsp + 0x38], ebx
lea r9, [rsp + 0x70]
xor r8d, r8d
xor edx, edx
mov rcx, rsi
call qword [sym.imp.msi.dll_MsiSourceListClearAllW]
mov edi, eax
test eax, eax
jne 0x14001c75a
mov dword [rsp + 0x38], 0x200
lea r9, [rsp + 0x38]
lea r8, [rsp + 0xe0]
lea rdx, str.LocalPackage
lea rcx, [rsp + 0x70]
call qword [sym.imp.msi.dll_MsiGetPropertyW]
mov edi, eax
test eax, eax
jne 0x14001c715
lea r8, [rsp + 0x34]
lea edx, [rax + 2]
lea rcx, [rsp + 0xe0]
call qword [sym.imp.msi.dll_MsiOpenProductW]
mov edi, eax
test eax, eax
jne 0x14001c6fb
lea r8, [rsp + 0x30]
mov rdx, rbp
mov ecx, dword [rsp + 0x34]
call qword [sym.imp.msi.dll_MsiEnumClientsA]
mov ebx, eax
test eax, eax
jne 0x14001c697
xor edx, edx
mov ecx, dword [rsp + 0x30]
call qword [sym.imp.msi.dll_MsiViewModify]
mov ebx, eax
test eax, eax
jne 0x14001c63c
call fcn.140017d40
mov rcx, rax
lea r8d, [rdi + 0x25]
lea rdx, str.Action_table_modified
call fcn.14001a790
jmp 0x14001c659
call fcn.140017d40
mov rcx, rax
mov r9d, 0x28
mov r8d, ebx
lea rdx, str.MsiViewExecute_failed
call fcn.14001a8f0
mov ecx, dword [rsp + 0x30]
call qword [sym.imp.msi.dll_MsiConfigureFeatureFromDescriptorA]
mov ebx, eax
test eax, eax
jne 0x14001c683
call fcn.140017d40
mov rcx, rax
lea r8d, [rbx + 0x2d]
lea rdx, str.MSICloseHandle_view_done
call fcn.14001a790
jmp 0x14001c6b4
call fcn.140017d40
mov r9d, 0x30
lea rdx, str.MSICloseHandle_view_failed
jmp 0x14001c6a9
call fcn.140017d40
mov r9d, 0x33
lea rdx, str.MsiDatabaseOpenView_failed
mov r8d, ebx
mov rcx, rax
call fcn.14001a8f0
mov ecx, dword [rsp + 0x34]
call qword [sym.imp.msi.dll_MsiConfigureFeatureFromDescriptorA]
mov edi, eax
test eax, eax
jne 0x14001c6e1
call fcn.140017d40
mov rcx, rax
lea r8d, [rdi + 0x38]
lea rdx, str.MSICloseHandle_product_done
call fcn.14001a790
jmp 0x14001c7a8
call fcn.140017d40
mov rcx, rax
mov r9d, 0x3b
lea rdx, str.MSICloseHandle_product_failed
jmp 0x14001c7a0
call fcn.140017d40
mov rcx, rax
mov r9d, 0x3e
lea rdx, str.MsiOpenDatabase_failed
jmp 0x14001c7a0
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ebx, eax
mov ecx, dword [0x1400302f0]
cmp ecx, 0xffffffff
je 0x14001c740
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rsi, rax
test rax, rax
je 0x14001c740
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
jmp 0x14001c74b
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
mov rsi, r12
mov r9d, MsiGetPropertyW
lea rdx, str.MsiGetProductInfo_failed
jmp 0x14001c79d
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ebx, eax
mov ecx, dword [0x1400302f0]
cmp ecx, 0xffffffff
je 0x14001c785
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rsi, rax
test rax, rax
je 0x14001c785
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
jmp 0x14001c790
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
mov rsi, r12
mov r9d, MsiGetPropertyW
lea rdx, str.MsiEnumRelatedProducts_failed
mov rcx, rsi
mov r8d, edi
call fcn.14001a8f0
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ebx, eax
mov ecx, dword [0x1400302f0]
cmp ecx, 0xffffffff
je 0x14001c7d3
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rsi, rax
test rax, rax
je 0x14001c7d3
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
jmp 0x14001c7de
mov ecx, ebx
call qword [sym.imp.KERNEL32.dll_SetLastError]
mov rsi, r12
mov dword [rsp + 0x20], reloc.msi.dll_MsiGetPropertyW
mov r9, rbp
mov r8d, edi
lea rdx, [0x14002c260]
mov rcx, rsi
call fcn.14001a4c0
nop
lea rcx, [rsp + 0x40]
call fcn.1400175e0
mov eax, edi
mov rcx, qword [rsp + 0x4e0]
xor rcx, rsp
call fcn.14001cea0
lea r11, [rsp + 0x4f0]
mov rbx, qword [r11 + 0x30]
mov rbp, qword [r11 + 0x38]
mov rsp, r11
pop r12
pop rdi
pop rsi
ret