?? vxwin.asm
字號:
;------------------------------------------------------------------------------
; PROJECT generic
;
; FILE vxwin.asm
;
; AUTHOR Tilakraj Roy ( TRC )
;
; HISTORY 940511 TRC ( Created )
; 940827 TRC ( Catagoreised functions as locked and pageable )
; 940827 TRC ( added Hook/Unhook_Device_Service )
; 940921 TRC ( changed interrupt enabling for list functions )
;------------------------------------------------------------------------------
.386p
.xlist
include vmm.inc
include debug.inc
include shell.inc
include vpicd.inc
include vdmad.inc
include dosmgr.inc
include configmg.inc
include vtd.inc
; include mmdevldr.inc
include vwin32.inc
.list
VXD_DATA_SEG
STATUS_SUCCESS equ 0
STATUS_ERROR equ 1
VXD_DATA_ENDS
VXD_INIT_CODE_SEG
;------------------------------------------------------------------------------
; FUNC winAllocate_Device_CB_Area
;
; STATUS winAllocate_Device_CB_Area(WORD wSizeToAlocate ,PDWORD pdwDeviceCBOffset);
;
;------------------------------------------------------------------------------
BeginProc _winAllocate_Device_CB_Area
ArgVar wSizeToAllocate,WORD
ArgVar pdwDeviceCBOffset,DWORD
EnterProc
push esi
VMMCall _Allocate_Device_CB_Area,<<wSizeToAllocate>,0>
or eax,eax
jz winAllocate_Device_CB_Area_Fail
mov esi,pdwDeviceCBOffset
mov [esi],eax
mov eax,STATUS_SUCCESS
clc
jmp winAllocate_Device_CB_Area_Exit
winAllocate_Device_CB_Area_Fail:
stc
mov eax,STATUS_ERROR
winAllocate_Device_CB_Area_Exit:
pop esi
LeaveProc
return
EndProc _winAllocate_Device_CB_Area
VXD_INIT_CODE_ENDS
;------------------------------------------------------------------------------
; LOCKED CODE
;------------------------------------------------------------------------------
VXD_LOCKED_CODE_SEG
;------------------------------------------------------------------------------
; FUNC winVPICD_Phys_EOI
;
; STATUS winVPICD_Phys_EOI(DWORD dwIRQHandle);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Phys_EOI
ArgVar dwIRQHandle, DWORD
EnterProc
mov eax, dwIRQHandle
VxDCall VPICD_Phys_EOI
mov eax, STATUS_SUCCESS
clc
LeaveProc
return
EndProc _winVPICD_Phys_EOI
;------------------------------------------------------------------------------
; FUNC winVPICD_Get_Complete_Status
;
; STATUS winVPICD_Get_Complete_Status(DWORD dwIRQHandle, DWORD dwVMHandle, PDWORD pdwStatus);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Get_Complete_Status
ArgVar dwIRQHandle, DWORD
ArgVar dwVMHandle, DWORD
ArgVar pdwStatus, DWORD
EnterProc
push esi
push ebx
mov eax, dwIRQHandle
mov ebx, dwVMHandle
VxDCall VPICD_Get_Complete_Status
mov esi, pdwStatus
mov [esi], ecx
mov ax, STATUS_SUCCESS
clc
pop ebx
pop esi
LeaveProc
return
EndProc _winVPICD_Get_Complete_Status
;------------------------------------------------------------------------------
; FUNC winVPICD_Convert_Handle_To_IRQ
;
; STATUS winVPICD_Convert_Handle_To_IRQ(DWORD dwIRQHandle, PBYTE pbIrqNumber);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Convert_Handle_To_IRQ
ArgVar dwIRQHandle, DWORD
ArgVar pIRQNumber, DWORD
EnterProc
push esi
mov eax,dwIRQHandle
VxDCall VPICD_Convert_Handle_To_IRQ
mov eax,esi
mov esi,pIRQNumber
mov byte ptr [esi], al
mov eax, STATUS_SUCCESS
clc
pop esi
LeaveProc
return
EndProc _winVPICD_Convert_Handle_To_IRQ
;------------------------------------------------------------------------------
; FUNC winVPICD_Set_Int_Request
;
; STATUS winVPICD_Set_Int_Request(DWORD dwVMHandle, DWORD dwIRQHandle);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Set_Int_Request
ArgVar dwVMHandle, DWORD
ArgVar dwIRQHandle, DWORD
EnterProc
push ebx
mov eax,dwIRQHandle
mov ebx,dwVMHandle
VxDCall VPICD_Set_Int_Request
mov eax, STATUS_SUCCESS
clc
pop ebx
LeaveProc
return
EndProc _winVPICD_Set_Int_Request
;------------------------------------------------------------------------------
; FUNC winVPICD_Clear_Int_Request
;
; STATUS winVPICD_Clear_Int_Request(DWORD dwVMHandle, DWORD dwIRQHandle);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Clear_Int_Request
ArgVar dwVMHandle, DWORD
ArgVar dwIRQHandle, DWORD
EnterProc
push ebx
mov eax,dwIRQHandle
mov ebx,dwVMHandle
VxDCall VPICD_Clear_Int_Request
mov eax, STATUS_SUCCESS
clc
pop ebx
LeaveProc
return
EndProc _winVPICD_Clear_Int_Request
;------------------------------------------------------------------------------
; FUNC winVPICD_Physically_Mask
;
; STATUS winVPICD_Physically_Mask(DWORD dwIRQHandle);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Physically_Mask
ArgVar dwIRQHandle, DWORD
EnterProc
mov eax, dwIRQHandle
VxDCall VPICD_Physically_Mask
mov eax, STATUS_SUCCESS
clc
LeaveProc
return
EndProc _winVPICD_Physically_Mask
;------------------------------------------------------------------------------
; FUNC winVPICD_Physically_Unmask
;
; STATUS winVPICD_Physically_Unmask(DWORD dwIRQHandle);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Physically_Unmask
ArgVar dwIRQHandle, DWORD
EnterProc
mov eax, dwIRQHandle
VxDCall VPICD_Physically_Unmask
mov eax, STATUS_SUCCESS
clc
LeaveProc
return
EndProc _winVPICD_Physically_Unmask
;------------------------------------------------------------------------------
; FUNC winVPICD_Set_Auto_Masking
;
; STATUS winVPICD_Set_Auto_Masking(DWORD dwIRQHandle);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Set_Auto_Masking
ArgVar dwIRQHandle, DWORD
EnterProc
mov eax, dwIRQHandle
VxDCall VPICD_Set_Auto_Masking
LeaveProc
return
EndProc _winVPICD_Set_Auto_Masking
;------------------------------------------------------------------------------
; FUNC winTest_Sys_VM_Handle
;
; STATUS winTest_Sys_VM_Handle(DWORD dwVMHandle);
;------------------------------------------------------------------------------
BeginProc _winTest_Sys_VM_Handle
ArgVar dwVMHandle, DWORD
EnterProc
push ebx
mov ebx, dwVMHandle
VMMCall Test_Sys_VM_Handle
jnz winTest_Sys_VM_Handle_Fail
mov eax, STATUS_SUCCESS
clc
jmp winTest_Sys_VM_Handle_Exit
winTest_Sys_VM_Handle_Fail:
mov eax, STATUS_ERROR
stc
winTest_Sys_VM_Handle_Exit:
pop ebx
LeaveProc
return
EndProc _winTest_Sys_VM_Handle
;VXD_LOCKED_CODE_ENDS
;VXD_PAGEABLE_CODE_SEG
;------------------------------------------------------------------------------
; FUNC winDeallocate_Device_CB_Area - Win 4.0 only
;
; STATUS winDeallocate_Device_CB_Area(DWORD dwDeviceOffset);
;
;------------------------------------------------------------------------------
BeginProc _winDeallocate_Device_CB_Area
ArgVar dwDeviceOffset,DWORD
EnterProc
VMMCall _Deallocate_Device_CB_Area,<<dwDeviceOffset>,0>
or eax,eax
jz winDeallocate_Device_CB_Area_Fail
mov eax,STATUS_SUCCESS
clc
jmp winDeallocate_Device_CB_Area_Exit
winDeallocate_Device_CB_Area_Fail:
stc
mov eax,STATUS_ERROR
winDeallocate_Device_CB_Area_Exit:
LeaveProc
return
EndProc _winDeallocate_Device_CB_Area
;------------------------------------------------------------------------------
; FUNC winAllocate_GDT_Selector
;
; STATUS winAllocate_GDT_Selector(DWORD dwDescHi, DWORD dwDescLo, PWORD pSelector);
;------------------------------------------------------------------------------
BeginProc _winAllocate_GDT_Selector
ArgVar dwDescHi, DWORD
ArgVar dwDescLo, DWORD
ArgVar pSelector, DWORD
EnterProc
push esi
mov edx, dwDescHi
mov eax, dwDescLo
VMMCall _Allocate_GDT_Selector <edx,eax,0>
or eax,eax
jz winAllocate_GDT_Selector_Fail
mov esi, pSelector
mov word ptr [esi], ax
mov eax,STATUS_SUCCESS
clc
jmp winAllocate_GDT_Selector_Exit
winAllocate_GDT_Selector_Fail:
mov eax, STATUS_ERROR
stc
winAllocate_GDT_Selector_Exit:
pop esi
LeaveProc
return
EndProc _winAllocate_GDT_Selector
;------------------------------------------------------------------------------
; FUNC winFree_GDT_Selector
;
; STATUS winFree_GDT_Selector( WORD wSelector );
;------------------------------------------------------------------------------
BeginProc _winFree_GDT_Selector
ArgVar wSelector, WORD
EnterProc
movzx eax, wSelector
VMMCall _Free_GDT_Selector < eax, 0 >
LeaveProc
return
EndProc _winFree_GDT_Selector
;------------------------------------------------------------------------------
; FUNC winPageAllocate
;
; DWORD winPageAllocate(DWORD dwPages, DWORD dwType, DWORD dwVM,
; DWORD dwAlignMask, DWORD dwMinPages, DWORD dwMaxPages, PDWORD pdwPhysAddx,
; DWORD dwFlags, PDWORD pdwHandle );
;------------------------------------------------------------------------------
BeginProc _winPageAllocate
ArgVar dwPages, DWORD
ArgVar dwType, DWORD
ArgVar dwVM, DWORD
ArgVar dwAlignMask, DWORD
ArgVar dwMinPages, DWORD
ArgVar dwMaxPages, DWORD
Argvar pdwPhysAddx, DWORD
Argvar dwFlags, DWORD
ArgVar pdwHandle, DWORD
EnterProc
push edx
push esi
VMMCall _PageAllocate, <dwPages, dwType, dwVM, dwAlignMask, dwMinPages, \
dwMaxPages, pdwPhysAddx, dwFlags >
or eax, eax
jz winPageAllocate_Exit
mov esi,pdwHandle
mov [esi],edx
winPageAllocate_Exit:
pop esi
pop edx
LeaveProc
return
EndProc _winPageAllocate
;------------------------------------------------------------------------------
; FUNC winPageFree - Win 4.0 only
;
; STATUS winPageFree( DWORD dwHandle );
;------------------------------------------------------------------------------
BeginProc _winPageFree
ArgVar dwHandle, DWORD
EnterProc
mov eax, dwHandle
VMMCall _PageFree < eax, 0 >
LeaveProc
return
EndProc _winPageFree
;------------------------------------------------------------------------------
; FUNC winBuildDescriptorDWORDS
;
; STATUS winBuildDescriptorDWORDS(DWORD dwLinearAddx, DWORD dwLength, PDWORD pDescHi, PDWORD pDescLo);
;------------------------------------------------------------------------------
BeginProc _winBuildDescriptorDWORDS
ArgVar dwLinearAddx, DWORD
ArgVar dwLength, DWORD
ArgVar pDescHi, DWORD
ArgVar pDescLo, DWORD
EnterProc
push ebx
push ecx
push esi
push edi
mov edx, dwLinearAddx
mov ecx, dwLength
VMMCall _BuildDescriptorDWORDS, <edx, ecx, \
<D_PRES + D_DATA + D_W + D_SEG>, 0, 0>
or eax,eax
jz winBuildDescriptorDWORDS_Fail
mov esi,pDescLo
mov [esi],eax
mov esi,pDescHi
mov [esi],edx
mov eax, STATUS_SUCCESS
clc
jmp winBuildDescriptorDWORDS_Exit
winBuildDescriptorDWORDS_Fail:
mov eax, STATUS_ERROR
stc
winBuildDescriptorDWORDS_Exit:
pop edi
pop esi
pop ecx
pop ebx
LeaveProc
return
EndProc _winBuilddescriptorDWORDS
;------------------------------------------------------------------------------
; FUNC winInstall__IO_Handler
;
; STATUS winInstall_IO_Handler(WORD wPort, DWORD dwCallback);
;------------------------------------------------------------------------------
BeginProc _winInstall_IO_Handler
Argvar wPort, WORD
Argvar dwCallback, DWORD
EnterProc
push esi
movzx edx, wPort
mov esi, dwCallback
VMMCall Install_IO_Handler
jc winInstall_IO_Handler_Fail
mov eax,STATUS_SUCCESS
clc
jmp winInstall_IO_Handler_Exit
winInstall_IO_Handler_Fail:
mov eax,STATUS_ERROR
stc
winInstall_IO_Handler_Exit:
pop esi
LeaveProc
return
EndProc _winInstall_IO_Handler
;------------------------------------------------------------------------------
; FUNC winRemove_IO_Handler
;
; STATUS winRemove_IO_Handler ( WORD wPort );
;------------------------------------------------------------------------------
BeginProc _winRemove_IO_Handler
Argvar wPort, WORD
EnterProc
movzx edx, wPort
VMMCall Remove_IO_Handler
mov eax,STATUS_SUCCESS
clc
LeaveProc
return
EndProc _winRemove_IO_Handler
;------------------------------------------------------------------------------
; FUNC winInstall_Mult_IO_Handlers
;
; STATUS winInstall_Mult_IO_Handlers(WINIOSTRUCT pVxDIoStruct);
;------------------------------------------------------------------------------
BeginProc _winInstall_Mult_IO_Handlers
Argvar pVxDIoStruct,DWORD
EnterProc
push esi
mov esi,pVxDIoStruct
VMMCall Install_Mult_IO_Handlers
jc winInstall_Mult_IO_Handlers_Fail
mov eax,STATUS_SUCCESS
clc
jmp winInstall_Mult_IO_Handlers_Exit
winInstall_Mult_IO_Handlers_Fail:
mov eax,STATUS_ERROR
stc
winInstall_Mult_IO_Handlers_Exit:
pop esi
LeaveProc
return
EndProc _winInstall_Mult_IO_Handlers
;------------------------------------------------------------------------------
; FUNC winGet_Sys_VM_Handle
;
; DWORD winGet_Sys_VM_Handle(VOID);
;------------------------------------------------------------------------------
BeginProc _winGet_Sys_VM_Handle
EnterProc
push ebx
VMMCall Get_Sys_VM_Handle
mov eax, ebx
pop ebx
LeaveProc
return
EndProc _winGet_Sys_VM_Handle
;------------------------------------------------------------------------------
; FUNC winGet_Cur_VM_Handle
;
; DWORD winGet_Cur_VM_Handle(VOID);
;------------------------------------------------------------------------------
BeginProc _winGet_Cur_VM_Handle
EnterProc
push ebx
VMMCall Get_Cur_VM_Handle
mov eax, ebx
pop ebx
LeaveProc
return
EndProc _winGet_Cur_VM_Handle
;------------------------------------------------------------------------------
; FUNC winVPICD_Virtualize_IRQ
;
; DWORD winVPICD_Virtualize_IRQ(PVID pIRQDescriptors );
;------------------------------------------------------------------------------
BeginProc _winVPICD_Virtualize_IRQ
ArgVar pVxDIRQStruct,DWORD
EnterProc
push esi
push edi
mov edi,pVxDIRQStruct
VxDCall VPICD_Virtualize_IRQ
jc winVPICD_Virtualize_IRQ_Fail
clc
jmp winVPICD_Virtualize_IRQ_Exit
winVPICD_Virtualize_IRQ_Fail:
xor eax,eax
stc
winVPICD_Virtualize_IRQ_Exit:
pop edi
pop esi
LeaveProc
return
EndProc _winVPICD_Virtualize_IRQ
;------------------------------------------------------------------------------
; FUNC winVPICD_Force_Default_Behavior - Win 4.0 only
;
; STATUS winVPICD_Force_Default_Behavior(DWORD dwIRQHandle);
;------------------------------------------------------------------------------
BeginProc _winVPICD_Force_Default_Behavior
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -