windows-nt/Source/XPSP1/NT/base/ntos/ke/i386/vdmp.h
2020-09-26 16:20:57 +08:00

74 lines
1.7 KiB
C

#define VDM_APP_MODE 0x00000001L
#define VDM_INTERRUPT_PENDING 0x00000002L
#define VDM_STATE_CHANGE 0x00000004L
#define VDM_VIRTUAL_INTERRUPTS 0x00000200L
#define VDM_PE_MASK 0x80000000L
typedef enum _VdmEventClass {
VdmIO,
VdmStringIO,
VdmMemAccess,
VdmIntAck,
VdmBop,
VdmError,
VdmIrq13
} VDMEVENTCLASS, *PVDMEVENTCLASS;
typedef struct _VdmIoInfo {
USHORT PortNumber;
USHORT Size;
BOOLEAN Read;
} VDMIOINFO, *PVDMIOINFO;
typedef struct _VdmStringIoInfo {
USHORT PortNumber;
USHORT Size;
BOOLEAN Read;
ULONG Count;
ULONG Address;
} VDMSTRINGIOINFO, *PVDMSTRINGIOINFO;
typedef ULONG VDMBOPINFO;
typedef NTSTATUS VDMERRORINFO;
typedef struct _VdmEventInfo {
ULONG Size;
VDMEVENTCLASS Event;
ULONG InstructionSize;
union {
VDMIOINFO IoInfo;
VDMSTRINGIOINFO StringIoInfo;
VDMBOPINFO BopNumber;
VDMERRORINFO ErrorStatus;
};
} VDMEVENTINFO, *PVDMEVENTINFO;
typedef struct _Vdm_InterruptHandler {
USHORT CsSelector;
ULONG Eip;
USHORT SsSelector;
ULONG Esp;
} VDM_INTERRUPTHANDLER, *PVDM_INTERRUPTHANDLER;
typedef struct _Vdm_Tib {
ULONG Size;
ULONG Flags;
VDM_INTERRUPTHANDLER VdmInterruptHandlers[255];
CONTEXT MonitorContext;
CONTEXT VdmContext;
VDMEVENTINFO EventInfo;
} VDM_TIB, *PVDM_TIB;
NTSTATUS
NtStartVdmExecution(
);
// Flags that don't belong here
#define SEL_TYPE_READ 0x00000001
#define SEL_TYPE_WRITE 0x00000002
#define SEL_TYPE_EXECUTE 0x00000004
#define SEL_TYPE_BIG 0x00000008
#define SEL_TYPE_ED 0x00000010
#define SEL_TYPE_2GIG 0x00000020