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

📄 vmmz.asm

📁 这是一本学习 window编程的很好的参考教材
💻 ASM
📖 第 1 页 / 共 2 页
字号:

	ret 2*4

EndCDecl Exec_VxD_Int@8

StartCDecl Hook_Device_Service@8

    push    esi

    mov     esi, [esp+12]
    mov     eax, [esp+8]

    VxDCall	Hook_Device_Service
    ;not implemented

    pop     esi
    ret     2*4
                        
EndCDecl Hook_Device_Service@8

StartCDecl System_Control@28

    pusha

    mov     edx, [esp+52]       ; Param3
    mov     edi, [esp+48]       ; Param2
    mov     esi, [esp+44]       ; Param1
    mov     ebx, [esp+40]       ; VM handle
    mov     eax, [esp+36]       ; system control msg        
    
    VxDCall	System_Control
    setnc   al                  ; Return TRUE if successful
    and     eax, 1
    push    eax

    mov     eax, [esp+64]       ; Get pointer to thread handle
    jz      @f
    mov     [eax], edi
@@:
    mov     eax, [esp+60]       ; Get pointer to HVM
    jz      @f
    mov     [eax], ebx          ; Return new VM handle
@@:

    popa
    ret     7*4
                        
EndCDecl System_Control@28

StartCDecl Simulate_IO@20

    push    ebx
    push    ebp
    push    esi
    push    edi

    mov     ebp, [esp+36]       ; address of Client_Reg_Struc
    mov     edx, [esp+32]       ; I/O port number
    mov     ecx, [esp+28]       ; type of I/O operation
    mov     ebx, [esp+24]       ; VM handle
    mov     eax, [esp+20]       ; data for output operations       
    
    VxDCall	Simulate_IO

    pop     edi
    pop     esi
    pop     ebp
    pop     ebx
    ret     5*4
                    
EndCDecl Simulate_IO@20

StartCDecl Install_Mult_IO_Handlers@4

    push    edi

    mov     edi, [esp+8]       ; points to an I/O table       
    
    VxDCall	Install_Mult_IO_Handlers
    setnc   al
    and     eax, 1

    pop     edi
    ret     1*4
                        
EndCDecl Install_Mult_IO_Handlers@4

StartCDecl Install_IO_Handler@8

    push    esi

    mov     edx, [esp+12]       ; I/O port number
    mov     esi, [esp+8]        ; points to callback procedure       
    
    VxDCall	Install_IO_Handler
    setnc   al
    and     eax, 1

    pop     esi
    ret     2*4
                        
EndCDecl Install_IO_Handler@8

StartCDecl Enable_Global_Trapping@4

    mov     edx, [esp+4]        ; I/O port number       
    
    VxDCall	Enable_Global_Trapping
    
    ret     1*4
                        
EndCDecl Enable_Global_Trapping@4

StartCDecl Enable_Local_Trapping@8

    push    ebx

    mov     edx, [esp+12]       ; I/O port number       
    mov     ebx, [esp+8]        ; VM handle

    VxDCall	Enable_Local_Trapping
    
    pop     ebx
    ret     2*4
                        
EndCDecl Enable_Local_Trapping@8

StartCDecl Disable_Global_Trapping@4

    mov     edx, [esp+4]        ; I/O port number       
    
    VxDCall	Disable_Global_Trapping
    
    ret     1*4
                        
EndCDecl Disable_Global_Trapping@4

StartCDecl Disable_Local_Trapping@8

    push    ebx

    mov     edx, [esp+12]       ; I/O port number       
    mov     ebx, [esp+8]        ; VM handle

    VxDCall	Disable_Local_Trapping
    
    pop     ebx
    ret     2*4
                        
EndCDecl Disable_Local_Trapping@8

StartCDecl Get_Profile_Decimal_Int@16

    push    esi
    push    edi
    push    ebx

    mov     eax, [esp+24]       ; points to default value
    mov     edi, [esp+20]       ; points to key name
    mov     esi, [esp+16]       ; points to section name

    VxDCall	Get_Profile_Decimal_Int

    xor     ebx, ebx            ; save return flags
    setc    bl
    setz    bh
    
    push    eax
    mov     eax, [esp+28]       ; store 'found' flags
    mov     [eax], ebx
    pop     eax

    pop     ebx
    pop     edi
    pop     esi

    ret     4*4
                        
EndCDecl Get_Profile_Decimal_Int@16

StartCDecl Get_Profile_Fixed_Point@20

    push    esi
    push    edi
    push    ebx

    mov     eax, [esp+28]       ; default
    mov     ecx, [esp+24]       ; num places
    mov     edi, [esp+20]       ; entry name
    mov     esi, [esp+16]       ; section name
        
    VxDCall	Get_Profile_Fixed_Point
    xor     ebx, ebx            ; save return flags
    setc    bl
    setz    bh
    
    push    eax
    mov     eax, [esp+28]       ; store 'found' flags
    mov     [eax], ebx
    pop     eax

    pop     ebx
    pop     edi
    pop     esi
    ret     5*4
                        
EndCDecl Get_Profile_Fixed_Point@20

StartCDecl Convert_Decimal_String@8
                
    mov     edx, [esp+4]        ; address of decimal string
    
    VxDCall	Convert_Decimal_String

    mov     ecx, eax            ; save return value in ecx
    mov     eax, [esp+8]        ; store converted value 
    mov     [eax], ecx
    mov     eax, edx            ; return pointer to end of string
    ret     2*4
                        
EndCDecl Convert_Decimal_String@8

StartCDecl Convert_Fixed_Point_String@12
                
    mov     edx, [esp+8]        ; address of fixed-point string
    mov     ecx, [esp+4]        ; no of decimal places

    VxDCall	Convert_Fixed_Point_String

    mov     ecx, eax            ; save return value in ecx
    mov     eax, [esp+12]       ; store converted value
    mov     [eax], ecx
    mov     eax, edx            ; return pointer to end of string
    ret     3*4
                        
EndCDecl Convert_Fixed_Point_String@12

StartCDecl Convert_Hex_String@8
                
    mov     edx, [esp+4]        ; address of hexadecimal string
    
    VxDCall	Convert_Hex_String

    mov     ecx, eax            ; save return value in ecx
    mov     eax, [esp+8]        ; store converted value
    mov     [eax], ecx
    mov     eax, edx            ; return pointer to end of string
    ret     2*4
                        
EndCDecl Convert_Hex_String@8

StartCDecl Convert_Boolean_String@8
                
    mov     edx, [esp+4]        ; address of Boolean string
    
    VxDCall	Convert_Boolean_String
    jc      @f

    mov     edx, eax
    and     edx, 1              ; convert -1 to 1
    mov     eax, [esp+8]        ; store boolean value
    mov     [eax], edx          
    mov     eax, 1              ; return TRUE
    ret     2*4

@@:             
    xor     eax, eax            ; not successful -return FALSE
    ret     2*4
                        
EndCDecl Convert_Boolean_String@8

StartCDecl Get_Profile_String@16

    push    ebx
    push    esi
    push    edi

    mov     edx, [esp+24]       ; default value
    mov     edi, [esp+20]       ; entry name
    mov     esi, [esp+16]       ; section name
    
    VxDCall	Get_Profile_String
    xor     ebx, ebx            ; save return flags
    setc    bl
        
    mov     eax, [esp+28]       ; store 'found' flags
    mov     [eax], ebx
    mov     eax, edx            ; return string


    pop     edi
    pop     esi
    pop     ebx
    ret     4*4
                        
EndCDecl Get_Profile_String@16

StartCDecl Get_Next_Profile_String@12

    push    edi
    push    ebx

    mov     edi, [esp+16]       ; points to keyname for entry       
    mov     edx, [esp+12]       ; points to previous entry value
    
    VxDCall	Get_Next_Profile_String
    xor     ebx, ebx            ; save return flags
    setc    bl
        
    mov     eax, [esp+28]       ; store 'found' flags
    mov     [eax], ebx
    mov     eax, edx            ; return string

    pop     ebx
    pop     edi
    ret     3*4
                        
EndCDecl Get_Next_Profile_String@12

StartCDecl OpenFile@12

    push    edi
    push    ebx

    mov     edi, [esp+16]       ; buffer to receive full path      
    mov     edx, [esp+12]       ; address of name of file to open
    
    VxDCall	OpenFile
    xor     ebx, ebx            ; save return flags
    setc    bl
        
    mov     eax, [esp+28]       ; store 'found' flags
    mov     [eax], ebx
    mov     eax, edx            ; return handle

    pop     ebx
    pop     edi
    ret     3*4
                    
EndCDecl OpenFile@12

StartCDecl Get_PSP_Segment@0

    VxDCall	Get_PSP_Segment
    ret     0*4
                        
EndCDecl Get_PSP_Segment@0

StartCDecl Set_PM_Int_Type@8

    mov     edx, [esp+8]        ; 0 if trap gate, else interrupt gate      
    mov     eax, [esp+4]        ; interrupt number
    
    VxDCall	Set_PM_Int_Type
    
    ret     2*4
                        
EndCDecl Set_PM_Int_Type@8

StartCDecl Get_Last_Updated_VM_Exec_Time@4

    push    ebx

    mov     ebx, [esp+8]        ; VM handle

    VxDCall	Get_Last_Updated_VM_Exec_Time

    pop     ebx
    ret     1*4
                        
EndCDecl Get_Last_Updated_VM_Exec_Time@4

StartCDecl Get_Name_Of_Ugly_TSR@4

    push    ebx

    VxDCall	Get_Name_Of_Ugly_TSR
    jz      @f

    mov     ecx, eax
    mov     eax, [esp+8]    ; Get pointer to TSR name
    mov     [eax], ecx      ; Store first 4 chars
    add     eax, 4
    mov     [eax], ebx      ; Store next 4 chars
    add     eax, 4
    xor     ebx, ebx
    mov     [eax], bl       ; Zero terminator

    mov     eax, 1          ; Return TRUE
    pop     ebx
    ret     1*4

@@:
    xor     eax, eax        ; Return FALSE
    pop     ebx
    ret     1*4
                    
EndCDecl Get_Name_Of_Ugly_TSR@4

StartCDecl Set_Physical_HMA_Alias@4

    push    esi
    push    edi

    mov     esi, [esp+12]       ; points to page-table entries for physical HMA alias

    VxDCall	Set_Physical_HMA_Alias
    
    pop     edi
    pop     esi
    ret     1*4
                        
EndCDecl Set_Physical_HMA_Alias@4

StartCDecl Get_Crit_Status_No_Block@8

    push    ebx

    VxDCall	Get_Crit_Status_No_Block
    setc    al
    and     eax, 1
    push    eax

    mov     eax, [esp+16]   ; Get pointer to count
    mov     [eax], ecx      ; Return count
    mov     eax, [esp+12]   ; Get pointer to VM handle
    mov     [eax], ebx      ; Return VM handle

    pop     eax
    pop     ebx
    ret     2*4
                        
EndCDecl Get_Crit_Status_No_Block@8

StartCDecl Call_When_Thread_Switched@4

    push    esi

    mov     esi, [esp+8]        ; thread switch callback

    VxDCall	Call_When_Thread_Switched
    
    pop     esi
    ret     1*4
                        
EndCDecl Call_When_Thread_Switched@4

StartCDecl Test_Cur_Thread_Handle@4

    push    edi

    mov     edi, [esp+8]        ; handle to thread

    VxDCall	Test_Cur_Thread_Handle

    setz    al
    and     eax, 1
    
    pop     edi
    ret     1*4
                        
EndCDecl Test_Cur_Thread_Handle@4

StartCDecl Get_Sys_Thread_Handle@0

    push    edi

    VxDCall	Get_Sys_Thread_Handle
    mov     eax, edi
    
    pop     edi
    ret     0*4
                        
EndCDecl Get_Sys_Thread_Handle@0

StartCDecl Test_Sys_Thread_Handle@4

    push    edi

    mov     edi, [esp+8]            ; handle to thread

    VxDCall	Test_Sys_Thread_Handle

    setz    al
    and     eax, 1
    
    pop     edi
    ret     1*4
                        
EndCDecl Test_Sys_Thread_Handle@4

StartCDecl Validate_Thread_Handle@4

    push    edi

    VxDCall	Validate_Thread_Handle

    setnc   al
    and     eax, 1
    
    pop     edi
    ret     1*4
                        
EndCDecl Validate_Thread_Handle@4

StartCDecl Get_Initial_Thread_Handle@4

    push    ebx
    push    edi

    mov     ebx, [esp+12]       ; VM handle
    VxDCall	Get_Initial_Thread_Handle
    mov     eax, edi

    pop     edi
    pop     ebx
    ret     1*4
                        
EndCDecl Get_Initial_Thread_Handle@4

StartCDecl Test_Initial_Thread_Handle@4

    push    edi

    mov     edi, [esp+8]       ; handle to thread
    VxDCall	Test_Initial_Thread_Handle
    setc    al
    and     eax, 1
        
    pop     edi
    ret     1*4
                        
EndCDecl Test_Initial_Thread_Handle@4

StartCDecl Get_Next_Thread_Handle@0

    push    edi

    VxDCall	Get_Next_Thread_Handle
    mov     eax, edi
    
    pop     edi
    ret     0*4
                        
EndCDecl Get_Next_Thread_Handle@0

StartCDecl Remove_IO_Handler@4

    mov     edx, [esp+4]        ; I/O port address
    VxDCall	Remove_IO_Handler
    setnc   al
    and     eax, 1
    
    ret     1*4
                        
EndCDecl Remove_IO_Handler@4

StartCDecl Remove_Mult_IO_Handlers@4

    push    edi

    mov     edi, [esp+8]        ; VxD I/O table
    VxDCall	Remove_Mult_IO_Handlers
    
    pop     edi
    ret     1*4
                        
EndCDecl Remove_Mult_IO_Handlers@4

StartCDecl Unhook_Device_Service@8

    push    esi

    mov     esi, [esp+8]

    VxDCall	Unhook_Device_Service
    setnc   al
    and     eax, 1


    pop     esi
    ret     2*4
                        
EndCDecl Unhook_Device_Service@8

StartCDecl Cancel_Call_When_Not_Critical@4

    push    esi

    mov     esi, [esp+8]
    VxDCall	Cancel_Call_When_Not_Critical
    setnc   al
    and     eax, 1
    
    pop     esi
    ret     1*4
                        
EndCDecl Cancel_Call_When_Not_Critical@4

StartCDecl Signal_Semaphore_No_Switch@4

    mov     eax, [esp+4]

    VxDCall	Signal_Semaphore_No_Switch
    
    ret     1*4
                        
EndCDecl Signal_Semaphore_No_Switch@4

StartCDecl Get_Crit_Status_Thread@8

    push    edi

    VxDCall	Get_Crit_Status_Thread
    setc    al
    and     eax, 1
    push    eax

    mov     eax, [esp+16]
    mov     [eax], edi      ; return thread
    mov     eax, [esp+12]    
    mov     [eax], ecx      ; return count

    pop     eax
    pop     edi
    ret     2*4
                        
EndCDecl Get_Crit_Status_Thread@8

StartCDecl Time_Slice_Sleep@4

    mov     eax, [esp+4]

    VxDCall	Time_Slice_Sleep
    setnz   al          ; return TRUE if sleep timed out
    and     eax, 1

    ret     1*4
                        
EndCDecl Time_Slice_Sleep@4

MakeCDecl _AddInstanceItem

MakeCDecl _Allocate_Device_CB_Area

MakeCDecl _Allocate_LDT_Selector

MakeCDecl _AllocateThreadDataSlot

MakeCDecl _Deallocate_Device_CB_Area

MakeCDecl _FreeThreadDataSlot

MakeCDecl _GetLastUpdatedThreadExecTime

MakeCDecl _GetThreadExecTime

MakeCDecl _ModifyPageBits

MakeCDecl _PageCommit

; Search for _TetradynePage in vxbuild.h and see comment there
StartCDecl _TetradynePageReserve
    VxDJmp _PageReserve
EndCDecl _TetradynePageReserve

StartCDecl _TetradynePageCommitPhys
    VxDJmp _PageCommitPhys
EndCDecl _TetradynePageCommitPhys

MakeCDecl _CopyPageTable

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -