Function at 0x401fd0
Capabilities:
Copy file
Get common file path
Set file attributes

Disassembly:
sub esp, 0x800
mov ecx, 0x100
xor eax, eax
push ebx
push ebp
push esi
push edi
lea edi, [esp + 0x10]
push 0x400
rep stosd dword es:[edi], eax
mov ecx, 0x100
lea edi, [esp + 0x414]
rep stosd dword es:[edi], eax
lea eax, [esp + 0x14]
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
test eax, eax
jne 0x402016
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x800
ret
cmp eax, 0x400
jbe 0x40202a
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x800
ret
lea edi, [esp + 0x10]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
add ecx, 0xfffffffe
mov al, 0x5c
cmp byte [esp + ecx + 0x10], al
je 0x40204f
test ecx, ecx
je 0x40204f
mov dl, byte [esp + ecx + 0xf]
dec ecx
cmp dl, al
jne 0x402042
mov byte [esp + ecx + 0x10], 0
call fcn.00402810
test eax, eax
lea edx, [esp + 0x10]
mov edi, str.x64_
jne 0x40206b
mov edi, str.x32_
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
push 0x400
mov ebx, ecx
mov esi, edi
or ecx, 0xffffffff
mov edi, edx
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
mov ebx, dword [esp + 0x818]
and ecx, 3
lea edx, [esp + 0x14]
rep movsb byte es:[edi], byte [esi]
mov edi, ebx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebp, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebp
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebp
lea edx, [esp + 0x14]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str..sys
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebp, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebp
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebp
lea eax, [esp + 0x414]
and ecx, 3
push eax
rep movsb byte es:[edi], byte [esi]
call dword [sym.imp.KERNEL32.dll_GetSystemDirectoryA]
test eax, eax
jne 0x40210e
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x800
ret
cmp eax, 0x400
jbe 0x402122
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x800
ret
or ecx, 0xffffffff
mov edi, str.drivers_
xor eax, eax
lea edx, [esp + 0x410]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
push 0x80
mov ebp, ecx
mov esi, edi
or ecx, 0xffffffff
mov edi, edx
repne scasb al, byte es:[edi]
mov ecx, ebp
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebp
lea edx, [esp + 0x414]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, ebx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
lea edx, [esp + 0x414]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str..sys
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
lea eax, [esp + 0x414]
and ecx, 3
push eax
rep movsb byte es:[edi], byte [esi]
call dword [sym.imp.KERNEL32.dll_SetFileAttributesA]
mov eax, dword [0x40cb74]
test eax, eax
je 0x4021e4
lea ecx, [esp + 0x410]
lea edx, [esp + 0x10]
push ecx
push edx
push str.Copy_driver_from__s_to__s_n
call fcn.00402fb0
add esp, 0xc
lea eax, [esp + 0x410]
push 0
lea ecx, [esp + 0x14]
push eax
push ecx
call dword [sym.imp.KERNEL32.dll_CopyFileA]
test eax, eax
jne 0x40220c
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
call fcn.00402a10
add esp, 4
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x800
ret