Function at 0x403900
Capabilities:
Check os version

Disassembly:
push 0xffffffffffffffff
push 0x4298db
mov eax, dword fs:[0]
push eax
sub esp, 0x344
mov eax, dword [0x434d68]
xor eax, esp
mov dword [esp + 0x340], eax
push ebx
push ebp
push esi
push edi
mov eax, dword [0x434d68]
xor eax, esp
push eax
lea eax, [esp + 0x358]
mov dword fs:[0], eax
mov eax, dword [esp + 0x36c]
mov edi, ecx
mov dword [esp + 0x2c], edi
mov dword [esp + 0x14], eax
call fcn.00408798
xor ecx, ecx
xor ebx, ebx
cmp eax, ebx
setne cl
cmp ecx, ebx
jne 0x403968
push 0x80004005
call fcn.00402ea0
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [esp + 0x20], eax
mov dword [esp + 0x360], ebx
xor esi, esi
xor edx, edx
cmp dword [esp + 0x374], ebx
mov dword [esp + 0x24], ebx
mov dword [esp + 0x18], ebx
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x28], ebx
je 0x4039bd
mov ecx, dword [esp + 0x378]
mov eax, dword [esp + 0x37c]
mov dword [esp + 0x18], ecx
mov ecx, dword [esp + 0x380]
mov dword [esp + 0x1c], eax
mov dword [esp + 0x28], ecx
mov ecx, 0x7fffffff
mov eax, str.http:__go.epson.com_redirect.aspx_
cmp word [eax], bx
je 0x4039dc
add eax, 2
sub ecx, 1
jne 0x4039c7
or esi, 0xffffffff
jmp 0x404237
cmp ecx, ebx
je 0x403aba
mov ebp, 0x7fffffff
sub ebp, ecx
cmp edi, ebx
je 0x403a24
cmp word [edi], bx
je 0x403a24
mov ecx, 0x7fffffff
mov eax, edi
jmp 0x403a00
cmp word [eax], bx
je 0x403a15
add eax, 2
sub ecx, 1
jne 0x403a00
or esi, 0xffffffff
jmp 0x404237
cmp ecx, ebx
je 0x403aba
mov esi, 0x7fffffff
sub esi, ecx
cmp dword [esp + 0x14], ebx
je 0x403a58
mov eax, dword [esp + 0x14]
cmp word [eax], bx
je 0x403a58
mov ecx, 0x7fffffff
cmp word [eax], bx
je 0x403a4d
add eax, 2
sub ecx, 1
jne 0x403a38
or esi, 0xffffffff
jmp 0x404237
cmp ecx, ebx
je 0x403aba
mov edx, 0x7fffffff
sub edx, ecx
mov edi, dword [esp + 0x370]
add esi, edx
add esi, ebp
lea esi, [esi + esi + 0xc8]
push esi
push 8
mov dword [edi], ebx
call dword [sym.imp.KERNEL32.dll_GetProcessHeap]
push eax
call dword [sym.imp.KERNEL32.dll_HeapAlloc]
mov ecx, eax
cmp ecx, ebx
mov dword [edi], ecx
jne 0x403a8e
mov esi, 0xfffffffe
jmp 0x404237
xor eax, eax
cmp esi, ebx
je 0x403a9c
cmp esi, 0x7fffffff
jbe 0x403aa1
mov eax, 0x80070057
cmp eax, ebx
jl 0x403aba
push str.http:__go.epson.com_redirect.aspx_
mov eax, 0x7ffffffe
mov edx, esi
call fcn.004037c0
cmp eax, ebx
je 0x403ac2
or esi, 0xffffffff
jmp 0x404237
call dword [sym.imp.KERNEL32.dll_GetUserDefaultLCID]
cmp dword [esp + 0x18], ebx
mov ebp, eax
lea edi, [esp + 0x154]
je 0x403afa
mov ecx, dword [esp + 0x18]
push ecx
push str.LGW0x_X
mov ecx, 0x80
call fcn.00403700
add esp, 8
cmp eax, ebx
je 0x403b21
or esi, 0xffffffff
jmp 0x404237
mov edx, ebp
and edx, 0x3ff
push edx
push str.LGW0x_X
mov ecx, 0x80
call fcn.00403700
add esp, 8
cmp eax, ebx
je 0x403b21
or esi, 0xffffffff
jmp 0x404237
mov ecx, dword [esp + 0x370]
mov ebx, dword [ecx]
lea eax, [esp + 0x154]
push eax
call fcn.004036c0
test eax, eax
je 0x403b43
or esi, 0xffffffff
jmp 0x404237
cmp dword [esp + 0x1c], 0
je 0x403b9a
mov edx, dword [esp + 0x1c]
push edx
push str.CNW0x_X
mov ecx, 0x80
lea edi, [esp + 0x15c]
call fcn.00403700
add esp, 8
test eax, eax
je 0x403b74
or esi, 0xffffffff
jmp 0x404237
mov ecx, dword [esp + 0x370]
mov ebx, dword [ecx]
lea eax, [esp + 0x154]
push eax
call fcn.004036c0
test eax, eax
je 0x403c14
or esi, 0xffffffff
jmp 0x404237
push str.kernel32.dll
call dword [sym.imp.KERNEL32.dll_GetModuleHandleW]
test eax, eax
je 0x403bcc
push str.GetUserGeoID
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov edi, eax
test edi, edi
je 0x403bcc
push 0
call dword [sym.imp.KERNEL32.dll_SetLastError]
push 0x10
call edi
cmp eax, 0xffffffff
jne 0x403bd8
mov ecx, ebp
call fcn.00403860
cmp eax, 0xffffffff
je 0x403c14
push eax
push str.CNW0x_X
mov ecx, 0x80
lea edi, [esp + 0x15c]
call fcn.00403700
add esp, 8
test eax, eax
je 0x403bfe
or esi, 0xffffffff
jmp 0x404237
mov eax, dword [esp + 0x370]
mov ebx, dword [eax]
lea edx, [esp + 0x154]
push edx
jmp 0x403b85
movzx ecx, byte [esp + 0x368]
push ecx
push str.CTI_d
mov ecx, 0x80
lea edi, [esp + 0x15c]
call fcn.00403700
add esp, 8
test eax, eax
jne 0x403b92
mov ebp, dword [esp + 0x370]
mov ebx, dword [ebp]
mov edx, edi
push edx
call fcn.004036c0
test eax, eax
jne 0x403b92
mov edi, dword [esp + 0x2c]
test edi, edi
je 0x403da0
cmp word [edi], ax
je 0x403da0
push str.Epson
push edi
call fcn.00412b54
add esp, 8
test eax, eax
jne 0x403cb5
push str.Epson_
push edi
call fcn.00412b54
add esp, 8
test eax, eax
jne 0x403cb5
push 0x42ef8c
push edi
call fcn.00412b54
add esp, 8
test eax, eax
jne 0x403cb5
push str.EPSON_
push edi
call fcn.00412b54
add esp, 8
test eax, eax
je 0x403ce8
mov ecx, 0x7fffffff
mov eax, str.Epson
nop
cmp word [eax], 0
je 0x403cd6
add eax, 2
sub ecx, 1
jne 0x403cc0
or esi, 0xffffffff
jmp 0x404237
test ecx, ecx
je 0x403aba
mov eax, 0x7fffffff
sub eax, ecx
lea edi, [edi + eax*2]
lea eax, [esp + 0x254]
mov ecx, eax
xor ebx, ebx
mov edx, 0x80
sub edi, ecx
lea ebx, [ebx]
lea ecx, [edx + 0x7fffff7e]
test ecx, ecx
je 0x403d20
movzx ecx, word [edi + eax]
test cx, cx
je 0x403d20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x403d00
jmp 0x403d24
test edx, edx
jne 0x403d2c
sub eax, 2
mov ebx, 0x8007007a
test ebx, ebx
mov word [eax], 0
jne 0x403b92
cmp word [esp + 0x254], bx
lea eax, [esp + 0x254]
je 0x403d64
lea ebx, [ebx]
cmp word [eax], 0x20
jne 0x403d5b
mov word [eax], 0x5f
add eax, 2
cmp word [eax], 0
jne 0x403d50
lea edx, [esp + 0x254]
push edx
push str.PRN_s
mov ecx, 0x80
lea edi, [esp + 0x15c]
call fcn.00403700
add esp, 8
test eax, eax
jne 0x403b92
mov ebx, dword [ebp]
mov eax, edi
push eax
call fcn.004036c0
test eax, eax
jne 0x403b92
lea ecx, [esp + 0x30]
push ecx
mov word [esp + 0x148], 0
mov dword [esp + 0x34], 0x114
call dword [sym.imp.KERNEL32.dll_GetVersionExW]
test eax, eax
je 0x403e39
mov eax, dword [esp + 0x40]
cmp eax, 1
jne 0x403f2b
cmp dword [esp + 0x34], 4
jne 0x403e39
mov eax, dword [esp + 0x38]
test eax, eax
je 0x403e39
cmp eax, 0xa
jne 0x403edb
lea edx, [eax - 2]
lea eax, [esp + 0x144]
mov edi, 0x42efbc
mov ecx, eax
xor ebx, ebx
sub edi, ecx
jmp 0x403e00
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [edi + eax]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x403e00
jmp 0x403e24
test edx, edx
jne 0x403e2c
sub eax, 2
mov ebx, 0x8007007a
test ebx, ebx
mov word [eax], 0
jne 0x403b92
cmp word [esp + 0x144], 0
je 0x403e80
lea edx, [esp + 0x144]
push edx
push str.OSC_s
mov ecx, 0x80
lea edi, [esp + 0x15c]
call fcn.00403700
add esp, 8
test eax, eax
jne 0x403b92
mov ebx, dword [ebp]
mov eax, edi
push eax
call fcn.004036c0
test eax, eax
jne 0x403b92
mov eax, dword [esp + 0x28]
test eax, eax
ja 0x40417a
lea eax, [esp + 0x154]
mov edi, str.WSI1
mov ecx, eax
xor ebx, ebx
mov edx, 0x80
sub edi, ecx
jmp 0x403eb0
lea ecx, [edx + 0x7fffff7e]
test ecx, ecx
je 0x40415d
movzx ecx, word [eax + edi]
test cx, cx
je 0x40415d
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x403eb0
jmp 0x404161
cmp eax, 0x5a
jne 0x403e39
lea edx, [eax - 0x52]
lea eax, [esp + 0x144]
mov edi, 0x42efc4
mov ecx, eax
xor ebx, ebx
sub edi, ecx
lea esp, [esp]
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [edi + eax]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x403f00
jmp 0x403e24
cmp eax, 2
jne 0x403e39
mov eax, dword [esp + 0x34]
cmp eax, 4
je 0x403e39
cmp eax, 5
jne 0x40403b
mov eax, dword [esp + 0x38]
test eax, eax
jne 0x403f9b
lea edx, [eax + 8]
lea eax, [esp + 0x144]
mov edi, 0x42efcc
mov ecx, eax
xor ebx, ebx
sub edi, ecx
jmp 0x403f70
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [edi + eax]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x403f70
jmp 0x403e24
cmp eax, 1
jne 0x403feb
lea edx, [eax + 7]
lea eax, [esp + 0x144]
mov edi, 0x42efd4
mov ecx, eax
xor ebx, ebx
sub edi, ecx
jmp 0x403fc0
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [edi + eax]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x403fc0
jmp 0x403e24
cmp eax, 2
jne 0x403e39
lea edx, [eax + 6]
lea eax, [esp + 0x144]
mov edi, 0x42efdc
mov ecx, eax
xor ebx, ebx
sub edi, ecx
lea esp, [esp]
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [edi + eax]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x404010
jmp 0x403e24
cmp eax, 6
jb 0x403e39
mov eax, dword [esp + 0x38]
test eax, eax
jne 0x4040cd
call fcn.00403820
xor ebx, ebx
lea ecx, [esp + 0x144]
test eax, eax
mov edx, 8
mov eax, ecx
je 0x40409b
mov edi, 0x42efe4
sub edi, ecx
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [eax + edi]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x404070
jmp 0x403e24
mov edi, 0x42efec
sub edi, ecx
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [eax + edi]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x4040a2
jmp 0x403e24
cmp eax, 1
jb 0x403e39
call fcn.00403820
xor ebx, ebx
lea ecx, [esp + 0x144]
test eax, eax
mov edx, 8
mov eax, ecx
je 0x40412b
mov edi, 0x42eff4
sub edi, ecx
jmp 0x404100
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [eax + edi]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x404100
jmp 0x403e24
mov edi, 0x42effc
sub edi, ecx
lea ecx, [edx + 0x7ffffff6]
test ecx, ecx
je 0x403e20
movzx ecx, word [eax + edi]
test cx, cx
je 0x403e20
mov word [eax], cx
add eax, 2
sub edx, 1
jne 0x404132
jmp 0x403e24
test edx, edx
jne 0x404169
sub eax, 2
mov ebx, 0x8007007a
test ebx, ebx
mov word [eax], 0
je 0x40419c
or esi, 0xffffffff
jmp 0x404237
push eax
push str.WSI_d
mov ecx, 0x80
lea edi, [esp + 0x15c]
call fcn.00403700
add esp, 8
test eax, eax
jne 0x403b92
mov ebx, dword [ebp]
lea edx, [esp + 0x154]
push edx
call fcn.004036c0
test eax, eax
jne 0x403b92
mov edi, dword [esp + 0x14]
test edi, edi
je 0x4041e7
cmp word [edi], ax
je 0x4041e7
mov ebx, dword [ebp]
push 0x42f034
call fcn.004036c0
test eax, eax
jne 0x403b92
mov ebx, dword [ebp]
push edi
call fcn.004036c0
test eax, eax
jne 0x403b92
mov edi, dword [ebp]
lea eax, [esp + 0x24]
push eax
push esi
push edi
call fcn.004010e0
test eax, eax
jne 0x403b92
push edi
lea ecx, [esp + 0x24]
push 0x42f038
push ecx
call fcn.00403390
mov edx, dword [esp + 0x2c]
push edx
mov eax, 0x439524
call fcn.00405f20
push str.GoEpson.DLL_End_r_n
mov eax, 0x439524
call fcn.00405f20
mov esi, dword [esp + 0x38]
add esp, 0x14
test esi, esi
jge 0x404257
mov eax, dword [esp + 0x370]
cmp dword [eax], 0
je 0x404257
mov ecx, eax
mov edx, dword [ecx]
push edx
push 0
call dword [sym.imp.KERNEL32.dll_GetProcessHeap]
push eax
call dword [sym.imp.KERNEL32.dll_HeapFree]
mov dword [esp + 0x360], 0xffffffff
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x404282
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, esi
mov ecx, dword [esp + 0x358]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
mov ecx, dword [esp + 0x340]
xor ecx, esp
call fcn.00412851
add esp, 0x350
ret