Function at 0x4098f0
Capabilities:
Query or enumerate registry key
Resolve function by parsing pe exports

Disassembly:
push 0xffffffffffffffff
push 0x416fca
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0x404
push ebx
mov al, byte [esp + 7]
push ebp
push esi
push edi
xor ebx, ebx
sub esp, 0x10
mov esi, esp
mov dword [esp + 0x64], esp
push ebx
mov ecx, esi
mov byte [esi], al
call fcn.00401d10
mov edi, str.EnumerateRegistryForPCIDevices___n
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str.EnumerateRegistryForPCIDevices___n
mov ecx, esi
call fcn.00402330
call fcn.00405060
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x321]
mov byte [esp + 0x320], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0x3f
xor eax, eax
lea edi, [esp + 0x121]
mov byte [esp + 0x120], bl
rep stosd dword es:[edi], eax
mov esi, dword [esp + 0x434]
push str.Windows_Millenium
stosw word es:[edi], ax
push esi
mov dword [esp + 0x54], ebx
mov dword [esp + 0x6c], ebx
mov dword [esp + 0x2c], ebx
stosb byte es:[edi], al
mov dword [esp + 0x70], 0x100
call fcn.0040f5c7
add esp, 0x18
mov ebp, 1
test eax, eax
jne 0x4099c2
lea ecx, [esp + 0x3c]
mov dword [esp + 0x5c], ebp
push ecx
push 8
push ebx
push str.EnumPCI
jmp 0x409a28
push str.Windows_Whistler
push esi
call fcn.0040f5c7
add esp, 8
test eax, eax
je 0x409a13
push str.Windows_2000
push esi
call fcn.0040f5c7
add esp, 8
test eax, eax
je 0x409a13
push str.Windows_98
push esi
call fcn.0040f5c7
add esp, 8
test eax, eax
jne 0x40a96e
lea edx, [esp + 0x3c]
mov dword [esp + 0x5c], 3
push edx
push 8
push ebx
push str.EnumPCI_
jmp 0x409a28
lea eax, [esp + 0x3c]
mov dword [esp + 0x5c], 2
push eax
push 8
push ebx
push str.SYSTEMCurrentControlSetEnumPCI
push 0x80000002
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyExA]
cmp eax, ebx
jne 0x40a96e
mov cl, byte [esp + 0x13]
sub esp, 0x10
mov esi, esp
mov dword [esp + 0x50], esp
push ebx
mov byte [esi], cl
mov ecx, esi
call fcn.00401d10
mov edi, str._enumerating_registry_for_devices..._n
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str._enumerating_registry_for_devices..._n
mov ecx, esi
call fcn.00402330
call fcn.00405060
add esp, 0x10
mov ecx, dword [esp + 0x3c]
lea edx, [esp + 0x58]
lea eax, [esp + 0x110]
push ebx
push ebx
push ebx
push ebx
push edx
push eax
push ebx
push ecx
call dword [sym.imp.ADVAPI32.dll_RegEnumKeyExA]
cmp eax, 0x103
je 0x40a923
jmp 0x409aa5
mov ebp, 1
lea edx, [esp + 0x110]
push str.VEN_8086
push edx
call fcn.0040f551
add esp, 8
test eax, eax
je 0x40a059
mov al, byte [esp + 0x13]
push ebx
lea ecx, [esp + 0x64]
mov byte [esp + 0x64], al
call fcn.00401d10
lea edi, [esp + 0x110]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
lea ecx, [esp + 0x114]
push ecx
lea ecx, [esp + 0x68]
call fcn.00402330
mov dl, byte [esp + 0x13]
push ebx
lea ecx, [esp + 0xa4]
mov dword [esp + 0x420], ebx
mov byte [esp + 0xa4], dl
call fcn.00401d10
mov edi, str.device:
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str.device:
lea ecx, [esp + 0xa8]
call fcn.00402330
mov eax, dword [0x418218]
lea ecx, [esp + 0x60]
push eax
push ebx
push ecx
lea ecx, [esp + 0xac]
mov byte [esp + 0x428], 1
call fcn.0040e410
mov edi, 0x41b2a0
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push 0x41b2a0
lea ecx, [esp + 0xa8]
call fcn.0040e4f0
mov dl, byte [esp + 0xa0]
sub esp, 0x10
mov esi, esp
mov dword [esp + 0x50], esp
push ebx
mov ecx, esi
mov byte [esi], dl
call fcn.00401d10
mov eax, dword [0x418218]
lea ecx, [esp + 0xb0]
push eax
push ebx
push ecx
mov ecx, esi
call fcn.00401b10
call fcn.00405060
add esp, 0x10
lea ecx, [esp + 0xa0]
mov byte [esp + 0x41c], 0
push ebp
call fcn.00401d10
mov dl, byte [esp + 0x60]
push ebx
lea ecx, [esp + 0x94]
mov byte [esp + 0x94], dl
call fcn.00401d10
mov eax, dword [0x418218]
push eax
push ebx
lea ecx, [esp + 0x68]
push ecx
lea ecx, [esp + 0x9c]
call fcn.00401b10
mov dl, byte [esp + 0x13]
mov dword [esp + 0x18], ebp
mov dword [esp + 0x40], ebp
mov byte [esp + 0x70], dl
mov dword [esp + 0x74], ebx
mov dword [esp + 0x78], ebx
mov dword [esp + 0x7c], ebx
lea eax, [esp + 0x70]
mov byte [esp + 0x41c], 3
push eax
call fcn.0040bfe0
add esp, 4
mov ebx, dword [esp + 0x74]
mov eax, dword [esp + 0x78]
cmp ebx, eax
jae 0x409dac
mov ebp, dword [esp + 0x424]
mov ecx, dword [esp + 0x18]
test ecx, ecx
je 0x409fe8
mov cl, byte [ebx]
push 0
mov byte [esp + 0xb4], cl
lea ecx, [esp + 0xb4]
call fcn.00401d10
mov edx, dword [0x418218]
lea ecx, [esp + 0xb0]
push edx
push 0
push ebx
call fcn.00401b10
mov eax, dword [esp + 0xb4]
mov byte [esp + 0x41c], 4
test eax, eax
mov ecx, 0x41821c
je 0x409c90
mov ecx, eax
mov eax, dword [esp + 0x94]
test eax, eax
jne 0x409ca0
mov eax, 0x41821c
lea edx, [esp + 0x310]
push edx
push ebp
push ecx
push eax
call fcn.00407ac0
add esp, 0x10
test eax, eax
je 0x409d87
mov al, byte [esp + 0x13]
sub esp, 0x10
mov esi, esp
mov dword [esp + 0x24], esp
push 0
mov ecx, esi
mov byte [esi], al
call fcn.00401d10
mov edi, str.__FOUND_INF_MATCH_n
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str.__FOUND_INF_MATCH_n
mov ecx, esi
call fcn.00402330
call fcn.00405060
or ecx, 0xffffffff
mov edi, str.PCI_
xor eax, eax
add esp, 0x10
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [ebp + 0x2cc]
mov eax, ecx
mov esi, edi
mov edi, edx
mov dword [esp + 0x18], 0
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor eax, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x110]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
mov edx, eax
or ecx, 0xffffffff
xor eax, eax
mov dword [esp + 0x14], 1
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
lea edx, [ebp + 0xcc]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x310]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
push 1
lea ecx, [esp + 0xb4]
mov byte [esp + 0x420], 3
call fcn.00401d10
mov eax, dword [esp + 0x78]
add ebx, 0x10
cmp ebx, eax
jb 0x409c3d
mov ecx, dword [esp + 0x18]
test ecx, ecx
je 0x409fe8
mov eax, dword [esp + 0x40]
dec eax
je 0x409f5e
dec eax
je 0x409e4f
dec eax
je 0x409dda
mov dword [esp + 0x18], 0
jmp 0x409fcf
mov edi, str.SUBSYS
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [0x418218]
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push edx
push str.SUBSYS
lea ecx, [esp + 0x6c]
call fcn.0040e1f0
test eax, eax
je 0x409fcf
push eax
lea ecx, [esp + 0xd4]
push 0
push ecx
lea ecx, [esp + 0x6c]
call fcn.0040dfb0
mov edx, dword [0x418218]
lea ecx, [esp + 0x90]
push edx
push 0
push eax
mov byte [esp + 0x428], 9
call fcn.00401b10
mov byte [esp + 0x41c], 3
push 1
lea ecx, [esp + 0xd4]
jmp 0x409fca
mov edi, str.SUBSYS
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [0x418218]
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push edx
push str.SUBSYS
lea ecx, [esp + 0x6c]
call fcn.0040e1f0
mov esi, eax
mov edi, str.REV
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
mov edx, dword [0x418218]
not ecx
dec ecx
push ecx
push edx
push str.REV
lea ecx, [esp + 0x6c]
call fcn.0040e1f0
test esi, esi
je 0x409fcf
test eax, eax
je 0x409fcf
mov ecx, dword [esp + 0x68]
lea edx, [esp + 0xc0]
sub ecx, esi
push ecx
push eax
push edx
lea ecx, [esp + 0x6c]
call fcn.0040dfb0
push esi
lea eax, [esp + 0xf4]
push 0
push eax
lea ecx, [esp + 0x6c]
mov byte [esp + 0x428], 6
call fcn.0040dfb0
lea ecx, [esp + 0xc0]
lea edx, [esp + 0x100]
push ecx
push eax
push edx
mov byte [esp + 0x428], 7
call fcn.0040e780
add esp, 0xc
mov ecx, dword [0x418218]
mov byte [esp + 0x41c], 8
push ecx
push 0
push eax
lea ecx, [esp + 0x9c]
call fcn.00401b10
push 1
lea ecx, [esp + 0x104]
mov byte [esp + 0x420], 7
call fcn.00401d10
push 1
lea ecx, [esp + 0xf4]
mov byte [esp + 0x420], 6
call fcn.00401d10
mov byte [esp + 0x41c], 3
push 1
lea ecx, [esp + 0xc4]
jmp 0x409fca
mov edi, str.REV
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [0x418218]
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push edx
push str.REV
lea ecx, [esp + 0x6c]
call fcn.0040e1f0
test eax, eax
je 0x409fcf
push eax
lea edx, [esp + 0xe4]
push 0
push edx
lea ecx, [esp + 0x6c]
call fcn.0040dfb0
mov ecx, dword [0x418218]
mov byte [esp + 0x41c], 5
push ecx
push 0
push eax
lea ecx, [esp + 0x9c]
call fcn.00401b10
mov byte [esp + 0x41c], 3
push 1
lea ecx, [esp + 0xe4]
call fcn.00401d10
mov ecx, dword [esp + 0x40]
mov eax, dword [esp + 0x18]
inc ecx
test eax, eax
mov dword [esp + 0x40], ecx
jne 0x409c26
mov eax, dword [esp + 0x78]
mov esi, dword [esp + 0x74]
mov byte [esp + 0x41c], 2
cmp esi, eax
mov ebx, eax
je 0x40a00d
xor edi, edi
push edi
mov ecx, esi
call fcn.0040e8b0
add esi, 0x10
cmp esi, ebx
jne 0x409ffc
jmp 0x40a00f
xor edi, edi
mov edx, dword [esp + 0x74]
push edx
call fcn.0040e98e
add esp, 4
lea ecx, [esp + 0x90]
mov dword [esp + 0x74], edi
mov dword [esp + 0x78], edi
push 1
mov dword [esp + 0x80], edi
mov byte [esp + 0x420], 0
call fcn.00401d10
push 1
lea ecx, [esp + 0x64]
mov dword [esp + 0x420], 0xffffffff
call fcn.00401d10
xor ebx, ebx
cmp dword [esp + 0x14], ebx
je 0x40a8cc
mov al, byte [esp + 0x13]
sub esp, 0x10
mov ebp, esp
mov dword [esp + 0x24], esp
push 0
mov ecx, ebp
mov byte [ebp], al
call fcn.00401d10
mov edi, str._installing_driver_s__n
or ecx, 0xffffffff
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebx, ecx
mov ecx, ebp
push ebx
call fcn.00402510
test al, al
je 0x40a0bb
mov edi, dword [ebp + 4]
mov ecx, ebx
mov edx, ecx
mov esi, str._installing_driver_s__n
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
push ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, ebp
call fcn.004024f0
call fcn.00405060
mov eax, dword [esp + 0x6c]
add esp, 0x10
cmp eax, 1
jne 0x40a2ad
mov al, byte [esp + 0x13]
push 0
lea ecx, [esp + 0x48]
mov byte [esp + 0x48], al
call fcn.00401d10
mov edi, str.ME_install:
or ecx, 0xffffffff
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebx, ecx
lea ecx, [esp + 0x48]
push ebx
call fcn.00402510
test al, al
je 0x40a127
mov edi, dword [esp + 0x48]
mov ecx, ebx
mov edx, ecx
mov esi, str.ME_install:
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
push ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x48]
call fcn.004024f0
mov ebx, dword [esp + 0x424]
or ecx, 0xffffffff
xor eax, eax
mov dword [esp + 0x41c], 0xa
lea ebp, [ebx + 0x2cc]
mov edi, ebp
mov dword [esp + 0x18], ebp
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push ebp
lea ecx, [esp + 0x4c]
call fcn.0040e4f0
mov edi, 0x41b75c
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push 0x41b75c
lea ecx, [esp + 0x4c]
call fcn.0040e4f0
add ebx, 0xcc
or ecx, 0xffffffff
mov edi, ebx
xor eax, eax
repne scasb al, byte es:[edi]
mov eax, dword [0x418218]
mov edx, dword [esp + 0x4c]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x40a1a0
call fcn.0040e999
test esi, esi
jbe 0x40a1e6
mov ecx, dword [esp + 0x4c]
push 0
lea ebp, [ecx + esi]
lea ecx, [esp + 0x48]
push ebp
call fcn.00402510
test al, al
je 0x40a1e2
mov edx, dword [esp + 0x48]
mov eax, dword [esp + 0x4c]
mov ecx, esi
mov esi, ebx
lea edi, [eax + edx]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
push ebp
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x48]
call fcn.004024f0
mov ebp, dword [esp + 0x18]
mov edi, 0x41b2a0
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [esp + 0x4c]
repne scasb al, byte es:[edi]
mov eax, dword [0x418218]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x40a20b
call fcn.0040e999
test esi, esi
jbe 0x40a257
mov eax, dword [esp + 0x4c]
push 0
add eax, esi
lea ecx, [esp + 0x48]
push eax
mov dword [esp + 0x1c], eax
call fcn.00402510
test al, al
je 0x40a257
mov ecx, dword [esp + 0x48]
mov edx, dword [esp + 0x4c]
lea edi, [edx + ecx]
mov ecx, esi
mov eax, ecx
mov esi, 0x41b2a0
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [esp + 0x14]
push ecx
lea ecx, [esp + 0x48]
call fcn.004024f0
mov dl, byte [esp + 0x44]
sub esp, 0x10
mov esi, esp
mov dword [esp + 0x24], esp
push 0
mov ecx, esi
mov byte [esi], dl
call fcn.00401d10
mov eax, dword [0x418218]
lea ecx, [esp + 0x54]
push eax
push 0
push ecx
mov ecx, esi
call fcn.00401b10
call fcn.00405060
add esp, 0x10
lea ecx, [esp + 0x44]
mov dword [esp + 0x41c], 0xffffffff
push 1
call fcn.00401d10
push ebp
push ebx
call fcn.00408310
jmp 0x40a8bf
cmp eax, 2
jne 0x40a637
mov dl, byte [esp + 0x13]
push 0
lea ecx, [esp + 0x30]
mov byte [esp + 0x30], dl
call fcn.00401d10
mov edi, str.2K_XP_install:
or ecx, 0xffffffff
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebp, ecx
lea ecx, [esp + 0x30]
push ebp
call fcn.00402510
test al, al
je 0x40a30f
mov edi, dword [esp + 0x30]
mov ecx, ebp
mov eax, ecx
mov esi, str.2K_XP_install:
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [esp + 0x30]
mov dword [esp + 0x34], ebp
mov byte [ecx + ebp], 0
mov edx, dword [esp + 0x424]
or ecx, 0xffffffff
xor eax, eax
mov dword [esp + 0x41c], 0xb
lea esi, [edx + 0x2cc]
mov edx, dword [esp + 0x34]
mov edi, esi
repne scasb al, byte es:[edi]
mov eax, dword [0x418218]
not ecx
dec ecx
sub eax, edx
mov ebp, ecx
cmp eax, ebp
ja 0x40a349
call fcn.0040e999
test ebp, ebp
jbe 0x40a389
mov ecx, dword [esp + 0x34]
push 0
lea ebx, [ecx + ebp]
lea ecx, [esp + 0x30]
push ebx
call fcn.00402510
test al, al
je 0x40a389
mov edx, dword [esp + 0x30]
mov eax, dword [esp + 0x34]
mov ecx, ebp
push ebx
lea edi, [eax + edx]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x30]
call fcn.004024f0
mov edi, 0x41b75c
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [esp + 0x34]
repne scasb al, byte es:[edi]
mov eax, dword [0x418218]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x40a3ae
call fcn.0040e999
test esi, esi
jbe 0x40a3f3
mov ecx, dword [esp + 0x34]
push 0
lea ebx, [ecx + esi]
lea ecx, [esp + 0x30]
push ebx
call fcn.00402510
test al, al
je 0x40a3f3
mov edx, dword [esp + 0x30]
mov eax, dword [esp + 0x34]
mov ecx, esi
mov esi, 0x41b75c
lea edi, [eax + edx]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
push ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x30]
call fcn.004024f0
mov eax, dword [esp + 0x424]
or ecx, 0xffffffff
mov edx, dword [esp + 0x34]
lea esi, [eax + 0xcc]
xor eax, eax
mov edi, esi
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebp, ecx
mov ecx, dword [0x418218]
sub ecx, edx
cmp ecx, ebp
ja 0x40a423
call fcn.0040e999
test ebp, ebp
jbe 0x40a463
mov edx, dword [esp + 0x34]
push 0
lea ecx, [esp + 0x30]
lea ebx, [edx + ebp]
push ebx
call fcn.00402510
test al, al
je 0x40a463
mov eax, dword [esp + 0x30]
mov ecx, dword [esp + 0x34]
push ebx
lea edi, [ecx + eax]
mov ecx, ebp
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x30]
call fcn.004024f0
mov edi, 0x41b2a0
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [esp + 0x34]
repne scasb al, byte es:[edi]
mov eax, dword [0x418218]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x40a488
call fcn.0040e999
test esi, esi
jbe 0x40a4cd
mov eax, dword [esp + 0x34]
push 0
lea ecx, [esp + 0x30]
lea ebx, [eax + esi]
push ebx
call fcn.00402510
test al, al
je 0x40a4cd
mov ecx, dword [esp + 0x30]
mov edx, dword [esp + 0x34]
push ebx
lea edi, [edx + ecx]
mov ecx, esi
mov eax, ecx
mov esi, 0x41b2a0
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x30]
call fcn.004024f0
mov cl, byte [esp + 0x2c]
sub esp, 0x10
mov esi, esp
mov dword [esp + 0x24], esp
push 0
mov byte [esi], cl
mov ecx, esi
call fcn.00401d10
mov edx, dword [0x418218]
lea eax, [esp + 0x3c]
push edx
push 0
push eax
mov ecx, esi
call fcn.00401b10
call fcn.00405060
add esp, 0x10
or ebx, 0xffffffff
lea ecx, [esp + 0x2c]
mov dword [esp + 0x41c], ebx
push 1
call fcn.00401d10
mov ecx, dword [esp + 0x428]
mov eax, dword [esp + 0x424]
push 0
push eax
mov edx, dword [ecx]
call dword [edx + 8]
mov esi, eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0x3f
xor eax, eax
lea edi, [esp + 0x211]
mov byte [esp + 0x210], 0
push edx
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
push esi
lea ecx, [esp + 0x218]
push str._2K_XP_UpdateDriver___returned:__x______GetLastError___x_n
push ecx
stosb byte es:[edi], al
call dword [sym.imp.USER32.dll_wsprintfA]
mov dl, byte [esp + 0x23]
add esp, 0x10
lea ecx, [esp + 0x80]
mov byte [esp + 0x80], dl
push 0
call fcn.00401d10
lea edi, [esp + 0x210]
mov ecx, ebx
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebp, ecx
lea ecx, [esp + 0x84]
push ebp
call fcn.00402510
test al, al
je 0x40a5d8
mov edi, dword [esp + 0x84]
mov ecx, ebp
mov eax, ecx
lea esi, [esp + 0x210]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [esp + 0x84]
mov dword [esp + 0x88], ebp
mov byte [ecx + ebp], 0
mov dl, byte [esp + 0x80]
sub esp, 0x10
mov esi, esp
mov dword [esp + 0x24], esp
push 0
mov ecx, esi
mov dword [esp + 0x430], 0xc
mov byte [esi], dl
call fcn.00401d10
mov eax, dword [0x418218]
lea ecx, [esp + 0x90]
push eax
push 0
push ecx
mov ecx, esi
call fcn.00401b10
call fcn.00405060
add esp, 0x10
lea ecx, [esp + 0x80]
mov dword [esp + 0x41c], ebx
push 1
call fcn.00401d10
jmp 0x40a8c2
cmp eax, 3
jne 0x40a8c2
mov edi, str.98_install:
or ecx, 0xffffffff
xor eax, eax
xor ebp, ebp
repne scasb al, byte es:[edi]
mov dl, byte [esp + 0x13]
mov dword [esp + 0x20], ebp
not ecx
dec ecx
mov byte [esp + 0x1c], dl
push ecx
push str.98_install:
lea ecx, [esp + 0x24]
mov dword [esp + 0x2c], ebp
mov dword [esp + 0x30], ebp
call fcn.00402330
mov eax, dword [esp + 0x424]
or ecx, 0xffffffff
mov edx, dword [esp + 0x24]
mov dword [esp + 0x41c], 0xd
lea ebx, [eax + 0x2cc]
xor eax, eax
mov edi, ebx
mov dword [esp + 0x18], ebx
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [0x418218]
sub ecx, edx
cmp ecx, esi
ja 0x40a6b3
call fcn.0040e999
cmp esi, ebp
jbe 0x40a6f7
mov edx, dword [esp + 0x24]
push 0
lea ecx, [esp + 0x20]
lea ebp, [edx + esi]
push ebp
call fcn.00402510
test al, al
je 0x40a6f7
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x24]
lea edi, [ecx + eax]
mov ecx, esi
mov edx, ecx
mov esi, ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [esp + 0x20]
mov dword [esp + 0x24], ebp
mov byte [eax + ebp], 0
mov edi, 0x41b75c
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [esp + 0x24]
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [0x418218]
sub ecx, edx
cmp ecx, esi
ja 0x40a71d
call fcn.0040e999
test esi, esi
jbe 0x40a764
mov edx, dword [esp + 0x24]
push 0
lea ecx, [esp + 0x20]
lea ebp, [edx + esi]
push ebp
call fcn.00402510
test al, al
je 0x40a764
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x24]
lea edi, [ecx + eax]
mov ecx, esi
mov edx, ecx
mov esi, 0x41b75c
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [esp + 0x20]
mov dword [esp + 0x24], ebp
mov byte [eax + ebp], 0
mov ecx, dword [esp + 0x424]
xor eax, eax
mov edx, dword [0x418218]
lea ebx, [ecx + 0xcc]
or ecx, 0xffffffff
mov edi, ebx
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [esp + 0x24]
sub edx, ecx
cmp edx, esi
ja 0x40a794
call fcn.0040e999
test esi, esi
jbe 0x40a7d8
mov eax, dword [esp + 0x24]
push 0
lea ecx, [esp + 0x20]
lea ebp, [eax + esi]
push ebp
call fcn.00402510
test al, al
je 0x40a7d8
mov ecx, dword [esp + 0x20]
mov edx, dword [esp + 0x24]
lea edi, [edx + ecx]
mov ecx, esi
mov eax, ecx
mov esi, ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [esp + 0x20]
mov dword [esp + 0x24], ebp
mov byte [ecx + ebp], 0
mov edi, 0x41b2a0
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [esp + 0x24]
repne scasb al, byte es:[edi]
mov eax, dword [0x418218]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x40a7fd
call fcn.0040e999
test esi, esi
jbe 0x40a844
mov edx, dword [esp + 0x24]
push 0
lea ecx, [esp + 0x20]
lea ebp, [edx + esi]
push ebp
call fcn.00402510
test al, al
je 0x40a844
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x24]
lea edi, [ecx + eax]
mov ecx, esi
mov edx, ecx
mov esi, 0x41b2a0
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [esp + 0x20]
mov dword [esp + 0x24], ebp
mov byte [eax + ebp], 0
mov cl, byte [esp + 0x1c]
sub esp, 0x10
mov esi, esp
xor edi, edi
mov dword [esp + 0x24], esp
push edi
mov byte [esi], cl
mov ecx, esi
call fcn.00401d10
mov edx, dword [0x418218]
lea eax, [esp + 0x2c]
push edx
push edi
push eax
mov ecx, esi
call fcn.00401b10
call fcn.00405060
mov ecx, dword [esp + 0x30]
add esp, 0x10
cmp ecx, edi
mov dword [esp + 0x41c], 0xffffffff
je 0x40a8a8
mov al, byte [ecx - 1]
test al, al
je 0x40a89e
cmp al, 0xff
je 0x40a89e
dec al
mov byte [ecx - 1], al
jmp 0x40a8a8
dec ecx
push ecx
call fcn.0040e98e
add esp, 4
mov ecx, dword [esp + 0x18]
mov dword [esp + 0x20], edi
push ecx
push ebx
mov dword [esp + 0x2c], edi
mov dword [esp + 0x30], edi
call fcn.004089b0
add esp, 8
mov dword [esp + 0x14], 0
xor ebx, ebx
mov edx, dword [esp + 0x54]
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x110]
rep stosd dword es:[edi], eax
mov ecx, 0x41
lea edi, [esp + 0x310]
push ebx
push ebx
rep stosd dword es:[edi], eax
push ebx
lea eax, [esp + 0x64]
push ebx
lea ecx, [esp + 0x120]
inc edx
push eax
push ecx
mov dword [esp + 0x6c], edx
push edx
mov edx, dword [esp + 0x58]
push edx
mov dword [esp + 0x78], 0x100
call dword [sym.imp.ADVAPI32.dll_RegEnumKeyExA]
cmp eax, 0x103
jne 0x409aa0
mov al, byte [esp + 0x13]
sub esp, 0x10
mov edx, esp
mov edi, str._finished_enumerating_registry_for_devices_n
or ecx, 0xffffffff
mov dword [esp + 0x64], esp
mov byte [edx], al
xor eax, eax
mov dword [edx + 4], ebx
mov dword [edx + 8], ebx
mov dword [edx + 0xc], ebx
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str._finished_enumerating_registry_for_devices_n
mov ecx, edx
call fcn.00402330
call fcn.00405060
mov ecx, dword [esp + 0x4c]
add esp, 0x10
push ecx
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
xor eax, eax
jmp 0x40a971
or eax, 0xffffffff
mov ecx, dword [esp + 0x414]
pop edi
pop esi
pop ebp
mov dword fs:[0], ecx
pop ebx
add esp, 0x410
ret