Les dejo este código que traduje hace tiempo, lo que hace es spoofear el peso de un archivo.
$ADV-
' Unión que convierte una matriz de byte en cadena.
Unión StrAndIntToArrayByte,Str:Cadena,Bite[]:Byte
' Estructuras.
Estruc SECURITY_ATTRIBUTES, _
nLength:Entero, _
lpSecurityDescriptor:Entero, _
bInheritedHandle:Booleano
Estruc OVERLAPPED, _
Internal, _
InternalHigh, _
offset, _
OffsetHigh, _
hEvent:Entero
' APIS
Proc SetFilePointer(,:Entero,Referencia:Entero,:Entero):Entero,"Kernel32"
Proc CreateFile(Referencia:Cadena,,:Entero,Referencia:SECURITY_ATTRIBUTES,,,:Entero):Entero,"Kernel32" "CreateFileA"
Proc ReadFile(,Referencia:Entero,:Entero,Referencia:Entero,Referencia:OVERLAPPED):Booleano,"Kernel32"
Proc WriteFile(,,:Entero,Referencia:Entero,Referencia:OVERLAPPED):Booleano,"Kernel32"
Proc DeviceIoControl(hDevice:Entero,dwIoControlCode:Entero,Referencia lpInBuffer:Entero,nInBufferSize:Entero,Referencia lpOutBuffer:Entero,nOutBufferSize:Entero,Referencia lpBytesReturned:Entero,lpOverlapped:Entero):Booleano,"Kernel32.dll"
Proc GetFileSize(:Entero,Referencia:Entero):Entero,"Kernel32"
Proc CloseHandle(hObject:Entero):Booleano,"Kernel32"
Proc SetEndOfFile(hFile:Entero):Booleano,"Kernel32"
Const FSCTL_SET_SPARSE = &000900C4
Const FILE_SHARE_READ = &1, FILE_SHARE_WRITE = &2
Const GENERIC_READ = &80000000, GENERIC_WRITE = &40000000
Const OPEN_EXISTING = 3,CREATE_NEW = 1
Const INVALID_HANDLE = -1
' // Alternative Space by Yuki!
Proc Espacio(Longitud:Entero):Cadena
Var Ptr:StrAndIntToArrayByte
ReDim Ptr.Bite,Longitud
Devolver Ptr.Str
FinProc
' "VarPtr"
Proc CadPtr(Referencia lpStr:Cadena):Entero
Var @Dir:Entero
Dir@=lpStr@
Devolver Dir
FinProc
Proc FakeSize(Referencia ArchivoBase,ArchivoFinal:Cadena)
Var Origen,Destino,FSize,bReturn:Entero,Buffer:Cadena
Resultado = Verd
Origen = CreateFile(ArchivoBase,GENERIC_READ,FILE_SHARE_READ,Nulo,OPEN_EXISTING,0,0)
FSize = GetFileSize(Origen,Nulo)
Buffer = Espacio(FSize)
ReadFile(Origen, CadPtr(Buffer), FSize, 0, Nulo)
CloseHandle(Origen)
Destino = CreateFile(ArchivoFinal,GENERIC_WRITE,FILE_SHARE_WRITE,Nulo,CREATE_NEW,0,0)
WriteFile(Destino, CadPtr(Buffer), FSize, 0, Nulo)
bReturn = DeviceIoControl(Destino, FSCTL_SET_SPARSE, 0, 0, 0, 0, 0, 0)
Si bReturn = INVALID_HANDLE Entonces
Salir
FinSi
SetFilePointer(Destino,1073741824, 0, 0)
SetEndOfFile(Destino)
CloseHandle(Destino)
FinProc