Function at 0x41b94a
Capabilities:
Check for time delay via gettickcount
Check if file exists
Copy file
Create service
Delete file
Extract resource via kernel32 functions
Get common file path
Get file attributes
Modify service
Query service status
Start service

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x67b97a
mov eax, dword fs:[0]
push eax
push ecx
mov eax, 0x1178
call fcn.006210d0
mov eax, dword [0x735064]
xor eax, ebp
mov dword [ebp - 0x14], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x10], esp
mov esi, ecx
mov dword [ebp - 0x1060], esi
mov eax, dword [ebp + 8]
push 0xf003f
push 0
mov dword [ebp - 0x105c], eax
mov eax, dword [ebp + 0xc]
push 0
mov dword [ebp - 0x1050], eax
call dword [sym.imp.ADVAPI32.dll_OpenSCManagerW]
mov ebx, eax
mov dword [ebp - 0x1058], ebx
test ebx, ebx
je 0x41bff9
push 0xf003f
lea edi, [esi + 8]
push dword [edi]
mov dword [ebp - 0x1054], edi
push ebx
call dword [sym.imp.ADVAPI32.dll_OpenServiceW]
mov esi, eax
test esi, esi
je 0x41ba35
push 7
pop ecx
xor eax, eax
lea edi, [ebp - 0x104c]
rep stosd dword es:[edi], eax
lea eax, [ebp - 0x104c]
push eax
push esi
call dword [sym.imp.ADVAPI32.dll_QueryServiceStatus]
test eax, eax
je 0x41ba2f
cmp dword [ebp - 0x1048], 4
je 0x41ba07
cmp dword [ebp - 0x1048], 3
jne 0x41ba2f
push esi
mov esi, dword [sym.imp.ADVAPI32.dll_CloseServiceHandle]
call esi
push ebx
call esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x14]
xor ecx, ebp
call fcn.00620b15
leave
ret 8
mov edi, dword [ebp - 0x1054]
lea eax, [ebp - 0x814]
mov esi, 0x400
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetTempPathW]
push edi
lea eax, [ebp - 0x106c]
push 0x6a17f4
push eax
call fcn.0041b5e5
and dword [ebp - 4], 0
push str..sys
push eax
lea eax, [ebp - 0x1068]
push eax
call fcn.0041b573
push dword [eax]
lea eax, [ebp - 0x814]
push esi
push eax
call fcn.00644e49
mov ecx, dword [ebp - 0x1068]
add esp, 0x24
lea ecx, [ecx - 0x10]
call fcn.00416499
mov ecx, dword [ebp - 0x106c]
or dword [ebp - 4], 0xffffffff
lea ecx, [ecx - 0x10]
call fcn.00416499
lea eax, [ebp - 0x814]
push eax
call dword [sym.imp.KERNEL32.dll_DeleteFileW]
mov ebx, dword [ebp - 0x105c]
test ebx, ebx
jne 0x41bad5
xor esi, esi
lea eax, [ebp - 0x814]
push esi
push eax
push dword [ebp - 0x1050]
call dword [sym.imp.KERNEL32.dll_CopyFileW]
inc ebx
jmp 0x41bc04
push dword [ebp - 0x1050]
call dword [sym.imp.KERNEL32.dll_GetModuleHandleW]
mov esi, eax
cmp esi, 0xffffffff
jne 0x41bb15
push str.Module_not_found
call fcn.0041d0cb
push eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [ebp - 0x1098]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x1098]
jmp 0x41c021
push 0xa
push ebx
push esi
call dword [sym.imp.KERNEL32.dll_FindResourceW]
mov edi, eax
test edi, edi
jne 0x41bb52
push str.Resource_not_found
call fcn.0041d0cb
push eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [ebp - 0x10ac]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x10ac]
jmp 0x41c021
push edi
push esi
call dword [sym.imp.KERNEL32.dll_SizeofResource]
push edi
push esi
mov dword [ebp - 0x105c], eax
call dword [sym.imp.KERNEL32.dll_LoadResource]
push eax
call dword [sym.imp.KERNEL32.dll_LockResource]
mov esi, eax
test esi, esi
jne 0x41bba2
push str.Could_not_lock_resource
call fcn.0041d0cb
push eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [ebp - 0x10c0]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x10c0]
jmp 0x41c021
xor ebx, ebx
lea ecx, [ebp - 0x1044]
inc ebx
mov dword [ebp - 4], ebx
call fcn.00467bbf
push 0
push 0x1001
lea eax, [ebp - 0x814]
mov byte [ebp - 4], 2
push eax
lea ecx, [ebp - 0x1044]
call fcn.004688eb
push dword [ebp - 0x105c]
lea ecx, [ebp - 0x1044]
push esi
call fcn.00468d0e
lea ecx, [ebp - 0x1044]
call fcn.004683e9
lea ecx, [ebp - 0x1044]
call fcn.00467c43
or dword [ebp - 4], 0xffffffff
xor esi, esi
mov edi, dword [ebp - 0x1054]
lea eax, [ebp - 0x814]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
jne 0x41bc3e
push str.Driver_binary_not_found
call fcn.0041d0cb
push eax
push 2
lea ecx, [ebp - 0x10d4]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x10d4]
jmp 0x41c021
lea eax, [ebp - 0x1064]
mov dword [ebp - 0x1064], esi
push eax
lea eax, [ebp - 0x814]
push eax
call dword [sym.imp.ADVAPI32.dll_FileEncryptionStatusW]
test eax, eax
je 0x41bca3
cmp dword [ebp - 0x1064], ebx
jne 0x41bca3
push esi
lea eax, [ebp - 0x814]
push eax
call dword [sym.imp.ADVAPI32.dll_DecryptFileW]
test eax, eax
jne 0x41bca3
push str.Could_not_decrypt_driver_binary
call fcn.0041d0cb
push eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [ebp - 0x10e8]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x10e8]
jmp 0x41c021
push esi
push esi
push esi
push esi
push esi
lea eax, [ebp - 0x814]
push eax
push ebx
push 3
push ebx
push 0xf003f
push dword [edi]
push dword [edi]
push dword [ebp - 0x1058]
call dword [sym.imp.ADVAPI32.dll_CreateServiceW]
mov esi, dword [sym.imp.KERNEL32.dll_GetLastError]
mov edi, eax
test edi, edi
jne 0x41bd9f
call esi
cmp eax, 0x431
jne 0x41bd76
mov eax, dword [ebp - 0x1060]
push 0xf003f
push dword [eax + 8]
push dword [ebp - 0x1058]
call dword [sym.imp.ADVAPI32.dll_OpenServiceW]
mov edi, eax
test edi, edi
jne 0x41bd2e
push str.Could_not_open_driver
call fcn.0041d0cb
push eax
call esi
push eax
lea ecx, [ebp - 0x10fc]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x10fc]
jmp 0x41c021
xor eax, eax
push eax
push eax
push eax
push eax
push eax
push eax
lea eax, [ebp - 0x814]
push eax
push 0xffffffffffffffff
push 3
push ebx
push edi
call dword [sym.imp.ADVAPI32.dll_ChangeServiceConfigW]
test eax, eax
jne 0x41bd9f
push str.Could_not_change_service_config
call fcn.0041d0cb
push eax
call esi
push eax
lea ecx, [ebp - 0x1110]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x1110]
jmp 0x41c021
push str.Could_not_install_driver
call fcn.0041d0cb
push eax
call esi
push eax
lea ecx, [ebp - 0x1124]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x1124]
jmp 0x41c021
push 0
push 0
push edi
call dword [sym.imp.ADVAPI32.dll_StartServiceW]
test eax, eax
jne 0x41be10
call esi
cmp eax, 0x420
je 0x41ba13
call fcn.0041d0cb
mov edi, eax
call esi
cmp eax, 0x37
jne 0x41bdec
push str.Driver_does_not_exist
push edi
push 2
lea ecx, [ebp - 0x1138]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x1138]
jmp 0x41c021
push str.Could_not_start_driver
push edi
call esi
push eax
lea ecx, [ebp - 0x114c]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x114c]
jmp 0x41c021
lea eax, [ebp - 0x1030]
push eax
push edi
call dword [sym.imp.ADVAPI32.dll_QueryServiceStatus]
test eax, eax
jne 0x41be4b
push str.Could_not_wait_for_driver_start
call fcn.0041d0cb
push eax
call esi
push eax
lea ecx, [ebp - 0x1160]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x1160]
jmp 0x41c021
mov esi, dword [sym.imp.KERNEL32.dll_GetTickCount]
call esi
mov ebx, dword [ebp - 0x101c]
mov dword [ebp - 0x1050], eax
jmp 0x41beb6
mov eax, dword [ebp - 0x1018]
xor edx, edx
push 0xa
pop ecx
div ecx
mov ecx, 0x3e8
cmp eax, ecx
jae 0x41be7b
mov eax, ecx
jmp 0x41be85
mov ecx, 0x2710
cmp eax, ecx
cmova eax, ecx
push eax
call dword [sym.imp.KERNEL32.dll_Sleep]
lea eax, [ebp - 0x1030]
push eax
push edi
call dword [sym.imp.ADVAPI32.dll_QueryServiceStatus]
test eax, eax
je 0x41bebf
cmp dword [ebp - 0x101c], ebx
ja 0x41be51
call esi
sub eax, dword [ebp - 0x1050]
cmp eax, dword [ebp - 0x1018]
ja 0x41bebf
cmp dword [ebp - 0x102c], 2
je 0x41be61
lea eax, [ebp - 0x814]
push eax
call dword [sym.imp.KERNEL32.dll_DeleteFileW]
cmp dword [ebp - 0x102c], 4
jne 0x41bee9
mov esi, dword [sym.imp.ADVAPI32.dll_CloseServiceHandle]
push edi
call esi
push dword [ebp - 0x1058]
jmp 0x41ba11
lea ecx, [ebp - 0x1050]
call fcn.004114f6
push dword [ebp - 0x1018]
lea eax, [ebp - 0x1050]
mov dword [ebp - 4], 6
push dword [ebp - 0x101c]
push dword [ebp - 0x1020]
push dword [ebp - 0x1024]
push dword [ebp - 0x102c]
push str.Service_not_started.__n__Current_State:__d_n__Exit_Code:__d_n__Service_Specific_Exit_Code:__d_n__Check_Point:__d_n__Wait_Hint:__d_n
push eax
call fcn.004130cd
add esp, 0x1c
lea ecx, [ebp - 0x1050]
call fcn.0041b570
push eax
lea ecx, [ebp - 0x1060]
call fcn.0041b1f0
mov ecx, eax
mov byte [ebp - 4], 7
call fcn.0041b56d
push eax
call fcn.0041d0cb
push eax
push 0x15
lea ecx, [ebp - 0x1174]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x1174]
jmp 0x41c021
push str.Could_not_open_Service_Manager
call fcn.0041d0cb
push eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [ebp - 0x1084]
call fcn.0041b447
push 0x70a820
lea eax, [ebp - 0x1084]
push eax
call fcn.00625363
int3