⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p2kman.asm

📁 这是一个多媒体播放软件. 这是一个多媒体播放软件. 这是一个多媒体播放软件.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                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 + -