Function at 0x421180
Capabilities:
Link many functions at runtime

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x557707
mov eax, dword fs:[0]
push eax
sub esp, 0x3ec
mov eax, dword [0x5d7b20]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov eax, dword [ebp + 0x18]
mov esi, dword [ebp + 0xc]
mov ebx, dword [ebp + 0x1c]
mov dword [ebp - 0x3b4], eax
xor eax, eax
mov dword [ebp - 0x3b8], esi
mov dword [ebp - 0x380], ebx
mov dword [ebp - 0x3a8], eax
mov dword [ebp - 0x3ac], eax
mov dword [ebp - 0x39c], eax
cmp esi, eax
jne 0x4211eb
mov eax, 0x57
jmp 0x421b54
push str.RemoveClassDeviceByProperty_called._n
push 4
call fcn.00403ab0
mov ecx, dword [ebp + 8]
push ecx
push str.RemoveClassDeviceByProperty___property___1_d__n
push 4
call fcn.00403ab0
add esp, 0x14
push 3
lea edx, [ebp - 0x14c]
push esi
lea ecx, [ebp - 0x150]
mov dword [ebp - 0x150], edx
call fcn.004157d0
sub esp, 0x104
mov edi, esp
push str.RemoveClassDeviceByProperty___lpszPropertyValue___1_s__n
mov ecx, 0x41
lea esi, [ebp - 0x150]
push 4
mov dword [ebp - 4], 0
rep movsd dword es:[edi], dword [esi]
call fcn.00403ab0
mov eax, dword [ebp - 0x150]
lea ecx, [ebp - 0x14c]
add esp, 0x10c
mov dword [ebp - 4], 0xffffffff
cmp eax, ecx
je 0x421272
push eax
call fcn.0053f854
add esp, 4
mov edx, dword [ebp + 0x10]
push edx
push str.RemoveClassDeviceByProperty___bPresent___1_d__n
push 4
call fcn.00403ab0
add esp, 0xc
test ebx, ebx
je 0x4212f1
push 3
lea eax, [ebp - 0x14c]
push ebx
lea ecx, [ebp - 0x150]
mov dword [ebp - 0x150], eax
call fcn.004157d0
sub esp, 0x104
mov edi, esp
push str.RemoveClassDeviceByProperty___pClassName___1_s__n
mov ecx, 0x41
lea esi, [ebp - 0x150]
push 4
mov dword [ebp - 4], 1
rep movsd dword es:[edi], dword [esi]
call fcn.00403ab0
mov eax, dword [ebp - 0x150]
lea ecx, [ebp - 0x14c]
add esp, 0x10c
mov dword [ebp - 4], 0xffffffff
cmp eax, ecx
je 0x4212f1
push eax
call fcn.0053f854
add esp, 4
push str.setupapi.dll
call dword [sym.imp.KERNEL32.dll_LoadLibraryW]
mov edi, eax
mov dword [ebp - 0x3cc], edi
test edi, edi
jne 0x421312
mov eax, 0x3e8
jmp 0x421b54
mov esi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.SetupDiGetClassDevsW
push edi
call esi
mov dword [ebp - 0x394], eax
test eax, eax
je 0x4213d0
push str.SetupDiEnumDeviceInfo
push edi
call esi
mov dword [ebp - 0x3a4], eax
test eax, eax
je 0x4213d0
push str.SetupDiGetDeviceRegistryPropertyW
push edi
call esi
mov dword [ebp - 0x3a0], eax
test eax, eax
je 0x4213d0
push str.SetupDiCallClassInstaller
push edi
call esi
mov dword [ebp - 0x3d8], eax
test eax, eax
je 0x4213d0
push str.SetupDiDestroyDeviceInfoList
push edi
call esi
mov dword [ebp - 0x3d4], eax
test eax, eax
je 0x4213d0
push str.SetupDiSetClassInstallParamsW
push edi
call esi
mov dword [ebp - 0x3dc], eax
test eax, eax
je 0x4213d0
push str.SetupDiGetDeviceInstallParamsW
push edi
call esi
mov dword [ebp - 0x3c4], eax
test eax, eax
je 0x4213d0
push str.SetupDiOpenDevRegKey
push edi
call esi
mov dword [ebp - 0x3c8], eax
test eax, eax
je 0x4213d0
push str.SetupDiRemoveDevice
push edi
call esi
mov dword [ebp - 0x3d0], eax
test eax, eax
je 0x4213d0
push str.SetupDiClassGuidsFromNameW
push edi
call esi
mov ebx, eax
test ebx, ebx
jne 0x4213fc
push str.RemoveClassDeviceByProperty_ErrorExit_GetProc._n
push 5
call fcn.00403ab0
add esp, 8
push edi
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
push str.RemoveClassDeviceByProperty_exit._n
push 5
call fcn.00403ab0
mov eax, 0x3e9
jmp 0x421b51
push str.RemoveClassDeviceByProperty_get_function_pointers_succeeded._n
push 5
call fcn.00403ab0
add esp, 8
cmp dword [ebp - 0x380], 0
je 0x4214c9
xor eax, eax
mov dword [ebp - 0x3c], eax
mov dword [ebp - 0x38], eax
mov dword [ebp - 0x34], eax
mov dword [ebp - 0x30], eax
mov eax, dword [ebp - 0x380]
push 3
lea edx, [ebp - 0x14c]
push eax
lea ecx, [ebp - 0x150]
xor esi, esi
mov dword [ebp - 0x150], edx
call fcn.004157d0
mov eax, dword [ebp - 0x150]
lea ecx, [ebp - 0x3ac]
push ecx
push 1
lea edx, [ebp - 0x3c]
push edx
push eax
mov dword [ebp - 4], 2
call ebx
test eax, eax
mov eax, dword [ebp - 0x150]
lea ecx, [ebp - 0x14c]
sete bl
mov dword [ebp - 4], 0xffffffff
cmp eax, ecx
je 0x42148a
push eax
call fcn.0053f854
add esp, 4
test bl, bl
je 0x4214b9
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0x7a
je 0x4214b9
push str.RemoveClassDeviceByProperty_pSetupDiClassGuidsFromName_failed._n
push 2
call fcn.00403ab0
add esp, 8
push edi
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov eax, 0x3e9
jmp 0x421b54
cmp dword [ebp - 0x3ac], 0
jne 0x4214ce
push str.RemoveClassDeviceByProperty_Get_GUID_failed_numGuids__0_._n
jmp 0x42149e
mov esi, 4
xor ebx, ebx
cmp dword [ebp + 0x10], ebx
je 0x4214d8
or esi, 2
push esi
push ebx
push ebx
lea edx, [ebp - 0x3c]
push edx
call dword [ebp - 0x394]
mov esi, eax
mov dword [ebp - 0x384], esi
cmp esi, 0xffffffff
jne 0x421503
push edi
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov eax, 0x3ea
jmp 0x421b54
push str.RemoveClassDeviceByProperty_pSetupDiGetClassDevsA_succeeded._n
push 5
call fcn.00403ab0
mov eax, dword [ebp + 8]
lea ecx, [eax - 1]
add esp, 8
cmp ecx, 0x11
ja case.0x421524.3
movzx ecx, byte [ecx + 0x421b7c]
jmp dword [ecx*4 + 0x421b74]
push eax
push str.RemoveClassDeviceByProperty_property___1_lu_._MULTI_SZ__n
push 5
call fcn.00403ab0
mov dword [ebp - 0x3b0], 1
jmp 0x421557
push eax
push str.RemoveClassDeviceByProperty_property___1_lu_._REG_SZ__n
push 5
call fcn.00403ab0
mov dword [ebp - 0x3b0], ebx
add esp, 0xc
lea edx, [ebp - 0x2c]
push edx
push ebx
push esi
mov dword [ebp - 0x2c], 0x1c
mov dword [ebp - 0x394], ebx
call dword [ebp - 0x3a4]
test eax, eax
je 0x421b06
mov edi, dword [sym.imp.KERNEL32.dll_GetLastError]
mov ebx, dword [ebp - 0x384]
xor esi, esi
mov dword [ebp - 0x390], esi
mov ecx, dword [ebp - 0x390]
lea eax, [ebp - 0x390]
push eax
mov eax, dword [ebp + 8]
push ecx
push esi
lea edx, [ebp - 0x3c0]
push edx
push eax
lea ecx, [ebp - 0x2c]
push ecx
push ebx
mov dword [ebp - 0x380], esi
call dword [ebp - 0x3a0]
test eax, eax
je 0x4215c2
test esi, esi
jne 0x42162f
call edi
cmp eax, 0xd
je 0x42162f
call edi
cmp eax, 0x7a
jne 0x4215fd
test esi, esi
je 0x4215dd
push esi
call fcn.0043e500
add esp, 4
mov edx, dword [ebp - 0x390]
push 0xd4
add edx, 2
push str.DevConFunc.cpp
push edx
call fcn.0043e4e0
add esp, 0xc
mov esi, eax
jmp 0x42158f
call edi
test eax, eax
jne 0x421af4
test esi, esi
jne 0x421af4
mov eax, dword [ebp - 0x390]
push 0xd8
push str.DevConFunc.cpp
push eax
call fcn.0043e4e0
add esp, 0xc
mov esi, eax
jmp 0x42158f
call edi
cmp eax, 0xd
je 0x421aae
test esi, esi
je 0x421aae
cmp word [esi], 0
mov dword [ebp - 0x388], esi
je 0x421a9f
mov ecx, dword [ebp - 0x390]
shr ecx, 1
lea edx, [esi + ecx*2]
cmp dword [ebp - 0x388], edx
jae 0x421a9f
call fcn.0040ad20
mov edi, dword [ebp - 0x388]
push edi
push str.RemoveClassDeviceByProperty_p____1_s_______n
push 5
call fcn.00403ab0
mov ecx, dword [ebp - 0x3b8]
add esp, 0xc
push 3
lea eax, [ebp - 0x14c]
push ecx
lea ecx, [ebp - 0x150]
mov dword [ebp - 0x150], eax
call fcn.004157d0
mov edx, dword [ebp - 0x150]
push edi
push edx
call fcn.0053e2bf
add esp, 8
test eax, eax
mov eax, dword [ebp - 0x150]
lea ecx, [ebp - 0x14c]
sete bl
cmp eax, ecx
je 0x4216d2
push eax
call fcn.0053f854
add esp, 4
test bl, bl
je 0x421a6a
push 0xa
lea ecx, [ebp - 0x3f8]
call fcn.0045900d
push edi
push str.RemoveClassDeviceByProperty_p____1_s______Hit_________________________
xor esi, esi
push 5
mov dword [ebp - 4], 3
mov dword [ebp - 0x398], esi
call fcn.00403ab0
mov eax, dword [ebp - 0x3b4]
add esp, 0xc
cmp eax, esi
je 0x421769
cmp byte [eax], 0x40
jne 0x421769
push 3
lea edx, [ebp - 0x14c]
push eax
lea ecx, [ebp - 0x150]
mov dword [ebp - 0x150], edx
call fcn.004157d0
mov eax, dword [ebp - 0x150]
push str._FINDONLY
push eax
call fcn.0053e2bf
add esp, 8
test eax, eax
mov eax, dword [ebp - 0x150]
lea ecx, [ebp - 0x14c]
sete bl
cmp eax, ecx
je 0x421761
push eax
call fcn.0053f854
add esp, 4
test bl, bl
jne 0x421ad1
mov edi, dword [ebp - 0x384]
mov ebx, dword [sym.imp.KERNEL32.dll_GetLastError]
jmp 0x421780
mov eax, dword [ebp - 0x398]
lea edx, [ebp - 0x398]
push edx
push eax
push esi
lea ecx, [ebp - 0x3c0]
push ecx
push 9
lea edx, [ebp - 0x2c]
push edx
push edi
call dword [ebp - 0x3a0]
test eax, eax
je 0x4217ab
test esi, esi
jne 0x42180d
call ebx
cmp eax, 0xd
je 0x42180d
call ebx
cmp eax, 0x7a
jne 0x4217e3
test esi, esi
je 0x4217c6
push esi
call fcn.0043e500
add esp, 4
mov eax, dword [ebp - 0x398]
push 0x117
push str.DevConFunc.cpp
push eax
call fcn.0043e4e0
add esp, 0xc
mov esi, eax
jmp 0x421780
call ebx
test eax, eax
jne 0x42180d
test esi, esi
jne 0x42180d
mov ecx, dword [ebp - 0x398]
push 0x11a
push str.DevConFunc.cpp
push ecx
call fcn.0043e4e0
add esp, 0xc
mov esi, eax
jmp 0x421780
push esi
push str.RemoveClassDeviceByProperty_Retrieves_the_devices_driver____1_s___n
push 5
call fcn.00403ab0
add esp, 0xc
push 0x20019
push 2
push 0
push 1
lea edx, [ebp - 0x2c]
push edx
push edi
call dword [ebp - 0x3c8]
mov ebx, eax
push 0x10
lea eax, [ebp - 0x4c]
push eax
lea ecx, [ebp - 0x2c]
push ecx
push edi
mov dword [ebp - 0x3bc], ebx
mov dword [ebp - 0x4c], 8
mov dword [ebp - 0x48], 5
mov dword [ebp - 0x44], 1
mov dword [ebp - 0x40], 0
call dword [ebp - 0x3dc]
test esi, esi
je 0x4218f2
cmp ebx, 0xffffffff
je 0x4218f2
push esi
push str.RemoveClassDeviceByProperty__1_s__ClassKey_exists._n
push 4
call fcn.00403ab0
add esp, 0xc
cmp dword [ebp + 0x14], 0
je 0x4218b0
lea edx, [ebp - 0x3f8]
push edx
lea eax, [ebp - 0x2c]
push eax
push edi
call fcn.00415bf0
test eax, eax
je 0x4218b0
push eax
push str.RemoveClassDeviceByProperty_RemoveDeviceRelatedInf_failed.__0x_1_x___n
push 2
call fcn.00403ab0
add esp, 0xc
mov edx, dword [ebp - 0x384]
lea ecx, [ebp - 0x2c]
push ecx
push edx
push 5
call dword [ebp - 0x3d8]
mov edi, eax
mov ebx, str.SUCCEEDED
test edi, edi
jne 0x4218d3
mov ebx, str.FAILED
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push ebx
push str.RemoveClassDeviceByProperty_pSetupDiCallClassInstaller_DIF_REMOVE__called.__ret___1_s___err__0x_1_lx___n
push 4
call fcn.00403ab0
mov ebx, dword [ebp - 0x3bc]
add esp, 0x10
jmp 0x421924
push esi
push str.RemoveClassDeviceByProperty__1_s__doesnot_exist._Call_SetupDiRemoveDevice._n
push 4
call fcn.00403ab0
mov ecx, dword [ebp - 0x384]
add esp, 0xc
lea eax, [ebp - 0x2c]
push eax
push ecx
call dword [ebp - 0x3d0]
push str.RemoveClassDeviceByProperty_pSetupDiRemoveDevice_calls.__Alternate_for_DIF_REMOVE__n
push 4
mov edi, eax
call fcn.00403ab0
add esp, 8
test ebx, ebx
je 0x42192f
push ebx
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
test esi, esi
je 0x42193c
push esi
call fcn.0043e500
add esp, 4
test edi, edi
jne 0x421965
mov dword [ebp - 0x39c], 0x7d0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.RemoveClassDeviceByProperty_SetupDiCallClassInstaller_failed.__0x_1_x___n
push 2
call fcn.00403ab0
add esp, 0xc
jmp 0x421a52
mov ecx, dword [ebp - 0x384]
lea edx, [ebp - 0x37c]
push edx
lea eax, [ebp - 0x2c]
push eax
push ecx
mov dword [ebp - 0x37c], 0x22c
call dword [ebp - 0x3c4]
test eax, eax
je 0x4219c3
push str.RemoveClassDeviceByProperty_SetupDiGetDeviceInstallParams_success._n
push 4
call fcn.00403ab0
mov edx, dword [ebp - 0x378]
push edx
push str.RemoveClassDeviceByProperty_DeviceInstallParams.Flags___1_x__n
push 4
call fcn.00403ab0
add esp, 0x14
test dword [ebp - 0x378], 0x180
je 0x4219c3
mov dword [ebp - 0x3a8], 1
cmp dword [ebp + 0x14], 0
je 0x421a52
lea ecx, [ebp - 0x38c]
call fcn.00404770
mov edi, dword [ebp - 0x3f4]
mov byte [ebp - 4], 4
test edi, edi
je 0x421a47
mov eax, edi
test edi, edi
je 0x421aef
mov edi, dword [edi]
add eax, 8
push eax
lea ecx, [ebp - 0x38c]
call fcn.00405460
mov esi, dword [ebp - 0x38c]
push esi
push str.RemoveClassDeviceByProperty_MySetupUninstallOEMInf_strInfFile___1_s__n
push 4
call fcn.00403ab0
mov ecx, dword [esi - 8]
mov eax, 1
sub eax, dword [esi - 4]
add esp, 0xc
or ecx, eax
jge 0x421a39
push 0
lea ecx, [ebp - 0x38c]
call fcn.004045b0
mov esi, dword [ebp - 0x38c]
push esi
lea eax, [ebp - 0x28]
push eax
call fcn.0041cca0
test edi, edi
jne 0x4219e6
lea ecx, [ebp - 0x38c]
call fcn.00417700
lea ecx, [ebp - 0x3f8]
mov dword [ebp - 4], 0xffffffff
call fcn.0045913b
mov edi, dword [ebp - 0x388]
push edi
call dword [sym.imp.KERNEL32.dll_lstrlenW]
cmp dword [ebp - 0x3b0], 0
je 0x421a80
lea eax, [edi + eax*2 + 2]
jmp 0x421a83
lea eax, [edi + eax*2]
cmp word [eax], 0
mov edi, dword [sym.imp.KERNEL32.dll_GetLastError]
mov esi, dword [ebp - 0x380]
mov dword [ebp - 0x388], eax
jne 0x421652
push esi
call fcn.0043e500
mov ebx, dword [ebp - 0x384]
add esp, 4
mov eax, dword [ebp - 0x394]
lea ecx, [ebp - 0x2c]
inc eax
push ecx
push eax
push ebx
mov dword [ebp - 0x394], eax
call dword [ebp - 0x3a4]
test eax, eax
jne 0x421581
jmp 0x421b06
lea ecx, [ebp - 0x3f8]
mov dword [ebp - 0x39c], 0x1388
mov dword [ebp - 4], 0xffffffff
call fcn.0045913b
jmp 0x421b06
call fcn.00449c8f
call edi
push eax
push str.RemoveClassDeviceByProperty_Unknown_GetLastError___1_lu_._n
push 5
call fcn.00403ab0
add esp, 0xc
push str.RemoveClassDeviceByProperty_cleanup_DeviceInfo._n
push 5
call fcn.00403ab0
mov edx, dword [ebp - 0x384]
add esp, 8
push edx
call dword [ebp - 0x3d4]
mov eax, dword [ebp - 0x3cc]
push eax
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
cmp dword [ebp - 0x3a8], 0
mov esi, 0xbb8
jne 0x421b43
mov esi, dword [ebp - 0x39c]
push str.RemoveClassDeviceByProperty_exit._n
push 5
call fcn.00403ab0
mov eax, esi
add esp, 8
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0053e1ad
mov esp, ebp
pop ebp
ret 0x18