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

📄 vxwin.asm

📁 PNX系列设备驱动 PNX系列设备驱动
💻 ASM
📖 第 1 页 / 共 3 页
字号:
ArgVar	dwIRQHandle, DWORD
	EnterProc
	mov	eax, dwIRQHandle
	VxDCall	VPICD_Force_Default_Behavior
	mov	eax, STATUS_SUCCESS
	clc
	LeaveProc
	return
EndProc		_winVPICD_Force_Default_Behavior

;------------------------------------------------------------------------------
; FUNC	winEnable_Local_Trapping
;
; STATUS	winEnable_Local_Trapping(DWORD dwVMHandle, WORD wPort);
;------------------------------------------------------------------------------
BeginProc	_winEnable_Local_Trapping 
ArgVar	dwVMHandle, DWORD
ArgVar	wPort, WORD
	EnterProc
	push	ebx

	mov	ebx, dwVMHandle
	xor	edx,edx
	mov	dx, wPort
	VMMCall	Enable_Local_Trapping

	pop	ebx
	LeaveProc
	return
EndProc	_winEnable_Local_Trapping
;------------------------------------------------------------------------------
; FUNC	winDisable_Local_Trapping
;
; STATUS	winDisable_Local_Trapping(DWORD dwVMHandle, WORD wPort);
;------------------------------------------------------------------------------
BeginProc	_winDisable_Local_Trapping
ArgVar	dwVMHandle, DWORD
ArgVar	wPort, WORD
	EnterProc
	push	ebx

	mov	ebx, dwVMHandle
	xor	edx,edx
	mov	dx, wPort
	VMMCall	Disable_Local_Trapping

	pop	ebx
	LeaveProc
	return
EndProc	_winDisable_Local_Trapping
;------------------------------------------------------------------------------
; FUNC	winGet_Profile_String
;
; STATUS	winGet_Profile_String(PBYTE lpszSeciton, PBYTE lpszResult, PBYTE *pResult);
;------------------------------------------------------------------------------
;BeginProc	_winGet_Profile_String
;ArgVar	lpszSection, DWORD
;ArgVar	lpszKey, DWORD
;ArgVar	pResult, DWORD
;	EnterProc
;	push	ebx
;	push	esi
;	push	edi
;
;	mov	esi, pResult
;	mov	edx, dword ptr [esi]
;	mov	esi, lpszSection
;	mov	edi, lpszKey
;
;	VMMCall Get_Profile_String
;	jc	winGet_Profile_String_Fail
;	mov	esi, pResult
;	mov	dword ptr [esi], edx
;	mov	eax, STATUS_SUCCESS
;	clc
;	jmp	winGet_Profile_String_Exit
;
;winGet_Profile_String_Fail:
;	mov	eax, STATUS_ERROR
;	stc
;
;winGet_Profile_String_Exit:
;	pop	edi
;	pop	esi
;	pop	ebx
;	LeaveProc
;	return
;EndProc	_winGet_Profile_String
;------------------------------------------------------------------------------
; FUNC	winGet_Profile_Boolean
;
; STATUS	winGet_Profile_Boolean(PBYTE lpszSeciton, PBYTE lpszResult, PDWORD *pResult);
;------------------------------------------------------------------------------
;BeginProc	_winGet_Profile_Boolean
;ArgVar	lpszSection, DWORD
;ArgVar	lpszKey, DWORD
;ArgVar	pResult, DWORD
;	EnterProc
;	push	ebx
;	push	esi
;	push	edi
;
;	mov	esi, pResult
;	mov	eax, dword ptr [esi]
;	mov	esi, lpszSection
;	mov	edi, lpszKey
;
;	VMMCall Get_Profile_Boolean
;	jc	winGet_Profile_Boolean_Fail
;	mov	esi, pResult
;	mov	dword ptr [esi], eax
;	mov	eax, STATUS_SUCCESS
;	clc
;	jmp	winGet_Profile_Boolean_Exit
;
;winGet_Profile_Boolean_Fail:
;	mov	eax, STATUS_ERROR
;	stc
;
;winGet_Profile_Boolean_Exit:
;	pop	edi
;	pop	esi
;	pop	ebx
;	LeaveProc
;	return
;EndProc	_winGet_Profile_Boolean
;------------------------------------------------------------------------------
; FUNC	winGet_Profile_Decimal_Int
;
; STATUS	winGet_Profile_Decimal_Int(PBYTE lpszSeciton, PBYTE lpszResult, PDWORD *pResult);
;------------------------------------------------------------------------------
;BeginProc	_winGet_Profile_Decimal_Int
;ArgVar	lpszSection, DWORD
;ArgVar	lpszKey, DWORD
;ArgVar	pResult, DWORD
;	EnterProc
;	push	ebx
;	push	esi
;	push	edi
;
;	mov	esi, pResult
;	mov	eax, dword ptr [esi]
;	mov	esi, lpszSection
;	mov	edi, lpszKey
;
;	VMMCall Get_Profile_Decimal_Int
;	jc	winGet_Profile_Decimal_Int_Fail
;	mov	esi, pResult
;	mov	dword ptr [esi], eax
;	mov	eax, STATUS_SUCCESS
;	clc
;	jmp	winGet_Profile_Decimal_Int_Exit
;
;winGet_Profile_Decimal_Int_Fail:
;	mov	eax, STATUS_ERROR
;	stc
;
;winGet_Profile_Decimal_Int_Exit:
;	pop	edi
;	pop	esi
;	pop	ebx
;	LeaveProc
;	return
;EndProc	_winGet_Profile_Decimal_Int
;------------------------------------------------------------------------------
; FUNC	winGet_Profile_Hex_Int
;
;BOOL winGet_Profile_Hex_Int(PBYTE lpszSeciton, PBYTE lpszKey,
;	PDWORD pdwResult);
;------------------------------------------------------------------------------
BeginProc	_winGet_Profile_Hex_Int
ArgVar	lpszSection, DWORD
ArgVar	lpszKey, DWORD
ArgVar	pResult, DWORD
	EnterProc
	push	ebx
	push	esi
	push	edi

	mov	esi, pResult
	mov	eax, dword ptr [esi]
	mov	esi, lpszSection
	mov	edi, lpszKey

	VMMCall Get_Profile_Hex_Int
	jc	winGet_Profile_Hex_Int_Fail

	mov	esi, pResult
	mov	dword ptr [esi], eax
	mov	eax, 1
	clc
	jmp	winGet_Profile_Hex_Int_Exit

winGet_Profile_Hex_Int_Fail:
	xor	eax, eax
	stc

winGet_Profile_Hex_Int_Exit:
	pop	edi
	pop	esi
	pop	ebx
	LeaveProc
	return
EndProc	_winGet_Profile_Hex_Int

;------------------------------------------------------------------------------
; FUNC	winGet_VMM_Version
;
; STATUS	winGet_VMM_Version(PWORD pwVersion);
;------------------------------------------------------------------------------
BeginProc	_winGet_VMM_Version
ArgVar	pwVersion, DWORD
	EnterProc
	push	esi

	VMMCall	Get_VMM_Version
	mov	esi, pwVersion
	mov	word ptr [esi], ax
	clc

	pop	esi
	LeaveProc
	return
EndProc	_winGet_VMM_Version


;------------------------------------------------------------------------------
; FUNC  winVDMAD_Scatter_Lock
;
; STATUS    winVDMAD_Scatter_Lock(DWORD dwVM, BYTE bFlags, DWORD pEDDS );
;------------------------------------------------------------------------------
BeginProc   _winVDMAD_Scatter_Lock
ArgVar	dwVM, DWORD
ArgVar	bFlags, BYTE
ArgVar	pEDDS, DWORD
	EnterProc
	mov		ebx, dwVM
	mov		al, bFlags
	mov		edi, pEDDS
	VxDCall	VDMAD_Scatter_Lock
	jc		winVDMAD_Scatter_Lock_Fail
	mov		eax, STATUS_SUCCESS 
	jmp		winVDMAD_Scatter_Lock_Exit

winVDMAD_Scatter_Lock_Fail :
	mov		eax, STATUS_ERROR

winVDMAD_Scatter_Lock_Exit :
	LeaveProc
	return 
EndProc   _winVDMAD_Scatter_Lock

;------------------------------------------------------------------------------
; FUNC  winVDMAD_Scatter_Unlock
;
; STATUS    winVDMAD_Scatter_Unlock(DWORD dwVM, BYTE bFlags, DWORD pEDDS );
;------------------------------------------------------------------------------
BeginProc   _winVDMAD_Scatter_Unlock
ArgVar	dwVM, DWORD
ArgVar	bFlags, BYTE
ArgVar	pEDDS, DWORD
	EnterProc
	mov		ebx, dwVM
	mov		al, bFlags
	mov		edi, pEDDS
	VxDCall	VDMAD_Scatter_Unlock
	jc		winVDMAD_Scatter_Unlock_Fail
	mov		eax, STATUS_SUCCESS 
	jmp		winVDMAD_Scatter_Unlock_Exit

winVDMAD_Scatter_Unlock_Fail :
	mov		eax, STATUS_ERROR

winVDMAD_Scatter_Unlock_Exit :
	LeaveProc
	return 
EndProc   _winVDMAD_Scatter_Unlock



;------------------------------------------------------------------------------
; FUNC	winList_Allocate
;
; STATUS	winList_Allocate ( DWORD dwListHandle, PDWORD pNode);
;------------------------------------------------------------------------------
BeginProc	_winList_Allocate
ArgVar	dwListHandle, DWORD
ArgVar	pNode,	DWORD
	EnterProc
	push	esi

	;TRC940902 - The pager might need to move memory around during
	;allocation, so it bad to disable interrupts during
	;allocation/dellocation.
	pushfd
	cli

	mov	esi, dwListHandle
	VMMCall	List_Allocate
	jc	winList_Allocate_Fail
	popfd
	mov	esi, pNode
	mov	[esi],eax
	mov	eax, STATUS_SUCCESS
	clc
	jmp	winList_Allocate_Exit
winList_Allocate_Fail:
	popfd
	mov	eax, STATUS_ERROR
	stc

winList_Allocate_Exit:
	pop	esi
	LeaveProc
	return
EndProc		_winList_Allocate

;------------------------------------------------------------------------------
; FUNC	winList_Attach_Tail
;
; STATUS	winList_Attach_Tail ( DWORD dwListHandle, DWORD dwNode);
;------------------------------------------------------------------------------
BeginProc	_winList_Attach_Tail
ArgVar	dwListHandle, DWORD
ArgVar	dwNode,	DWORD
	EnterProc
	push	esi

	pushfd
	cli
	mov	esi, dwListHandle
	mov	eax, dwNode
	VMMCall	List_Attach_Tail
	popfd

	pop	esi
	LeaveProc
	return
EndProc		_winList_Attach_Tail

;------------------------------------------------------------------------------
; FUNC	winList_Create
;
; STATUS	winList_Create ( DWORD dwNodeSize, PDWORD pNode);
;------------------------------------------------------------------------------
BeginProc	_winList_Create
ArgVar	dwNodeSize,	DWORD
ArgVar	pNode, 		DWORD
	EnterProc
	push	ebx
	push	ecx

	Assert_Ints_Enabled
	mov	ecx, dwNodeSize
	mov	eax, LF_Alloc_Error + LF_Async
	VMMCall	List_Create
	jc	winList_Create_Fail
	mov	ebx, pNode
	mov	[ebx], esi
	mov	eax, STATUS_SUCCESS
	clc
	jmp	winList_Create_Exit

winList_Create_Fail:
	mov	eax, STATUS_ERROR
	stc

winList_Create_Exit:
	pop	ecx
	pop	ebx
	LeaveProc
	return
EndProc		_winList_Create

;------------------------------------------------------------------------------
; FUNC	winList_Destroy
;
; STATUS	winList_Destroy ( DWORD dwListHandle );
;------------------------------------------------------------------------------
BeginProc	_winList_Destroy
ArgVar	dwListHandle, DWORD
	EnterProc
	push	esi

	mov	esi, dwListHandle
	VMMCall	List_Destroy

	pop	esi
	LeaveProc
	return
EndProc		_winList_Destroy

;------------------------------------------------------------------------------
; FUNC	winList_Get_First
;
; STATUS	winList_Get_First ( DWORD dwListHandle, PDWORD pNode);
;------------------------------------------------------------------------------
BeginProc	_winList_Get_First
ArgVar	dwListHandle, DWORD
ArgVar	pNode,	DWORD
	EnterProc
	push	esi

	pushfd
	cli
	mov	esi, dwListHandle
	VMMCall	List_Get_First
	jz	winList_Get_First_Fail
	popfd
	mov	esi, pNode
	mov	[esi], eax
	mov	eax, STATUS_SUCCESS
	clc
	jmp	winList_Get_First_Exit

winList_Get_First_Fail:
	popfd
	mov	eax, STATUS_ERROR
	stc

winList_Get_First_Exit:
	pop	esi
	LeaveProc
	return
EndProc		_winList_Get_First

;------------------------------------------------------------------------------
; FUNC	winList_Get_Next
;
; STATUS	winList_Get_Next ( DWORD dwListHandle, PDWORD pNode);
;------------------------------------------------------------------------------
BeginProc	_winList_Get_Next
ArgVar	dwListHandle, DWORD
ArgVar	pNode,	DWORD
	EnterProc
	push	esi

	pushfd
	cli
	mov	esi, pNode
	mov	eax, [esi]
	mov	esi, dwListHandle
	VMMCall	List_Get_Next
	jz	winList_Get_Next_Fail
	popfd
	mov	esi, pNode
	mov	[esi], eax
	mov	eax, STATUS_SUCCESS
	clc
	jmp	winList_Get_Next_Exit

winList_Get_Next_Fail:
	popfd
	mov	eax, STATUS_ERROR
	stc

winList_Get_Next_Exit:
	pop	esi
	LeaveProc
	return
EndProc		_winList_Get_Next

;------------------------------------------------------------------------------
; FUNC	winList_Deallocate
;
; STATUS	winList_Deallocate ( DWORD dwListHandle, DWORD dwNode);
;------------------------------------------------------------------------------
BeginProc	_winList_Deallocate
ArgVar	dwListHandle, DWORD
ArgVar	dwNode,	DWORD
	EnterProc
	push	esi

	pushfd
	cli
	mov	esi, dwListHandle
	mov	eax, dwNode
	VMMCall	List_Deallocate
	popfd

	pop	esi
	LeaveProc
	return
EndProc		_winList_Deallocate

;------------------------------------------------------------------------------
; FUNC	winList_Remove
;
; STATUS	winList_Remove ( DWORD dwListHandle, DWORD dwNode);
;------------------------------------------------------------------------------
BeginProc	_winList_Remove
ArgVar	dwListHandle, DWORD
ArgVar	dwNode,	DWORD
	EnterProc
	push	esi

	pushfd
	cli
	mov	esi, dwListHandle
	mov	eax, dwNode
	VMMCall	List_Remove
	popfd

	pop	esi
	LeaveProc
	return
EndProc		_winList_Remove

;------------------------------------------------------------------------------
; FUNC	winHeapAllocate
;
; PVOID	winHeapAllocate ( DWORD dwSize );
;------------------------------------------------------------------------------
BeginProc	_winHeapAllocate
ArgVar	dwSize, DWORD
	EnterProc
	push	esi

	mov		eax, dwSize
	VMMCall	_HeapAllocate	< eax, HeapZeroInit >

	pop	esi
	LeaveProc
	return
EndProc	_winHeapAllocate

;------------------------------------------------------------------------------
; FUNC	winHeapFree
;
; STATUS	winHeapFree ( DWORD dwAddress );
;------------------------------------------------------------------------------
BeginProc	_winHeapFree
ArgVar	dwAddress, DWORD
	EnterProc

	mov	eax, dwAddress
	VMMCall	_HeapFree < eax, 0>

	LeaveProc
	return
EndProc	_winHeapFree



BeginProc	_winMapPhysToLinear
ArgVar	dwPhysAddr, DWORD
ArgVar	dwBytes, DWORD
ArgVar	dwFlags, DWORD
	EnterProc
	VMMCall	_MapPhysToLinear < dwPhysAddr, dwBytes, dwFlags >
	LeaveProc
	return
EndProc _winMapPhysToLinear

BeginProc	_winSelectorMapFlat
ArgVar	dwVMHandle
ArgVar	dwSelector
ArgVar	dwFlags

⌨️ 快捷键说明

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