Function at 0x401c50
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push 0xffffffffffffffff
push 0x421d81
mov eax, dword fs:[0]
push eax
sub esp, 0x394
mov eax, dword [0x42c070]
xor eax, esp
mov dword [esp + 0x390], eax
push ebx
push ebp
push esi
push edi
mov eax, dword [0x42c070]
xor eax, esp
push eax
lea eax, [esp + 0x3a8]
mov dword fs:[0], eax
mov eax, dword [esp + 0x3b8]
mov ebp, dword [esp + 0x3bc]
xor ebx, ebx
mov edi, ecx
push 0x103
lea ecx, [esp + 0x91]
push ebx
push ecx
mov dword [esp + 0x20], eax
mov dword [esp + 0x3c], edi
mov dword [esp + 0x2c], ebp
mov dword [esp + 0x24], ebx
mov byte [esp + 0x98], bl
call fcn.00418e90
add esp, 0xc
push 2
push ebx
push ebx
push 0x42d0bc
mov dword [edi], 0x1c
call dword [sym.imp.SETUPAPI.dll_SetupDiGetClassDevsA]
mov esi, eax
mov dword [esp + 0x1c], esi
cmp esi, 0xffffffff
jne 0x401cfe
push str.FindCDRForHardID___SetupDiGetClassDevs_return_INVALID_HANDLE_VALUE.
call fcn.00412950
add esp, 4
or eax, esi
jmp 0x402207
push edi
push ebx
push esi
mov dword [esp + 0x38], ebx
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
je 0x4020fb
mov ebx, esi
call fcn.00401820
xor ebx, ebx
cmp eax, ebx
je 0x402312
push 0x103
push eax
lea edx, [esp + 0x94]
push 0x104
push edx
call fcn.0041464f
add esp, 0x10
push 0xd
push str.vid_12d1pid_
lea ecx, [esp + 0x40]
mov dword [esp + 0x58], 0xf
mov dword [esp + 0x54], ebx
mov byte [esp + 0x44], bl
call fcn.00407f80
mov eax, ebp
mov dword [esp + 0x3b0], ebx
lea edx, [eax + 1]
jmp 0x401d70
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x401d70
sub eax, edx
je 0x401ec0
mov eax, ebp
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x401d84
sub eax, edx
push eax
push ebp
lea eax, [esp + 0x40]
call fcn.00407630
lea eax, [esp + 0x8c]
push 0x104
push eax
call fcn.0041377b
mov eax, dword [esp + 0x44]
add esp, 8
cmp dword [esp + 0x50], 0x10
jae 0x401dbc
lea eax, [esp + 0x3c]
push eax
lea ecx, [esp + 0x90]
push ecx
call fcn.004139d0
add esp, 8
test eax, eax
je 0x4020a1
mov ebp, dword [esp + 0x20]
mov eax, ebp
mov dword [esp + 0x18], 1
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x401de6
mov esi, dword [esp + 0x14]
sub eax, edx
push eax
add esi, 0x48
push ebp
mov ecx, esi
call fcn.00407f80
cmp dword [esi + 0x18], 0x10
jb 0x401e0a
mov esi, dword [esi + 4]
jmp 0x401e0d
add esi, 4
push esi
push str.the_CDROM_PID_is__s
call fcn.00412950
mov edi, 0xf
lea eax, [esp + 0x94]
add esp, 8
mov dword [esp + 0x6c], edi
mov dword [esp + 0x68], ebx
mov byte [esp + 0x58], bl
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x401e36
sub eax, edx
push eax
lea edx, [esp + 0x90]
push edx
lea ecx, [esp + 0x5c]
call fcn.00407f80
push 5
push str.rev_
lea eax, [esp + 0x5c]
push eax
mov byte [esp + 0x3bc], 1
call fcn.004079d0
mov esi, eax
cmp esi, 0xffffffff
jne 0x402231
mov esi, 0x10
cmp dword [esp + 0x6c], esi
jb 0x401e8d
mov ecx, dword [esp + 0x58]
push ecx
call fcn.0041300c
add esp, 4
mov dword [esp + 0x3b0], 0xffffffff
mov dword [esp + 0x6c], edi
mov dword [esp + 0x68], ebx
mov byte [esp + 0x58], bl
cmp dword [esp + 0x50], esi
jb 0x4020cf
mov edx, dword [esp + 0x3c]
push edx
call fcn.0041300c
add esp, 4
jmp 0x4020cf
mov eax, dword [esp + 0x14]
mov esi, dword [eax + 0x70]
cmp esi, dword [eax + 0x74]
jbe 0x401ed1
call fcn.00414207
mov eax, dword [esp + 0x14]
mov edi, dword [eax + 0x64]
mov dword [esp + 0x28], esi
lea ebp, [esi + 0x1c]
nop
mov esi, dword [eax + 0x74]
cmp dword [eax + 0x70], esi
jbe 0x401ef1
call fcn.00414207
mov eax, dword [esp + 0x14]
mov eax, dword [eax + 0x64]
cmp edi, ebx
je 0x401efc
cmp edi, eax
je 0x401f01
call fcn.00414207
cmp dword [esp + 0x28], esi
je 0x4020a1
push 0xd
push str.vid_12d1pid_
lea ecx, [esp + 0x40]
call fcn.00407f80
cmp edi, ebx
jne 0x401fc1
call fcn.00414207
xor eax, eax
mov ecx, dword [esp + 0x28]
cmp ecx, dword [eax + 0x10]
jb 0x401f38
call fcn.00414207
push ebx
push ebp
or eax, 0xffffffff
lea esi, [esp + 0x40]
call fcn.00407540
lea edx, [esp + 0x8c]
push 0x104
push edx
call fcn.0041377b
mov eax, dword [esp + 0x44]
add esp, 8
cmp dword [esp + 0x50], 0x10
jae 0x401f6a
lea eax, [esp + 0x3c]
push eax
lea eax, [esp + 0x90]
push eax
call fcn.004139d0
add esp, 8
test eax, eax
je 0x402073
mov dword [esp + 0x18], 1
cmp edi, ebx
jne 0x401fc8
call fcn.00414207
xor eax, eax
mov ecx, dword [esp + 0x28]
cmp ecx, dword [eax + 0x10]
jb 0x401fa4
call fcn.00414207
mov esi, dword [esp + 0x14]
push 0xffffffffffffffff
push ebx
add esi, 0x48
push ebp
mov ecx, esi
call fcn.004077d0
cmp dword [esi + 0x18], 0x10
jb 0x401fcc
mov esi, dword [esi + 4]
jmp 0x401fcf
mov eax, dword [edi]
jmp 0x401f2a
mov eax, dword [edi]
jmp 0x401f96
add esi, 4
push esi
push str.the_CDROM_PID_is__s
call fcn.00412950
lea eax, [esp + 0x94]
add esp, 8
mov dword [esp + 0x88], 0xf
mov dword [esp + 0x84], ebx
mov byte [esp + 0x74], bl
lea edx, [eax + 1]
lea ecx, [ecx]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x402000
sub eax, edx
push eax
lea edx, [esp + 0x90]
push edx
lea ecx, [esp + 0x78]
call fcn.00407f80
push 5
push str.rev_
lea eax, [esp + 0x78]
push eax
mov byte [esp + 0x3bc], 2
call fcn.004079d0
mov esi, eax
cmp esi, 0xffffffff
jne 0x40210a
mov byte [esp + 0x3b0], bl
cmp dword [esp + 0x88], 0x10
jb 0x40205d
mov ecx, dword [esp + 0x74]
push ecx
call fcn.0041300c
add esp, 4
mov dword [esp + 0x88], 0xf
mov dword [esp + 0x84], ebx
mov byte [esp + 0x74], bl
cmp edi, ebx
jne 0x40209d
call fcn.00414207
xor eax, eax
mov edx, dword [esp + 0x28]
cmp edx, dword [eax + 0x10]
jb 0x40208c
call fcn.00414207
add dword [esp + 0x28], 0x38
mov eax, dword [esp + 0x14]
add ebp, 0x38
jmp 0x401ee0
mov eax, dword [edi]
jmp 0x40207e
cmp dword [esp + 0x18], 1
je 0x4021ed
mov dword [esp + 0x3b0], 0xffffffff
cmp dword [esp + 0x50], 0x10
jb 0x4020cb
mov eax, dword [esp + 0x3c]
push eax
call fcn.0041300c
add esp, 4
mov ebp, dword [esp + 0x20]
mov eax, dword [esp + 0x2c]
mov edi, dword [esp + 0x30]
mov esi, dword [esp + 0x1c]
inc eax
push edi
push eax
push esi
mov dword [esp + 0x38], eax
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
jne 0x401d13
cmp dword [esp + 0x18], ebx
jne 0x402205
push esi
call dword [sym.imp.SETUPAPI.dll_SetupDiDestroyDeviceInfoList]
or esi, 0xffffffff
jmp 0x402205
push 0x103
lea ecx, [esp + 0x199]
push ebx
push ecx
mov byte [esp + 0x1a0], bl
call fcn.00418e90
add esp, 0xc
lea edx, [esp + 0x8c]
push edx
push str.The_hardware_is__s
call fcn.00412950
lea esi, [esp + esi + 0x99]
add esp, 8
cmp esi, ebx
je 0x402183
lea eax, [esp + 0x194]
test eax, eax
je 0x402183
push 0x26
push str.the_character_is__d
call fcn.00412950
mov al, byte [esi]
add esp, 8
cmp al, 0x26
je 0x402190
lea edx, [esp + 0x194]
mov ecx, esi
sub edx, esi
cmp al, bl
je 0x402190
mov byte [edx + ecx], al
mov al, byte [ecx + 1]
inc ecx
cmp al, 0x26
jne 0x402172
jmp 0x402190
push str.strCopyTo_parameter_is_invalid
call fcn.004129d0
add esp, 4
lea eax, [esp + 0x194]
lea edx, [eax + 1]
lea ebx, [ebx]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x4021a0
sub eax, edx
push eax
lea ecx, [esp + 0x198]
push ecx
mov ecx, dword [esp + 0x1c]
add ecx, 0xac
call fcn.00407f80
lea edx, [esp + 0x194]
push edx
push str.m_strCurDevVer_is:__s
call fcn.00412950
add esp, 8
cmp dword [esp + 0x88], 0x10
jb 0x4021ed
mov eax, dword [esp + 0x74]
push eax
call fcn.0041300c
add esp, 4
cmp dword [esp + 0x50], 0x10
jb 0x402201
mov ecx, dword [esp + 0x3c]
push ecx
call fcn.0041300c
add esp, 4
mov esi, dword [esp + 0x1c]
mov eax, esi
mov ecx, dword [esp + 0x3a8]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
mov ecx, dword [esp + 0x390]
xor ecx, esp
call fcn.00413017
add esp, 0x3a0
ret 8
push 0x103
lea ecx, [esp + 0x2a1]
push ebx
push ecx
mov byte [esp + 0x2a8], bl
call fcn.00418e90
add esp, 0xc
lea edx, [esp + 0x8c]
push edx
push str.The_hardware_is__s
call fcn.00412950
lea esi, [esp + esi + 0x99]
add esp, 8
cmp esi, ebx
je 0x4022b1
lea eax, [esp + 0x29c]
test eax, eax
je 0x4022b1
push 0x26
push str.the_character_is__d
call fcn.00412950
mov al, byte [esi]
add esp, 8
cmp al, 0x26
je 0x4022be
lea edx, [esp + 0x29c]
mov ecx, esi
sub edx, esi
lea esp, [esp]
cmp al, bl
je 0x4022be
mov byte [edx + ecx], al
mov al, byte [ecx + 1]
inc ecx
cmp al, 0x26
jne 0x4022a0
jmp 0x4022be
push str.strCopyTo_parameter_is_invalid
call fcn.004129d0
add esp, 4
lea eax, [esp + 0x29c]
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x4022c8
sub eax, edx
push eax
lea ecx, [esp + 0x2a0]
push ecx
mov ecx, dword [esp + 0x1c]
add ecx, 0xac
call fcn.00407f80
lea edx, [esp + 0x29c]
push edx
push str.m_strCurDevVer_is:__s
call fcn.00412950
add esp, 8
cmp dword [esp + 0x6c], 0x10
jb 0x4021ed
mov eax, dword [esp + 0x58]
jmp 0x4021e4
push str.GetDeviceHardWareID___return_NULL
call fcn.00412950
add esp, 4
or eax, 0xffffffff
jmp 0x402207