Function at 0x40ab90
Capabilities:
Check for time delay via gettickcount
Enumerate services
Query service status
Stop service

Disassembly:
push ebx
mov ebx, esp
sub esp, 8
and esp, 0xfffffff0
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
sub esp, 0xa8
mov eax, dword [0x40d1e4]
xor eax, ebp
mov dword [ebp - 4], eax
push esi
push edi
mov edi, dword [sym.imp.KERNEL32.DLL_GetTickCount]
mov dword [ebp - 0x54], 0
call edi
push 0xf003f
push 0
push 0
mov dword [ebp - 0x60], eax
call dword [sym.imp.ADVAPI32.dll_OpenSCManagerA]
mov edx, eax
mov dword [ebp - 0x5c], edx
test edx, edx
je 0x40adc7
xor ecx, ecx
mov dword [ebp - 0x58], 0
mov dword [ebp - 0x64], ecx
jmp 0x40abf7
mov edx, dword [ebp - 0x5c]
push 0x2c
push dword [ecx + section..data]
push edx
call dword [sym.imp.ADVAPI32.dll_OpenServiceA]
mov esi, eax
mov dword [ebp - 0x6c], esi
test esi, esi
je 0x40ada3
lea eax, [ebp - 0x50]
push eax
push 0x24
lea eax, [ebp - 0x28]
push eax
push 0
push esi
call dword [sym.imp.ADVAPI32.dll_QueryServiceStatusEx]
test eax, eax
je 0x40ad98
mov eax, dword [ebp - 0x24]
cmp eax, 1
je 0x40ad98
cmp eax, 3
je 0x40ad98
lea eax, [ebp - 0x68]
push eax
lea eax, [ebp - 0x50]
push eax
push 0
push dword [ebp - 0x54]
push 1
push esi
call dword [sym.imp.ADVAPI32.dll_EnumDependentServicesA]
test eax, eax
jne 0x40ad46
call dword [sym.imp.KERNEL32.DLL_GetLastError]
cmp eax, 0xea
jne 0x40ad46
push dword [ebp - 0x50]
call fcn.0040c970
add esp, 4
mov dword [ebp - 0x54], eax
test eax, eax
je 0x40ad46
lea ecx, [ebp - 0x68]
push ecx
lea ecx, [ebp - 0x50]
push ecx
push dword [ebp - 0x50]
push eax
push 1
push esi
call dword [sym.imp.ADVAPI32.dll_EnumDependentServicesA]
test eax, eax
je 0x40ad3b
mov eax, dword [ebp - 0x54]
mov ecx, dword [ebp - 0x58]
push 0x24
movups xmm1, xmmword [ecx + eax]
movups xmm0, xmmword [ecx + eax + 0x10]
movd eax, xmm1
movups xmmword [ebp - 0x90], xmm0
push eax
push dword [ebp - 0x5c]
call dword [sym.imp.ADVAPI32.dll_OpenServiceA]
mov edi, eax
test edi, edi
je 0x40ad35
lea eax, [ebp - 0x4c]
push eax
push 1
push edi
call dword [sym.imp.ADVAPI32.dll_ControlService]
test eax, eax
je 0x40ad35
cmp dword [ebp - 0x48], 1
je 0x40ad2e
mov esi, dword [ebp - 0x60]
nop dword [eax + eax]
push dword [ebp - 0x34]
call dword [sym.imp.KERNEL32.DLL_Sleep]
lea eax, [ebp - 0x50]
push eax
push 0x24
lea eax, [ebp - 0x4c]
push eax
push 0
push edi
call dword [sym.imp.ADVAPI32.dll_QueryServiceStatusEx]
test eax, eax
je 0x40ad25
cmp dword [ebp - 0x48], 1
je 0x40ad2b
call dword [sym.imp.KERNEL32.DLL_GetTickCount]
sub eax, esi
cmp eax, 0x7530
ja 0x40ad2b
cmp dword [ebp - 0x48], 1
jne 0x40acf0
mov esi, dword [ebp - 0x6c]
push edi
call dword [sym.imp.ADVAPI32.dll_CloseServiceHandle]
mov edi, dword [sym.imp.KERNEL32.DLL_GetTickCount]
push dword [ebp - 0x54]
call fcn.0040c9a0
add esp, 4
lea eax, [ebp - 0x28]
push eax
push 1
push esi
call dword [sym.imp.ADVAPI32.dll_ControlService]
test eax, eax
je 0x40ad98
cmp dword [ebp - 0x24], 1
je 0x40ad98
nop dword [eax]
push dword [ebp - 0x10]
call dword [sym.imp.KERNEL32.DLL_Sleep]
lea eax, [ebp - 0x50]
push eax
push 0x24
lea eax, [ebp - 0x28]
push eax
push 0
push esi
call dword [sym.imp.ADVAPI32.dll_QueryServiceStatusEx]
test eax, eax
je 0x40ad98
cmp dword [ebp - 0x24], 1
je 0x40ad98
call edi
sub eax, dword [ebp - 0x60]
cmp eax, 0x7530
ja 0x40ad98
cmp dword [ebp - 0x24], 1
jne 0x40ad60
push esi
mov esi, dword [sym.imp.ADVAPI32.dll_CloseServiceHandle]
call esi
jmp 0x40ada9
mov esi, dword [sym.imp.ADVAPI32.dll_CloseServiceHandle]
mov ecx, dword [ebp - 0x64]
add dword [ebp - 0x58], 0x24
add ecx, 4
mov dword [ebp - 0x64], ecx
cmp ecx, 0xb0
jb 0x40abf4
push dword [ebp - 0x5c]
call esi
mov ecx, dword [ebp - 4]
pop edi
xor ecx, ebp
pop esi
call fcn.0040cc8c
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret