Function at 0x407ca0
Capabilities:
Get common file path
Link many functions at runtime

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x108
mov eax, dword [0x46d004]
xor eax, ebp
mov dword [ebp - 4], eax
push ebx
push edi
push 0x104
lea eax, [ebp - 0x108]
mov ebx, ecx
push eax
call dword [sym.imp.KERNEL32.dll_GetSystemDirectoryA]
test eax, eax
je 0x407d3c
cmp eax, 0x104
jae 0x407d3c
lea ecx, [eax + 0xe]
cmp ecx, 0x104
jb 0x407d10
push str.program_assertion_failed___library_path_buffer_overflow
push str.load_system_library
push 1
push ebx
call fcn.00402920
add esp, 0x10
mov dword [0x46ede4], 0
xor al, al
pop edi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00411798
mov esp, ebp
pop ebp
ret
push str.Cfgmgr32
lea ecx, [ebp - 0x108]
add eax, ecx
push str._s.dll
push eax
call fcn.00403b20
add esp, 0xc
lea eax, [ebp - 0x108]
push eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov edi, eax
jmp 0x407d53
push str.program_assertion_failed___could_not_get_system_directory
push str.load_system_library
push 1
push ebx
call fcn.00402920
add esp, 0x10
xor edi, edi
mov dword [0x46ede4], edi
test edi, edi
jne 0x407d6f
pop edi
xor al, al
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00411798
mov esp, ebp
pop ebp
ret
push esi
mov esi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.CM_Get_Parent
push edi
call esi
mov dword [0x46eee8], eax
test eax, eax
jne 0x407dad
push str.CM_Get_ParentA
push edi
call esi
mov dword [0x46eee8], eax
test eax, eax
jne 0x407dad
push str.CM_Get_ParentW
push edi
call esi
mov dword [0x46eee8], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ede4]
push str.CM_Get_Child
push edi
call esi
mov dword [0x46eec4], eax
test eax, eax
jne 0x407dea
push str.CM_Get_ChildA
push edi
call esi
mov dword [0x46eec4], eax
test eax, eax
jne 0x407dea
push str.CM_Get_ChildW
push edi
call esi
mov dword [0x46eec4], eax
test eax, eax
je 0x4080a9
mov edx, str.AdvAPI32
mov ecx, ebx
call fcn.00403d10
mov edi, eax
mov dword [0x46ede8], edi
test edi, edi
je 0x4080a9
push str.RegQueryValueExA
push edi
call esi
mov dword [0x46eddc], eax
test eax, eax
jne 0x407e3d
push str.RegQueryValueExAA
push edi
call esi
mov dword [0x46eddc], eax
test eax, eax
jne 0x407e3d
push str.RegQueryValueExAW
push edi
call esi
mov dword [0x46eddc], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ede8]
push str.RegCloseKey
push edi
call esi
mov dword [0x46edb0], eax
test eax, eax
jne 0x407e7a
push str.RegCloseKeyA
push edi
call esi
mov dword [0x46edb0], eax
test eax, eax
jne 0x407e7a
push str.RegCloseKeyW
push edi
call esi
mov dword [0x46edb0], eax
test eax, eax
je 0x4080a9
mov edx, str.SetupAPI
mov ecx, ebx
call fcn.00403d10
mov edi, eax
mov dword [0x46ed90], edi
test edi, edi
je 0x4080a9
push str.SetupDiGetClassDevsA
push edi
call esi
mov dword [0x46edd0], eax
test eax, eax
jne 0x407ecd
push str.SetupDiGetClassDevsAA
push edi
call esi
mov dword [0x46edd0], eax
test eax, eax
jne 0x407ecd
push str.SetupDiGetClassDevsAW
push edi
call esi
mov dword [0x46edd0], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiEnumDeviceInfo
push edi
call esi
mov dword [0x46edc0], eax
test eax, eax
jne 0x407f0a
push str.SetupDiEnumDeviceInfoA
push edi
call esi
mov dword [0x46edc0], eax
test eax, eax
jne 0x407f0a
push str.SetupDiEnumDeviceInfoW
push edi
call esi
mov dword [0x46edc0], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiEnumDeviceInterfaces
push edi
call esi
mov dword [0x46edf0], eax
test eax, eax
jne 0x407f47
push str.SetupDiEnumDeviceInterfacesA
push edi
call esi
mov dword [0x46edf0], eax
test eax, eax
jne 0x407f47
push str.SetupDiEnumDeviceInterfacesW
push edi
call esi
mov dword [0x46edf0], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiGetDeviceInstanceIdA
push edi
call esi
mov dword [0x46edd8], eax
test eax, eax
jne 0x407f84
push str.SetupDiGetDeviceInstanceIdAA
push edi
call esi
mov dword [0x46edd8], eax
test eax, eax
jne 0x407f84
push str.SetupDiGetDeviceInstanceIdAW
push edi
call esi
mov dword [0x46edd8], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiGetDeviceInterfaceDetailA
push edi
call esi
mov dword [0x46edac], eax
test eax, eax
jne 0x407fc1
push str.SetupDiGetDeviceInterfaceDetailAA
push edi
call esi
mov dword [0x46edac], eax
test eax, eax
jne 0x407fc1
push str.SetupDiGetDeviceInterfaceDetailAW
push edi
call esi
mov dword [0x46edac], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiGetDeviceRegistryPropertyA
push edi
call esi
mov dword [0x46edc4], eax
test eax, eax
jne 0x407ffe
push str.SetupDiGetDeviceRegistryPropertyAA
push edi
call esi
mov dword [0x46edc4], eax
test eax, eax
jne 0x407ffe
push str.SetupDiGetDeviceRegistryPropertyAW
push edi
call esi
mov dword [0x46edc4], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiDestroyDeviceInfoList
push edi
call esi
mov dword [0x46eec8], eax
test eax, eax
jne 0x408037
push str.SetupDiDestroyDeviceInfoListA
push edi
call esi
mov dword [0x46eec8], eax
test eax, eax
jne 0x408037
push str.SetupDiDestroyDeviceInfoListW
push edi
call esi
mov dword [0x46eec8], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiOpenDevRegKey
push edi
call esi
mov dword [0x46edc8], eax
test eax, eax
jne 0x408070
push str.SetupDiOpenDevRegKeyA
push edi
call esi
mov dword [0x46edc8], eax
test eax, eax
jne 0x408070
push str.SetupDiOpenDevRegKeyW
push edi
call esi
mov dword [0x46edc8], eax
test eax, eax
je 0x4080a9
mov edi, dword [0x46ed90]
push str.SetupDiOpenDeviceInterfaceRegKey
push edi
call esi
mov dword [0x46eda0], eax
test eax, eax
jne 0x4080bc
push str.SetupDiOpenDeviceInterfaceRegKeyA
push edi
call esi
mov dword [0x46eda0], eax
test eax, eax
jne 0x4080bc
push str.SetupDiOpenDeviceInterfaceRegKeyW
push edi
call esi
mov dword [0x46eda0], eax
test eax, eax
jne 0x4080bc
pop esi
pop edi
xor al, al
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00411798
mov esp, ebp
pop ebp
ret
mov ecx, dword [ebp - 4]
mov al, 1
pop esi
pop edi
xor ecx, ebp
pop ebx
call fcn.00411798
mov esp, ebp
pop ebp
ret