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

📄 vxbuild.h

📁 这是一本学习 window编程的很好的参考教材
💻 H
📖 第 1 页 / 共 3 页
字号:
///////////////////////////////////////////////////////////////////////
// VxBuild.h
//
// Tetradyne VxBuild header.
//
// VxBuild Version 1
//
// Copyright (C) 1997-1999, Tetradyne Software Inc.
// All rights reserved.

#ifndef VXBUILD_H
#define VXBUILD_H

#ifdef __cplusplus
extern "C"
{
#endif

#define WANTVXDWRAPS
#include <basedef.h>
#undef NULL
#define NULL 0
#include <vmm.h>
#include <debug.h>
#include <vmmreg.h>
#include <vpicd.h>
#include <vwin32.h>
#include <vcomm.h>
#include <vpowerd.h>
#include <vxdldr.h>
#include <vtd.h>

// Redefine VTD_Get_Real_Time
void VXDINLINE 
Tetradyne_VTD_Get_Real_Time(PULONG pnHigh, PULONG pnLow)
{
	VxDCall(VTD_Get_Real_Time)
	_asm mov ecx, eax
	_asm mov eax, [pnHigh]
	_asm mov [eax], edx
	_asm mov eax, [pnLow]
	_asm mov [eax], ecx
}

#include <vxdwraps.h>

#undef VTD_Get_Real_Time
#define VTD_Get_Real_Time Tetradyne_VTD_Get_Real_Time

#include <stdarg.h>
#include <configmg.h>
#include <regstr.h>
#include <string.h>
#include <vdmad.h>

///////////////////////////////////////////////////////////////////////
// Intrinsic routines

#pragma intrinsic(memcmp, memcpy, memset, strcat, strcmp, strcpy, strlen)

///////////////////////////////////////////////////////////////////////
// Typedefs

typedef struct
{
	ULONG EDI;
	ULONG ESI;
	ULONG EBP;
	ULONG ESP;
	ULONG EBX;
	ULONG EDX;
	ULONG ECX;
	ULONG EAX;
	ULONG Flags;

} REGISTERS, *PREGISTERS;

///////////////////////////////////////////////////////////////////////
// CTL_CODE macro

#ifndef CTL_CODE

#define FILE_DEVICE_UNKNOWN             0x00000022

#define METHOD_BUFFERED                 0
#define METHOD_IN_DIRECT                1
#define METHOD_OUT_DIRECT               2
#define METHOD_NEITHER                  3
#define FILE_ANY_ACCESS                 0

#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)

#endif // ifndef CTL_CODE

///////////////////////////////////////////////////////////////////////
// Various defines

#define PROFILE_NOT_FOUND	0x01
#define PROFILE_NO_VALUE	0x10

///////////////////////////////////////////////////////////////////////
// DECLARE_VIRTUAL_DEVICE_xxx macros
//
// Defines the Device Desciptor Block (DDB) for the VxD.

#define DDB_DDK_VERSION 0x400
#define DDB_DEVICE_ID	UNDEFINED_DEVICE_ID
#define DDB_MAJOR_VER	1
#define DDB_MINOR_VER	0
#define DDB_INIT_ORDER	UNDEFINED_INIT_ORDER

#ifdef __cplusplus
extern "C" struct VxD_Desc_Block VXD_DDB;
#else
struct VxD_Desc_Block VXD_DDB;
#endif

#define DECLARE_VIRTUAL_DEVICE(c1,c2,c3,c4,c5,c6,c7,c8)	\
void _OuterControlProc();	\
struct VxD_Desc_Block VXD_DDB = { \
	0,						\
	DDB_DDK_VERSION,		\
	DDB_DEVICE_ID,			\
	DDB_MAJOR_VER,			\
	DDB_MINOR_VER,			\
	0,						\
	{(c1),(c2),(c3),(c4),(c5),(c6),(c7),(c8)}, \
	DDB_INIT_ORDER,			\
	(ULONG) _OuterControlProc, \
	0, 0, 0, 0,				\
	0,						\
	0, 0, 0,				\
	'Prev',					\
	sizeof(struct VxD_Desc_Block), \
	'Rsv1',					\
	'Rsv2',					\
	'Rsv3',					\
 };

#define DECLARE_VIRTUAL_DEVICE_1(c1) \
	DECLARE_VIRTUAL_DEVICE((c1),' ',' ',' ',' ',' ',' ',' ')

#define DECLARE_VIRTUAL_DEVICE_2(c1,c2) \
	DECLARE_VIRTUAL_DEVICE((c1),(c2),' ',' ',' ',' ',' ',' ')

#define DECLARE_VIRTUAL_DEVICE_3(c1,c2,c3) \
	DECLARE_VIRTUAL_DEVICE((c1),(c2),(c3),' ',' ',' ',' ',' ')

#define DECLARE_VIRTUAL_DEVICE_4(c1,c2,c3,c4) \
	DECLARE_VIRTUAL_DEVICE((c1),(c2),(c3),(c4),' ',' ',' ',' ')

#define DECLARE_VIRTUAL_DEVICE_5(c1,c2,c3,c4,c5) \
	DECLARE_VIRTUAL_DEVICE((c1),(c2),(c3),(c4),(c5),' ',' ',' ')

#define DECLARE_VIRTUAL_DEVICE_6(c1,c2,c3,c4,c5,c6) \
	DECLARE_VIRTUAL_DEVICE((c1),(c2),(c3),(c4),(c5),(c6),' ',' ')

#define DECLARE_VIRTUAL_DEVICE_7(c1,c2,c3,c4,c5,c6,c7) \
	DECLARE_VIRTUAL_DEVICE((c1),(c2),(c3),(c4),(c5),(c6),(c7),' ')

#define DECLARE_VIRTUAL_DEVICE_8(c1,c2,c3,c4,c5,c6,c7,c8) \
	DECLARE_VIRTUAL_DEVICE((c1),(c2),(c3),(c4),(c5),(c6),(c7),(c8))

///////////////////////////////////////////////////////////////////////
// Dispatch map macros for dispatching system control messages.

#define BEGIN_DISPATCH_MAP							\
	void _stdcall _ControlProc(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD); \
	void _declspec(naked) _OuterControlProc() {		\
	{_asm push edi}									\
	{_asm push esi}									\
	{_asm push edx}									\
	{_asm push ecx}									\
	{_asm push ebx}									\
	{_asm push eax}									\
	{_asm call _ControlProc}						\
	{_asm ret}										\
	}												\
													\
	void _stdcall _ControlProc(DWORD r_eax, DWORD r_ebx, \
		DWORD r_ecx, DWORD r_edx, DWORD r_esi, DWORD r_edi) { \
	switch (r_eax) {

#define END_DISPATCH_MAP		\
	default:					\
		break;					\
	}							\
	{_asm clc}					\
	return;						\
	}

// BOOL OnSysCriticalInit(HVM hVM, PVOID pCommandTail, PVOID pRefData);
#define ON_SYS_CRITICAL_INIT(f) case SYS_CRITICAL_INIT: \
	f((HVM)r_ebx, (PVOID)r_esi, (PVOID)r_edx);			\
	{_asm cmp eax, 1}									\
	return;

// BOOL OnDeviceInit(HVM hVM, PVOID pCommandTail, PVOID pRefData);
#define ON_DEVICE_INIT(f) case DEVICE_INIT:		\
	f((HVM)r_ebx, (PVOID)r_esi, (PVOID)r_edx);	\
	{_asm cmp eax, 1}							\
	return;

// BOOL OnInitComplete(HVM hVM, PVOID pCommandTail, PVOID pRefData);
#define ON_INIT_COMPLETE(f) case INIT_COMPLETE:	\
	f((HVM)r_ebx, (PVOID)r_esi, (PVOID)r_edx);	\
	{_asm cmp eax, 1}							\
	return;

// VOID OnSysVmInit(HVM hVM); 
#define ON_SYS_VM_INIT(f) case SYS_VM_INIT: \
	f((HVM)r_ebx);							\
	break;

// VOID OnSysVmTerminate(HVM hVM);
#define ON_SYS_VM_TERMINATE(f) case SYS_VM_TERMINATE:	\
	f((HVM)r_ebx);										\
	break;

// VOID OnSystemExit(HVM hVM);
#define ON_SYSTEM_EXIT(f) case SYSTEM_EXIT:		\
	f((HVM)r_ebx);								\
	break;

// VOID OnSysCriticalExit();
#define ON_SYS_CRITICAL_EXIT(f) case SYS_CRITICAL_EXIT:	\
	f();												\
	break;

// BOOL OnCreateVm(HVM hVM);
#define ON_CREATE_VM(f) case CREATE_VM:	\
	f((HVM)r_ebx);						\
	{_asm cmp eax, 1}					\
	return;

// BOOL OnVmCriticalInit(HVM hVM);
#define ON_VM_CRITICAL_INIT(f) case VM_CRITICAL_INIT:	\
	f((HVM)r_ebx);										\
	{_asm cmp eax, 1}									\
	return;

// BOOL OnVmInit(HVM hVM);
#define ON_VM_INIT(f) case VM_INIT:			\
	f((HVM)r_ebx);							\
	{_asm cmp eax, 1}						\
	return;

// VOID OnVmTerminate(HVM hVM);
#define ON_VM_TERMINATE(f) case VM_TERMINATE:	\
	f((HVM)r_ebx);								\
	break;

// VOID OnVmNotExecutable(HVM hVM, DWORD fFlags);
#define ON_VM_NOT_EXECUTEABLE(f) case VM_NOT_EXECUTEABLE:	\
	f((HVM)r_ebx, r_edx);									\
	break;

// VOID OnDestroyVm(HVM hVM);
#define ON_DESTORY_VM(f) case DESTROY_VM:	\
	f((HVM)r_ebx);							\
	break;

// VOID OnVmSuspend(HVM hVM);
#define ON_VM_SUSPEND(f) case VM_SUSPEND:	\
	f((HVM)r_ebx);							\
	break;

// VOID OnVmResume(HVM hVM);
#define ON_VM_RESUME(f) case VM_RESUME:		\
	f((HVM)r_ebx);							\
	break;

// VOID OnSetDeviceFocus(HVM hVM, DWORD nID, DWORD fFlags, HVM hAssociatedVM);
#define ON_SET_DEVICE_FOCUS(f) case SET_DEVICE_FOCUS:	\
	f((HVM)r_ebx, r_edx, r_esi, (HVM)r_edi);			\
	break;

// VOID OnBeginMessageMode(HVM hVM);
#define ON_BEGIN_MESSAGE_MODE(f) case BEGIN_MESSAGE_MODE: \
	f((HVM)r_ebx);										\
	break;

// VOID OnEndMessageMode(HVM hVM);
#define ON_END_MESSAGE_MODE(f) case END_MESSAGE_MODE:	\
	f((HVM)r_ebx);										\
	break;

// VOID OnRebootProcessor();
#define ON_REBOOT_PROCESSOR(f) case REBOOT_PROCESSOR:	\
	f();												\
	break;

// BOOL OnQueryDestroy();
#define ON_QUERY_DESTROY(f) case QUERY_DESTROY: \
	f((HVM)r_ebx);								\
	{_asm cmp eax, 1}							\
	return;

// VOID OnDebugQuery();
#define ON_DEBUG_QUERY(f) case DEBUG_QUERY: \
	f();									\
	break;

// BOOL OnBeginPmApp(HVM hVM, DWORD fFlags, struct pmcb_s* pPmcb);
#define ON_BEGIN_PM_APP(f) case BEGIN_PM_APP:		\
	f((HVM)r_ebx, r_edx, (struct pmcb_s*)r_edi);	\
	{_asm cmp eax, 1}								\
	return;

⌨️ 快捷键说明

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