Function at 0x404620
Capabilities:
Create thread
Extract resource via kernel32 functions

Disassembly:
sub esp, 0x10
push ebx
mov ebx, dword [esp + 0x20]
push ebp
push esi
push edi
mov edi, dword [esp + 0x28]
cmp edi, 0x10
ja 0x404a37
cmp edi, 0x10
je 0x4049f2
mov eax, edi
dec eax
je 0x404667
dec eax
jne 0x404aaa
push str._ScreenSaverProc__INFO:__WM_DESTROY__Detected
call fcn.00403260
add esp, 4
push 0
call dword [sym.imp.USER32.dll_PostQuitMessage]
jmp 0x404aaa
call dword [sym.imp.KERNEL32.dll_GetTickCount]
push eax
call fcn.00405662
mov ebp, dword [esp + 0x28]
add esp, 4
push ebp
call dword [sym.imp.USER32.dll_GetParent]
mov esi, eax
test esi, esi
jne 0x40468b
push 1
jmp 0x40468d
push 0
mov ecx, 0x4127c0
call fcn.00403360
push eax
call fcn.00403140
add esp, 8
push str._ScreenSaverProc__INFO:__WM_CREATE__Starting_Matrix_Code_Emulator_v1.36_build_12
call fcn.00403260
add esp, 4
call fcn.00402650
mov edi, eax
test edi, edi
jne 0x4046d7
push str._ScreenSaverProc__ERROR:__WM_CREATE__EnumScreens_returned_0
call fcn.00403260
add esp, 4
call fcn.00403230
pop edi
pop esi
pop ebp
or eax, 0xffffffff
pop ebx
add esp, 0x10
ret 0x10
mov eax, dword [edi + 4]
test eax, eax
je 0x4046eb
mov ecx, dword [edi + 8]
sub ecx, eax
sar ecx, 2
cmp ecx, 1
jae 0x40470a
push str._ScreenSaverProc__ERROR:__WM_CREATE__EnumScreens_returned_no_screens
call fcn.00403260
add esp, 4
call fcn.00403230
pop edi
pop esi
pop ebp
or eax, 0xffffffff
pop ebx
add esp, 0x10
ret 0x10
cmp dword [eax], 0
jne 0x40472e
push str._ScreenSaverProc__ERROR:__WM_CREATE__EnumScreens_returned_null_screen
call fcn.00403260
add esp, 4
call fcn.00403230
pop edi
pop esi
pop ebp
or eax, 0xffffffff
pop ebx
add esp, 0x10
ret 0x10
mov ecx, 0x4127c0
call fcn.00403410
mov eax, dword [0x4127cc]
test eax, eax
jne 0x404746
call fcn.00403230
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__All_screens_and_modes_enumerated
call fcn.00403260
add esp, 4
push str.DATAFILE
push 0x6f
push 0
call dword [sym.imp.KERNEL32.dll_FindResourceA]
push eax
push 0
call dword [sym.imp.KERNEL32.dll_LoadResource]
push eax
call dword [sym.imp.KERNEL32.dll_LockResource]
mov ebx, eax
test ebx, ebx
mov dword [esp + 0x24], ebx
jne 0x404786
push str._ScreenSaverProc__ERROR:__WM_CREATE__Unable_to_load_glyph_data_from_resource
jmp 0x404928
test esi, esi
jne 0x4047f5
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__Fullscreen_mode
call fcn.00403260
add esp, 4
mov ecx, 0x4127b8
call fcn.004030b0
mov esi, dword [edi + 4]
mov eax, dword [edi + 8]
cmp esi, eax
je 0x4047c7
mov ecx, dword [esi]
push 1
push ebp
call fcn.00401140
test al, al
je 0x4049ad
mov eax, dword [edi + 8]
add esi, 4
cmp esi, eax
jne 0x4047ab
mov esi, dword [edi + 4]
mov eax, dword [edi + 8]
cmp esi, eax
je 0x4047eb
mov ecx, dword [esi]
push ebx
call fcn.00401840
test al, al
je 0x4049ad
mov eax, dword [edi + 8]
add esi, 4
cmp esi, eax
jne 0x4047d1
push str._ScreenSaverProc__INFO:__WM_CREATE__DirectDraw_initalized_on_all_screens__starting_threads
jmp 0x4049c4
lea edx, [esp + 0x10]
push edx
push ebp
call dword [sym.imp.USER32.dll_GetWindowRect]
mov eax, dword [esp + 0x1c]
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x10]
sub eax, ecx
mov ecx, dword [esp + 0x18]
push eax
sub ecx, edx
push ecx
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__Windowed_mode__dimensions___dx_d_
call fcn.00403260
mov eax, dword [edi + 4]
add esp, 0xc
test eax, eax
je 0x4048cf
mov edx, dword [edi + 8]
sub edx, eax
sar edx, 2
cmp edx, 1
jbe 0x4048cf
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__Found_non_primary_screen__deleting
call fcn.00403260
mov esi, dword [edi + 4]
mov eax, dword [edi + 8]
add esi, 4
add esp, 4
cmp esi, eax
je 0x40489b
mov eax, dword [esi]
test eax, eax
je 0x404891
add eax, 0x10
push eax
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__Deleting_screen__s
call fcn.00403260
mov ebx, dword [esi]
add esp, 8
test ebx, ebx
je 0x404887
mov ecx, ebx
call fcn.004010a0
push ebx
call fcn.004055f7
add esp, 4
mov ebx, dword [esp + 0x24]
mov dword [esi], 0
mov eax, dword [edi + 8]
add esi, 4
cmp esi, eax
jne 0x40485a
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__Clearing_vector
call fcn.00403260
mov edx, dword [edi + 8]
mov ecx, dword [edi + 4]
mov eax, edx
add esp, 4
add ecx, 4
cmp eax, edx
je 0x4048c5
mov esi, dword [eax]
add eax, 4
mov dword [ecx], esi
add ecx, 4
cmp eax, edx
jne 0x4048b7
mov eax, dword [edi + 8]
mov dword [edi + 8], ecx
mov dword [esp + 0x24], eax
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__Overriding_size
call fcn.00403260
mov ecx, dword [edi + 4]
add esp, 4
mov esi, dword [ecx]
mov eax, dword [esi + 0xfc]
test eax, eax
jne 0x40494f
mov eax, dword [esi + 0xf8]
test eax, eax
jne 0x4048fc
push str._ScreenSaverProc__ERROR:__WM_CREATE__No_modes_found
jmp 0x404928
mov eax, dword [eax + 4]
cmp dword [eax], 0
jne 0x40490b
push str._ScreenSaverProc__ERROR:__WM_CREATE__Empty_mode_vector
jmp 0x404928
mov edx, dword [eax]
mov ecx, dword [edx + 8]
mov eax, dword [edx]
push ecx
mov ecx, dword [edx + 4]
push ecx
push eax
mov ecx, esi
call fcn.00402600
test al, al
jne 0x404942
push str._ScreenSaverProc__ERROR:__WM_CREATE__Unable_to_set_default_mode
call fcn.00403260
add esp, 4
call fcn.00404ae0
pop edi
pop esi
pop ebp
or eax, 0xffffffff
pop ebx
add esp, 0x10
ret 0x10
push str._ScreenSaverProc__INFO:__WM_CREATE__Default_mode_set
call fcn.00403260
add esp, 4
mov ecx, dword [esp + 0x18]
mov edx, dword [esp + 0x10]
sub ecx, edx
mov edx, dword [esi + 0xfc]
push str._ScreenSaverProc__GOSSIP:__WM_CREATE__Open_and_load_screen
mov dword [edx], ecx
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x18]
sub eax, ecx
mov ecx, dword [esi + 0xfc]
mov dword [ecx + 4], eax
call fcn.00403260
add esp, 4
mov ecx, esi
push 0
push ebp
call fcn.00401140
test al, al
jne 0x4049a1
call fcn.00404ae0
pop edi
pop esi
pop ebp
or eax, 0xffffffff
pop ebx
add esp, 0x10
ret 0x10
push ebx
mov ecx, esi
call fcn.00401840
test al, al
jne 0x4049bf
call fcn.00404ae0
pop edi
pop esi
pop ebp
or eax, 0xffffffff
pop ebx
add esp, 0x10
ret 0x10
push str._ScreenSaverProc__INFO:__WM_CREATE__DirectDraw_initalized_in_preview_window__starting_thread
call fcn.00403260
add esp, 4
push edi
push 0
push 0x402cb0
call fcn.00405a68
push str._ScreenSaverProc__INFO:__WM_CREATE__All_threads_started
call fcn.00403260
add esp, 0x10
xor eax, eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x10
ret 0x10
mov ecx, 0x4127b8
call fcn.00403110
test al, al
je 0x404a23
push str._ScreenSaverProc__INFO:__WM_CLOSE__Trapped
call fcn.00403260
add esp, 4
mov ecx, 0x4127b8
call fcn.004030e0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x10
ret 0x10
push str._ScreenSaverProc__INFO:__WM_CLOSE__Terminating_Matrix_Code_Emulator
call fcn.00403260
add esp, 4
call fcn.00404ae0
jmp 0x404aaa
cmp edi, 0x112
je 0x404a4e
cmp edi, 0x8000
jne 0x404aaa
push str._ScreenSaverProc__GOSSIP:__SCRM_VERIFYPW__Detected
jmp 0x404aa2
cmp ebx, 0xf170
jne 0x404aaa
mov ecx, 0x4127d8
call fcn.004030b0
push str._ScreenSaverProc__INFO:_WM_SYSCOMMAND___SC_MONITORPOWER:_Monitor_shutdown_detected__suspending_threads
call fcn.00403260
add esp, 4
mov ecx, 0x4127b8
call fcn.004030e0
mov ecx, 0x4127a0
call fcn.00403110
test al, al
jne 0x404a9d
mov esi, dword [sym.imp.KERNEL32.dll_Sleep]
push 0xa
call esi
mov ecx, 0x4127a0
call fcn.00403110
test al, al
je 0x404a8b
push str._ScreenSaverProc__INFO:_WM_SYSCOMMAND___SC_MONITORPOWER:_All_screens_suspended
call fcn.00403260
add esp, 4
mov edx, dword [esp + 0x30]
mov eax, dword [esp + 0x24]
push edx
push ebx
push edi
push eax
call fcn.00404da9
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x10
ret 0x10