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

📄 vdm.h

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 H
字号:
/*
* PROJECT:         ReactOS Kernel
* LICENSE:         GPL - See COPYING in the top level directory
* FILE:            ntoskrnl/include/vdm.h
* PURPOSE:         Internal header for V86 and VDM Support
* PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
*/

//
// Define this if you want debugging support
//
#define _VM_DEBUG_                                      0x00

//
// These define the Debug Masks Supported
//
#define VM_EXEC_DEBUG                                   0x01

//
// Debug/Tracing support
//
#if _VM_DEBUG_
#ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
#define VMTRACE DbgPrintEx
#else
#define VMTRACE(x, ...)                                 \
    if (x & VdmpTraceLevel) DbgPrint(__VA_ARGS__)
#endif
#else
#define VMTRACE(x, ...) DPRINT(__VA_ARGS__)
#endif

//
// Memory addresses inside CSRSS for V86 Support
//
#define TRAMPOLINE_BASE                                 0x10000
#define TRAMPOLINE_TIB                                  0x12000
#define TRAMPOLINE_TEB                                  0x13000

//
// BOP (Magic Opcode) to exit V86 Mode
//
#define TRAMPOLINE_BOP                                  0xFEC4C4

//
// VDM State Pointer
//
#define VdmState                                        \
    (PULONG)FIXED_NTVDMSTATE_LINEAR_PC_AT

//
// VDM Event Types
//
typedef enum _VdmEventClass
{
    VdmIO,
    VdmStringIO,
    VdmMemAccess,
    VdmIntAck,
    VdmBop,
    VdmError,
    VdmIrq13
} VDMEVENTCLASS, *PVDMEVENTCLASS;

//
// VDM Interrupt and Fault Handler Definitions
//
typedef struct _Vdm_InterruptHandler
{
    USHORT CsSelector;
    USHORT Flags;
    ULONG Eip;
} VDM_INTERRUPTHANDLER, *PVDM_INTERRUPTHANDLER;

typedef struct _Vdm_FaultHandler
{
    USHORT CsSelector;
    USHORT SsSelector;
    ULONG Eip;
    ULONG Esp;
    ULONG Flags;
} VDM_FAULTHANDLER, *PVDM_FAULTHANDLER;

//
// VDM Event Information
//
typedef struct _VdmEventInfo
{
    ULONG Size;
    VDMEVENTCLASS Event;
    ULONG InstructionSize;
    union
    {
        //VDMIOINFO IoInfo;
        //VDMSTRINGIOINFO StringIoInfo;
        ULONG BopNumber;
        //VDMFAULTINFO FaultInfo;
        LONG ErrorStatus;
        ULONG IntAckInfo;
    };
} VDMEVENTINFO, *PVDMEVENTINFO;

//
// VDM Printer Information
//
typedef struct _Vdm_Printer_Info
{
    PUCHAR prt_state;
    // TODO
} VDM_PRINTER_INFO, *PVDM_PRINTER_INFO;

//
// VDM Trace Information
//
typedef struct _VdmTraceInfo
{
    // TODO
    UCHAR Flags;
    // TODO
} VDMTRACEINFO, *PVDMTRACEINFO;

//
// VDM Family Table
//
typedef struct _tagFAMILY_TABLE
{
    INT numHookedAPIs;
    // TODO
} FAMILY_TABLE, *PFAMILY_TABLE;

//
// Thread Information Block for VDM Threads
//
typedef struct _Vdm_Tib
{
    ULONG Size;
    PVDM_INTERRUPTHANDLER VdmInterruptTable;
    PVDM_FAULTHANDLER VdmFaultTable;
    CONTEXT MonitorContext;
    CONTEXT VdmContext;
    VDMEVENTINFO EventInfo;
    VDM_PRINTER_INFO PrinterInfo;
    ULONG TempArea1[2];
    ULONG TempArea2[2];
    VDMTRACEINFO TraceInfo;
    ULONG IntelMSW;
    LONG NumTasks;
    PFAMILY_TABLE *pDpmFamTbls;
    BOOLEAN ContinueExecution;
} VDM_TIB, *PVDM_TIB;

//
// Process Information Block for VDM Processes
//
typedef struct _VDM_PROCESS_OBJECTS
{
    PVOID VdmIoListHead; // PVDM_IO_LISTHEAD
    KAPC QueuedIntApc;
    KAPC QueuedIntUserApc;
    FAST_MUTEX DelayIntFastMutex;
    KSPIN_LOCK DelayIntSpinLock;
    LIST_ENTRY DelayIntListHead;
    PVOID pIcaUserData; // VDMICAUSERDATA
    PETHREAD MainThread;
    PVDM_TIB VdmTib;
    UCHAR PrinterState;
    UCHAR PrinterControl;
    UCHAR PrinterStatus;
    UCHAR PrinterHostState;
    USHORT AdlibStatus;
    USHORT AdlibIndexRegister;
    USHORT AdlibPhysPortStart;
    USHORT AdlibPhysPortEnd;
    USHORT AdlibVirtPortStart;
    USHORT AdlibVirtPortEnd;
    USHORT AdlibAction;
    USHORT VdmControl;
    ULONG PMCliTimeStamp;
} VDM_PROCESS_OBJECTS, *PVDM_PROCESS_OBJECTS;

//
// Functions
//
NTSTATUS
NTAPI
VdmpStartExecution(
    VOID
);

//
// Global data inside the VDM
//


⌨️ 快捷键说明

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