📄 p2kman.asm
字号:
push FHandle
call WriteFile
cmp eax, 0
jnz @@write_ok
push offset str_Writefile_fail
call logstat
push FHandle
call CloseHandle
call FSAC_Close
push Download_BufPtr
call GlobalFree
jmp @@exit
@@write_ok:
push FHandle
call CloseHandle
push Download_BufPtr
call GlobalFree
push offset str_ok
call logstat
jmp @@dl_next
@@no_more_sel:
cmp next_sel_item, -1
jnz @@exit
push offset str_no_files_sel
call logstat
@@exit:
popa
leave
retn 4
Download endp
Delete Proc near
arg_0 = dword ptr 8
push ebp
mov ebp, esp
pusha
mov next_sel_item, -1
@@next: ; Find selected item
; Find selected item
push 2 ; flags - search for selected item
push next_sel_item ; start from beginning
push 100Ch ; LVM_GETNEXTITEM
push 3F0h
push [ebp+arg_0]
call SendDlgItemMessageA
cmp eax, -1
je @@no_more_sel
mov next_sel_item, eax
push offset str_deleting
call logstat
mov lv_Item, 0
mov lv_SubItem, 0
mov lv_Text, offset lv_get_text
mov lv_TextMax, 105h
push offset lv_Mask
push eax
push 102Dh ; LVM_GETITEMTEXT
push 3F0h
push [ebp+arg_0]
call SendDlgItemMessageA
push offset lv_get_text
call logstat
push offset lv_get_text
push offset str_delete
push offset str_buf
call wsprintfA
add esp, 0Ch
push 4
push 0
push offset str_buf
push [ebp+arg_0]
call MessageBoxA
cmp eax,6
jnz @@cancle
push offset lv_get_text
call FSAC_delete
cmp eax, 0
jnz @@fail
push offset str_ok
call logstat
jmp @@next
@@no_more_sel:
cmp next_sel_item, -1
jnz @@exit_ok
push offset str_no_files_sel
call logstat
@@exit_ok:
cmp AutoUpd, 1
jnz @@skip_upd
push [ebp+arg_0]
call ListP2K
@@skip_upd:
@@exit:
popa
leave
retn 4
@@cancle:
push offset str_canceled
call logstat
jmp @@exit
@@fail:
push offset str_fail
call logstat
jmp @@exit
Delete endp
GetVolInfo Proc near
arg_0 = dword ptr 8
push ebp
mov ebp, esp
pusha
push offset str_FSAC_Info
call LogStat
push offset volname
call FSAC_GetVolName
test eax, eax
jz @@name_ok
push offset str_volname_fail
call logstat
jmp @@exit
@@name_ok:
push esi
push edi
mov esi,offset volname
mov edi,offset str_buf
@@loop:
lodsw
xchg al, ah
stosb
cmp al, 0
jnz @@loop
pop edi
pop esi
push offset str_volname
call logstat
push offset str_buf
call logstat
push offset crlf
call LogStat
push offset volname
call FSAC_volume_space
test eax, eax
jz @@size_ok
push offset str_volsize_fail
call logstat
jmp @@exit
@@size_ok:
push offset str_volsize
call logstat
mov eax, VolSpace
xor edx, edx
mov ecx, 400h
div ecx
push eax
push offset str_dec
push offset str_buf
call wsprintfA
add esp, 0Ch
push offset str_buf
call logstat
push offset str_kb
call logstat
@@exit:
popa
leave
retn 4
GetVolInfo endp
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; FSAC IO Section - partially unparsed
;
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
P2K_Suspend proc near
mov byte ptr Cmd_Send_Buf, 0
push offset Cmd_Recv_Size
push offset Cmd_Recv_Buf
push 1
push offset Cmd_Send_Buf
push 0036h ; SUSPEND
call P2K_SendCommand
retn
P2K_Suspend endp
P2K_Restart proc near
push offset Cmd_Recv_Size
push offset Cmd_Recv_Buf
push 0
push offset Cmd_Send_Buf
push 0022h ; RESTART
call P2K_SendCommand
retn
P2K_Restart endp
;===================FSAC IO======================
;+--------------------------------+
; Open File in P2K phone - cmd 0
FSAC_open proc near
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
push ebp
mov ebp, esp
push esi
push ebx
push ecx
mov edi, offset Cmd_Send_Buf
mov Cmd_Recv_Size, 0
mov eax, [ebp+arg_4]
xchg ah, al
rol eax, 10h
xchg ah, al
mov dword ptr [edi+04h], eax
mov dword ptr [edi+00h], 0 ; Cmd 0 - Open
push [ebp+arg_0]
call lstrlenA
cmp eax, 0
jz @@fail
mov ecx, FileList_RecSize
sub ecx, 8
cmp eax, ecx
ja @@fail
push edi
add edi, 8
mov esi, [ebp+arg_0] ; fname
xor edx, edx
@@name_cpy_loop:
mov cl, [esi+edx]
mov [edi+edx], cl
inc edx
cmp edx, eax
jl short @@name_cpy_loop
pop edi
push offset Cmd_Recv_Size
push offset Cmd_Recv_Buf
add eax, 8
push eax ; in data size - name len+8
push offset Cmd_Send_Buf
push 004Ah ; FSAC
call P2K_SendCommand
cmp eax, 0
jnz @@fail
cmp Cmd_Recv_Size, 1
jnz short @@exit
cmp byte ptr Cmd_Recv_Buf, 0
jnz short @@exit
xor eax, eax
jmp @@exit
@@fail:
mov eax, -1
@@exit:
pop ecx
pop ebx
pop esi
leave
retn 8
FSAC_open endp
;+----------------------------------+
; Read File from P2K phone - cmd 1
FSAC_read proc near
push ebp
mov ebp, esp
push ecx
push ebx
push esi
push edi
mov dword ptr Cmd_Send_Buf, 01000000h
mov eax, [ebp+arg_4] ; size
cmp eax, 0
jz @@fail
mov edi, eax
mov ebx, eax
and ebx, 3FFh ; bytes in last block
shr edi, 0Ah ; /400h - full blocks count
mov ecx, 400h ; block size
; mov Cmd_Recv_Size, ecx ; ?????
mov FSAC_Read_Bufs_Copyed, 0
mov FSAC_Read_BufPos, 0
test edi, edi
jnz @@not_below_buf ; full blocks present
xchg ah, al
rol eax, 10h
xchg ah,al
mov dword ptr Cmd_Send_Buf+04h, eax
jmp @@loop
@@not_below_buf:
mov dword ptr Cmd_Send_Buf+04h, 00040000h
@@loop:
push offset Cmd_Recv_Size
push offset Cmd_Recv_Buf
push 8
push offset Cmd_Send_Buf
push 004Ah ; FSAC
call P2K_SendCommand
cmp eax, 0
jnz @@fail
inc FSAC_Read_Bufs_Copyed ; 0 at first loop
mov ecx, Cmd_Recv_Size
xor esi, esi
test cx, cx
jbe short @@buf_copyed
mov eax, FSAC_Read_BufPos
push edi
mov edi, [ebp+arg_0]
@@buf_loop:
mov cl, byte ptr [Cmd_Recv_Buf+esi]
mov [edi+eax], cl
mov ecx, Cmd_Recv_Size
inc esi
inc eax
and ecx, 0FFFFh
cmp esi, ecx
jl short @@buf_loop
mov FSAC_Read_BufPos, eax
pop edi
@@buf_copyed:
mov edx, FSAC_Read_Bufs_Copyed
and edx, 0FFFFh
cmp edx, edi
jnz short @@skip_lastread_size
and ebx, 0FFFFh
xchg bh, bl
rol ebx, 10h
xchg bh, bl
mov dword ptr Cmd_Send_Buf+04h, ebx
@@skip_lastread_size:
mov ecx, Cmd_Recv_Size
cmp cx, 400h
jz @@loop
@@exit:
mov esi, 0
cmp cx, 1
jnz short @@exit_ok
; cmp Cmd_Recv_Buf, cl
; jnz short @@exit_ok
@@fail:
mov esi, -1
@@exit_ok:
mov eax, esi
pop edi
pop esi
pop ebx
pop ecx
leave
retn 8
FSAC_read endp
;+-----------------------------+
; Write file to Phone - cmd 2
FSAC_write proc near
arg_0 = dword ptr 8
arg_4 = dword ptr 0Ch
push ebp
mov ebp, esp
push edx
push ebx
push esi
push edi
xor esi, esi
mov dword ptr Cmd_Send_Buf+0, 02000000h ; Cmd
mov Cmd_Recv_Size, 0
mov byte ptr Cmd_Recv_Buf, 0
mov ebx, [ebp+arg_4] ; Size
@@loop1:
xor eax, eax
mov edi, [ebp+arg_0]
cmp ebx, 0
jz @@block_wr_ok
cmp ebx, 400h ; mstapi uses this buf size...
jb short @@last_block
mov edx, 400h
jmp @@loop_datacopy
@@last_block:
mov edx, ebx
@@loop_datacopy:
push edx
xchg dh, dl
rol edx, 10h
xchg dh, dl
mov dword ptr Cmd_Send_Buf+4, edx
pop edx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -