📄 cutfile.asm
字号:
;compile:ml /c /coff /Cp cutfile.asm
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
CutFile proto c:ptr,:dword
.const
MAXSIZE EQU 256
.data
AppName db "Smallwaves'asm studio!",0
FileName db MAXSIZE dup(0)
FinalName db ".000",0,0
ErrorCreate db "Error Create or open file",0
ErrorMapping db "Error Mapping",0
ErrorTooSmall db "File size is smaller than Cut size!",0
TooManyCutFiles db "Too Many cut files created!",0
.data?
hFile dd ?
hFileMapping dd ?
hFileNew dd ?
StrLength dd ?
.code
_CalNextCutName proc uses ecx
mov ecx,StrLength
xor eax,eax
mov al,FileName[ecx]
.if al=='9'
MOV AL,'0'
mov FileName[ecx],al
dec ecx
mov al,FileName[ecx]
.if al=='9'
mov al,'0'
mov FileName[ecx],al
dec ecx
mov al,FileName[ecx]
.if al=='9'
invoke MessageBox,NULL,addr TooManyCutFiles,addr AppName,MB_OK or MB_ICONWARNING
RET
.else
inc al
mov FileName[ecx],al
.endif
.else
inc al
mov FileName[ecx],al
.endif
.else
inc al
mov FileName[ecx],al
.endif
ret
_CalNextCutName endp
;********************************************************************
CutFile proc c uses ecx edx ebx, lpFilepath:ptr,CutSize:dword
LOCAL FileSize:dword
local ActualRead:dword
local pMapView:dword
local ReadSize:dword
.if CutSize!=0
invoke lstrcpy,addr FileName,lpFilepath
shl CutSize,10
invoke CreateFile,addr FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,NULL
.if eax!=INVALID_HANDLE_VALUE
MOV hFile,eax
invoke GetFileSize,eax,NULL
mov FileSize,eax
.if eax>=CutSize
.else
invoke MessageBox,NULL,addr ErrorTooSmall,addr AppName,MB_OK or MB_ICONWARNING
mov eax,FALSE
ret
.endif
invoke lstrcat,addr FileName,addr FinalName
invoke lstrlen,addr FileName
dec eax
mov StrLength,eax
.while FileSize>0
;invoke MessageBox,NULL,addr FileName,addr FileName,MB_OK
mov eax,FileSize
.if eax<=CutSize
mov CutSize,eax
xor eax,eax
.else
sub eax,CutSize
.endif
mov FileSize,eax
invoke CreateFile,addr FileName,GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_READ OR FILE_SHARE_WRITE,NULL,CREATE_ALWAYS, NULL,NULL
.if eax!=INVALID_HANDLE_VALUE
mov hFileNew,eax
invoke CreateFileMapping,hFileNew,NULL,PAGE_READWRITE ,0,CutSize,NULL
.if eax!=NULL
mov hFileMapping,eax
invoke MapViewOfFile,hFileMapping,FILE_MAP_WRITE,0,0,0
.if EAX!=NULL
mov pMapView,eax
invoke ReadFile,hFile,pMapView,CutSize,addr ActualRead,NULL
invoke UnmapViewOfFile,pMapView
.else
INVOKE MessageBox,NULL,addr AppName,addr AppName,MB_OK
.endif
invoke CloseHandle,hFileMapping
.else
invoke MessageBox,NULL,addr ErrorMapping,addr AppName,MB_OK or MB_ICONWARNING
ret
.endif
invoke CloseHandle,hFileNew
.else
invoke MessageBox,NULL,addr ErrorCreate,addr AppName,MB_OK or MB_ICONWARNING
ret
.endif
invoke _CalNextCutName
.endw
invoke CloseHandle,hFile
.else
invoke MessageBox,NULL,addr ErrorCreate,addr AppName,MB_OK or MB_ICONWARNING
.endif
.else
mov ReadSize,0
invoke lstrlen,lpFilepath
dec eax
mov StrLength,eax
sub eax,2
invoke lstrcpyn,addr FileName,lpFilepath,eax
invoke CreateFile,addr FileName,GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_READ OR FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,NULL
.if eax!=INVALID_HANDLE_VALUE
mov hFile,eax
invoke lstrcpy, addr FileName,lpFilepath
.while TRUE
invoke CreateFile,addr FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,NULL
mov hFileNew,eax
.BREAK .IF (eax==INVALID_HANDLE_VALUE )
invoke GetFileSize,hFileNew,NULL
add ReadSize,eax
invoke CloseHandle,hFileNew
;invoke MessageBox,NULL,addr FileName,addr FileName,MB_OK
invoke _CalNextCutName
.endw
invoke CreateFileMapping,hFile,NULL,PAGE_READWRITE,0,ReadSize,NULL
.if eax!=NULL
mov hFileMapping,eax
invoke MapViewOfFile,hFileMapping,FILE_MAP_WRITE,0,0,0
.if eax!=NULL
mov pMapView,eax
mov ReadSize,eax
invoke lstrcpy, addr FileName,lpFilepath
.while TRUE
invoke CreateFile,addr FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,NULL
mov hFileNew,eax
.BREAK .IF (eax==INVALID_HANDLE_VALUE )
invoke GetFileSize,hFileNew,NULL
;add ReadSize,eax
mov CutSize,eax
invoke ReadFile,hFileNew,ReadSize,CutSize,addr ActualRead,NULL
.if eax==NULL
invoke MessageBox,NULL,addr AppName,addr FileName,MB_OK
.else
.endif
invoke CloseHandle,hFileNew
mov eax,CutSize
add ReadSize,eax
;invoke MessageBox,NULL,addr FileName,addr FileName,MB_OK
invoke _CalNextCutName
.endw
invoke UnmapViewOfFile,pMapView
.else
invoke MessageBox,NULL,addr AppName,addr FileName,MB_OK
.endif
invoke CloseHandle,hFileMapping
.else
invoke MessageBox,NULL,addr ErrorMapping,addr AppName,MB_OK or MB_ICONWARNING
ret
;error mapping file
.endif
invoke CloseHandle,hFile
.else
invoke MessageBox,NULL,addr ErrorCreate,addr AppName,MB_OK or MB_ICONWARNING
.endif
.endif
mov eax,TRUE
ret
CutFile endp
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -