#include <ntoskrnl.h>
#include <debug.h>
Go to the source code of this file.
|
| KiVdmUnhandledOpcode (F) |
|
| KiVdmUnhandledOpcode (OUTSW) |
|
| KiVdmUnhandledOpcode (OUTSB) |
|
| KiVdmUnhandledOpcode (INSB) |
|
| KiVdmUnhandledOpcode (INSW) |
|
| KiVdmUnhandledOpcode (NPX) |
|
| KiVdmUnhandledOpcode (INBimm) |
|
| KiVdmUnhandledOpcode (INWimm) |
|
| KiVdmUnhandledOpcode (OUTBimm) |
|
| KiVdmUnhandledOpcode (OUTWimm) |
|
| KiVdmUnhandledOpcode (INB) |
|
| KiVdmUnhandledOpcode (INW) |
|
| KiVdmUnhandledOpcode (OUTB) |
|
| KiVdmUnhandledOpcode (OUTW) |
|
| KiVdmUnhandledOpcode (HLT) |
|
| KiVdmUnhandledOpcode (INTO) |
|
| KiVdmUnhandledOpcode (INV) |
|
BOOLEAN FASTCALL | KiVdmOpcodePUSHF (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | KiVdmOpcodePOPF (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | KiVdmOpcodeINTnn (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | KiVdmOpcodeIRET (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | KiVdmOpcodeCLI (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | KiVdmOpcodeSTI (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | KiVdmHandleOpcode (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | KiVdmOpcodePrefix (IN PKTRAP_FRAME TrapFrame, IN ULONG Flags) |
|
BOOLEAN FASTCALL | Ki386HandleOpcodeV86 (IN PKTRAP_FRAME TrapFrame) |
|
ULONG_PTR FASTCALL | KiExitV86Mode (IN PKTRAP_FRAME TrapFrame) |
|
VOID FASTCALL | KiEnterV86Mode (IN ULONG_PTR StackFrameUnaligned) |
|
VOID NTAPI | Ke386SetIOPL (VOID) |
|
NTSTATUS NTAPI | Ke386CallBios (IN ULONG Int, OUT PCONTEXT Context) |
|
BOOLEAN NTAPI | Ke386IoSetAccessProcess (IN PKPROCESS Process, IN ULONG MapNumber) |
|
BOOLEAN NTAPI | Ke386SetIoAccessMap (IN ULONG MapNumber, IN PKIO_ACCESS_MAP IopmBuffer) |
|
BOOLEAN NTAPI | Ke386QueryIoAccessMap (IN ULONG MapNumber, IN PKIO_ACCESS_MAP IopmBuffer) |
|
◆ KiVdmGetInstructionSize
#define KiVdmGetInstructionSize |
( |
|
x | ) |
((x) & 0xFF) |
◆ KiVdmGetPrefixFlags
#define KiVdmGetPrefixFlags |
( |
|
x | ) |
((x) & 0xFFFFFF00) |
◆ NDEBUG
◆ Ke386CallBios()
Definition at line 614 of file v86vdm.c.
631 *Trampoline++ = 0xCD;
663 VdmProcessObjects->
VdmTib = VdmTib;
VOID NTAPI KeRevertToUserAffinityThread(VOID)
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T ContextSize
VOID NTAPI KeSetSystemAffinityThread(IN KAFFINITY Affinity)
#define PsGetCurrentProcess
struct _Vdm_Tib * PVDM_TIB
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI Ki386SetupAndExitToV86Mode(OUT PTEB VdmTeb)
#define FIELD_OFFSET(t, f)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
#define KeGetCurrentThread
#define ExFreePoolWithTag(_P, _T)
KIIO_ACCESS_MAP IoMaps[IOPM_COUNT]
#define EFLAGS_INTERRUPT_MASK
Referenced by IntInt10CallBios().
◆ Ke386IoSetAccessProcess()
Definition at line 709 of file v86vdm.c.
721 Process->IopmOffset = MapOffset;
723 TargetProcessors =
Process->ActiveProcessors;
726 KeGetPcr()->TSS->IoMapBase = MapOffset;
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
#define KiComputeIopmOffset(MapNumber)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
◆ Ke386QueryIoAccessMap()
Definition at line 762 of file v86vdm.c.
#define RtlMoveMemory(Destination, Source, Length)
#define IO_ACCESS_MAP_NONE
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
◆ Ke386SetIoAccessMap()
Definition at line 736 of file v86vdm.c.
749 pt = &(
KeGetPcr()->TSS->IoMaps[MapNumber-1].IoMap);
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
#define RtlMoveMemory(Destination, Source, Length)
struct _KTHREAD * CurrentThread
#define IO_ACCESS_MAP_NONE
◆ Ke386SetIOPL()
Definition at line 581 of file v86vdm.c.
VOID NTAPI KeContextToTrapFrame(PCONTEXT Context, PKEXCEPTION_FRAME ExeptionFrame, PKTRAP_FRAME TrapFrame, ULONG ContextFlags, KPROCESSOR_MODE PreviousMode)
VOID NTAPI KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame, IN PKEXCEPTION_FRAME ExceptionFrame, IN OUT PCONTEXT Context)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
struct tagContext Context
#define KeGetCurrentThread
#define KeGetTrapFrame(Thread)
Referenced by NtSetInformationProcess().
◆ Ki386HandleOpcodeV86()
Definition at line 456 of file v86vdm.c.
459 TrapFrame->Eip &= 0xFFFF;
460 TrapFrame->HardwareEsp &= 0xFFFF;
BOOLEAN FASTCALL KiVdmHandleOpcode(IN PKTRAP_FRAME TrapFrame, IN ULONG Flags)
Referenced by KiTrap0DHandler().
◆ KiEnterV86Mode()
Definition at line 507 of file v86vdm.c.
534 TrapFrame->
Esi = StackFrameUnaligned;
563 Thread->InitialStack = V86Frame;
NTSTATUS NTAPI NtVdmControl(IN ULONG ControlCode, IN PVOID ControlData)
#define ROUND_UP(n, align)
struct _KV8086_STACK_FRAME * PKV8086_STACK_FRAME
void __cdecl _enable(void)
void * _AddressOfReturnAddress(void)
DECLSPEC_NORETURN VOID FASTCALL KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
__INTRIN_INLINE uintptr_t __readeflags(void)
FORCEINLINE PFX_SAVE_AREA KiGetThreadNpxArea(IN PKTHREAD Thread)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
struct _EXCEPTION_REGISTRATION_RECORD FAR * ExceptionList
#define KiFillTrapFrameDebug(x)
VOID FASTCALL Ki386BiosCallReturnAddress(IN PKTRAP_FRAME TrapFrame)
FORCEINLINE VOID KiSetTebBase(PKPCR Pcr, PNT_TIB TebAddress)
#define EXCEPTION_CHAIN_END
void __cdecl _disable(void)
#define RtlCopyMemory(Destination, Source, Length)
#define KeGetCurrentThread
#define EFLAGS_INTERRUPT_MASK
◆ KiExitV86Mode()
Definition at line 468 of file v86vdm.c.
478 StackFrameUnaligned = TrapFrame->Esi;
481 NpxFrame = &StackFrame->
NpxArea;
502 return StackFrameUnaligned;
#define ROUND_UP(n, align)
struct _KV8086_STACK_FRAME * PKV8086_STACK_FRAME
void __cdecl _enable(void)
FORCEINLINE PFX_SAVE_AREA KiGetThreadNpxArea(IN PKTHREAD Thread)
struct _FX_SAVE_AREA FX_SAVE_AREA
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
FORCEINLINE VOID KiSetTebBase(PKPCR Pcr, PNT_TIB TebAddress)
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define KeGetCurrentThread
◆ KiVdmHandleOpcode()
Definition at line 379 of file v86vdm.c.
385 Eip = (TrapFrame->SegCs << 4) + TrapFrame->Eip;
#define KiCallVdmPrefixHandler(x)
#define KiCallVdmHandler(x)
#define KiVdmGetInstructionSize(x)
_Must_inspect_result_ _In_ ULONG Flags
Referenced by Ki386HandleOpcodeV86(), and KiVdmOpcodePrefix().
◆ KiVdmOpcodeCLI()
Definition at line 341 of file v86vdm.c.
#define KiVdmGetInstructionSize(x)
#define KiVdmClearVdmEFlags(x)
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN KeI386VirtualIntExtensions
#define EFLAGS_INTERRUPT_MASK
◆ KiVdmOpcodeINTnn()
Definition at line 178 of file v86vdm.c.
184 TrapEFlags = TrapFrame->EFlags;
206 Esp = (TrapFrame->HardwareSegSs << 4) + TrapFrame->HardwareEsp;
221 TrapFrame->HardwareEsp = (
USHORT)Esp;
224 Eip = (TrapFrame->SegCs << 4) + TrapFrame->Eip;
#define EFLAGS_ALIGN_CHECK
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
#define KiVdmGetInstructionSize(x)
#define EFLAGS_NESTED_TASK
#define KiVdmClearVdmEFlags(x)
const PULONG KiNtVdmState
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN KeI386VirtualIntExtensions
#define EFLAGS_INTERRUPT_MASK
◆ KiVdmOpcodeIRET()
Definition at line 267 of file v86vdm.c.
270 ULONG Esp, V86EFlags, EFlags, TrapEFlags, Eip;
273 Esp = (TrapFrame->HardwareSegSs << 4) + TrapFrame->HardwareEsp;
279 TrapFrame->Eip = *(
PULONG)Esp;
280 TrapFrame->SegCs = *(
PUSHORT)(Esp + 4);
283 TrapFrame->HardwareEsp += 12;
286 EFlags = *(
PULONG)(Esp + 8);
291 TrapFrame->Eip = *(
PUSHORT)Esp;
292 TrapFrame->SegCs = *(
PUSHORT)(Esp + 2);
295 TrapFrame->HardwareEsp += 6;
312 TrapEFlags = TrapFrame->EFlags;
313 TrapFrame->EFlags = (TrapFrame->EFlags &
EFLAGS_VIP) | EFlags;
323 Eip = (TrapFrame->SegCs << 4) + TrapFrame->Eip;
332 DPRINT(
"FIXME: Check for VDM interrupts\n");
VOID NTAPI Ki386AdjustEsp0(IN PKTRAP_FRAME TrapFrame)
#define EFLAGS_NESTED_TASK
#define KiVdmGetPrefixFlags(x)
#define KiVdmClearVdmEFlags(x)
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN KeI386VirtualIntExtensions
BOOLEAN NTAPI VdmDispatchBop(IN PKTRAP_FRAME TrapFrame)
#define KiVdmSetVdmEFlags(x)
#define EFLAGS_INTERRUPT_MASK
◆ KiVdmOpcodePOPF()
Definition at line 104 of file v86vdm.c.
107 ULONG Esp, V86EFlags, EFlags, TrapEFlags;
110 Esp = (TrapFrame->HardwareSegSs << 4) + (
USHORT)TrapFrame->HardwareEsp;
127 TrapFrame->HardwareEsp = Esp - (TrapFrame->HardwareSegSs << 4);
139 TrapEFlags = TrapFrame->EFlags;
158 TrapFrame->EFlags |= V86EFlags;
#define EFLAGS_ALIGN_CHECK
VOID NTAPI Ki386AdjustEsp0(IN PKTRAP_FRAME TrapFrame)
#define KiVdmGetInstructionSize(x)
#define EFLAGS_NESTED_TASK
#define KiVdmGetPrefixFlags(x)
#define KiVdmClearVdmEFlags(x)
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN KeI386VirtualIntExtensions
#define KiVdmSetVdmEFlags(x)
#define EFLAGS_INTERRUPT_MASK
◆ KiVdmOpcodePrefix()
Definition at line 442 of file v86vdm.c.
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN FASTCALL KiVdmHandleOpcode(IN PKTRAP_FRAME TrapFrame, IN ULONG Flags)
◆ KiVdmOpcodePUSHF()
Definition at line 51 of file v86vdm.c.
54 ULONG Esp, V86EFlags, TrapEFlags;
61 TrapEFlags = TrapFrame->EFlags;
74 V86EFlags |= TrapEFlags;
78 Esp = (TrapFrame->HardwareSegSs << 4) + (
USHORT)TrapFrame->HardwareEsp;
95 TrapFrame->HardwareEsp = Esp - (TrapFrame->HardwareSegSs << 4);
#define EFLAGS_ALIGN_CHECK
#define KiVdmGetInstructionSize(x)
#define EFLAGS_NESTED_TASK
#define KiVdmGetPrefixFlags(x)
const PULONG KiNtVdmState
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN KeI386VirtualIntExtensions
#define EFLAGS_INTERRUPT_MASK
◆ KiVdmOpcodeSTI()
Definition at line 359 of file v86vdm.c.
#define KiVdmGetInstructionSize(x)
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN KeI386VirtualIntExtensions
#define KiVdmSetVdmEFlags(x)
#define EFLAGS_INTERRUPT_MASK
◆ KiVdmUnhandledOpcode() [1/17]
KiVdmUnhandledOpcode |
( |
F |
| ) |
|
◆ KiVdmUnhandledOpcode() [2/17]
KiVdmUnhandledOpcode |
( |
OUTSW |
| ) |
|
◆ KiVdmUnhandledOpcode() [3/17]
KiVdmUnhandledOpcode |
( |
OUTSB |
| ) |
|
◆ KiVdmUnhandledOpcode() [4/17]
KiVdmUnhandledOpcode |
( |
INSB |
| ) |
|
◆ KiVdmUnhandledOpcode() [5/17]
KiVdmUnhandledOpcode |
( |
INSW |
| ) |
|
◆ KiVdmUnhandledOpcode() [6/17]
KiVdmUnhandledOpcode |
( |
NPX |
| ) |
|
◆ KiVdmUnhandledOpcode() [7/17]
KiVdmUnhandledOpcode |
( |
INBimm |
| ) |
|
◆ KiVdmUnhandledOpcode() [8/17]
KiVdmUnhandledOpcode |
( |
INWimm |
| ) |
|
◆ KiVdmUnhandledOpcode() [9/17]
KiVdmUnhandledOpcode |
( |
OUTBimm |
| ) |
|
◆ KiVdmUnhandledOpcode() [10/17]
KiVdmUnhandledOpcode |
( |
OUTWimm |
| ) |
|
◆ KiVdmUnhandledOpcode() [11/17]
KiVdmUnhandledOpcode |
( |
INB |
| ) |
|
◆ KiVdmUnhandledOpcode() [12/17]
KiVdmUnhandledOpcode |
( |
INW |
| ) |
|
◆ KiVdmUnhandledOpcode() [13/17]
KiVdmUnhandledOpcode |
( |
OUTB |
| ) |
|
◆ KiVdmUnhandledOpcode() [14/17]
KiVdmUnhandledOpcode |
( |
OUTW |
| ) |
|
◆ KiVdmUnhandledOpcode() [15/17]
KiVdmUnhandledOpcode |
( |
HLT |
| ) |
|
◆ KiVdmUnhandledOpcode() [16/17]
KiVdmUnhandledOpcode |
( |
INTO |
| ) |
|
◆ KiVdmUnhandledOpcode() [17/17]
KiVdmUnhandledOpcode |
( |
INV |
| ) |
|
◆ KeI386EFlagsAndMaskV86
◆ KeI386EFlagsOrMaskV86
◆ KeI386VirtualIntExtensions
◆ Ki386IopmSaveArea
◆ KiNtVdmState