- Код: Выделить всё
; Основная функция вызываемая в новом потоке при копировании
Copy:
xor eax,eax ; eax <- 0
push eax ; Локальная переменная pbCancel
mov ecx,esp ; Сохраняем адрес переменной
push eax ; dwCopyFlags
push ecx ; Указатель на pbCancel
push eax ; lpData
push 0x0 ; lpProgressRoutine
push 0x0 ; lpNewFileName
push 0x0 ; lpExitingFileName
call 0x0 ; Вызов CopyFileEx
mov dword [0],eax ; Возвращаемое значение
xor eax,eax ; dwExitCode
call 0x0 ; Вызов ExitThread
; Функция обратного вызова CopyProgressRoutine
CopyProgressRoutine:
fild qword [esp+12] ; LARGE_INTEGER в вещественное число TotalBytesTransferred
fild qword [esp+4] ; LARGE_INTEGER в вещественное число TotalFileSize
fdivp ; делим на TotalFileSize
fstp dword [0] ; Сохраняем в переменную
mov eax, dword [0] ; Возвращаемое значение
ret 0x34
Вместо нулей, вписываются данные походу в процедурах LoadStaticValue - это те, которые не будут изменяться и LoadDynamicValue - это имена файлов. Использовать класс можно и один для нескольких копирований или же несколько для одновременного копирования.