56 #include "../../memory.h" 62 #define XMS_DEVICE_NAME "XMSXXXX0" 183 return (HandleEntry !=
NULL && HandleEntry->
Handle != 0);
189 DWORD CurrentIndex = 0;
196 if (RunSize == 0)
break;
202 CurrentIndex = RunStart + RunSize;
212 DWORD CurrentIndex = 0;
221 if (HandleEntry->
Handle == 0)
240 if (RunSize == 0)
break;
254 if (RunSize == 0)
break;
256 if (RunSize >= HandleEntry->
Size)
271 CurrentIndex = RunStart + RunSize;
281 DWORD CurrentIndex = 0;
294 if (NewSize < HandleEntry->
Size)
305 BlockNumber + HandleEntry->
Size,
310 BlockNumber + HandleEntry->
Size,
326 if (RunSize == 0)
break;
349 CurrentIndex = RunStart + RunSize;
484 if (
getAX() != 0x0001)
507 if (
getAX() != 0x0001)
781 DPRINT1(
"XMS command AH = 0x%02X NOT IMPLEMENTED\n",
getAH());
#define XMS_STATUS_NOT_LOCKED
static PXMS_HANDLE GetXmsHandleRecord(WORD Handle)
USHORT WINAPI getBX(VOID)
BOOLEAN UmaDescReserve(IN OUT PUSHORT Segment, IN OUT PUSHORT Size)
#define XMS_STATUS_HMA_MIN_SIZE
BOOLEAN EmulatorGetA20(VOID)
#define XMS_STATUS_BAD_DEST_OFFSET
#define XMS_STATUS_INVALID_UMB
USHORT WINAPI getSI(VOID)
static BOOLEAN IsHmaReserved
#define XMS_STATUS_A20_STILL_ENABLED
VOID RegisterBop(BYTE BopCode, EMULATOR_BOP_PROC BopHandler)
VOID WINAPI setAX(USHORT)
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
#define DOS_DEVATTR_IOCTL
#define XMS_STATUS_NOT_IMPLEMENTED
NTSYSAPI ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP, ULONG, PULONG)
IN PVOID IN PVOID IN USHORT IN USHORT Size
#define XMS_STATUS_LOCK_OVERFLOW
static XMS_HANDLE HandleTable[XMS_MAX_HANDLES]
#define SEG_OFF_TO_PTR(seg, off)
#define RtlMoveMemory(Destination, Source, Length)
#define XMS_STATUS_HMA_IN_USE
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
static UCHAR XmsAlloc(WORD Size, PWORD Handle)
static BOOLEAN IsA20Enabled
BOOLEAN XmsGetDriverEntry(PDWORD Pointer)
#define XMS_STATUS_BAD_SRC_HANDLE
VOID DosDeleteDevice(PDOS_DEVICE_NODE DeviceNode)
#define REAL_TO_PHYS(ptr)
#define XMS_STATUS_OUT_OF_MEMORY
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
static VOID XmsLocalDisableA20(VOID)
#define XMS_STATUS_SMALLER_UMB
static BOOLEAN ValidateXmsHandle(PXMS_HANDLE HandleEntry)
struct _XMS_COPY_DATA * PXMS_COPY_DATA
#define DEVICE_PRIVATE_AREA(Driver)
PDOS_DEVICE_NODE DosCreateDeviceEx(WORD Attributes, PCHAR DeviceName, WORD PrivateDataSize)
static RTL_BITMAP AllocBitmap
VOID EmulatorSetA20(BOOLEAN Enabled)
#define XMS_STATUS_A20_ERROR
#define XMS_STATUS_OUT_OF_UMBS
static UCHAR XmsLock(WORD Handle, PDWORD Address)
BOOLEAN UmaDescRelease(IN USHORT Segment)
VOID WINAPI setDX(USHORT)
#define XMS_STATUS_SUCCESS
static UCHAR XmsFree(WORD Handle)
static ULONG BitmapBuffer[(XMS_BLOCKS+31)/32]
#define XMS_STATUS_HMA_NOT_ALLOCATED
USHORT WINAPI getDX(VOID)
#define XMS_STATUS_INVALID_HANDLE
USHORT WINAPI getAX(VOID)
static UCHAR XmsUnlock(WORD Handle)
_Must_inspect_result_ _In_ USHORT NewSize
static BOOLEAN CanChangeA20
VOID WINAPI setBX(USHORT)
NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP, ULONG, ULONG)
#define DOS_DEVATTR_CHARACTER
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
static UCHAR XmsRealloc(WORD Handle, WORD NewSize)
NTSYSAPI void WINAPI RtlSetBits(PRTL_BITMAP, ULONG, ULONG)
#define XMS_STATUS_LOCKED
static LONG A20EnableCount
NTSYSAPI ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP, ULONG, PULONG)
USHORT WINAPI getDS(VOID)
static VOID WINAPI XmsBopProcedure(LPWORD Stack)
#define RtlZeroMemory(Destination, Length)
NTSYSAPI BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP, ULONG, ULONG)
#define XMS_STATUS_BAD_SRC_OFFSET
static VOID XmsLocalEnableA20(VOID)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS SourceAddress
static const BYTE EntryProcedure[]
BOOLEAN UmaDescReallocate(IN USHORT Segment, IN OUT PUSHORT Size)
static WORD XmsGetLargestFreeBlock(VOID)
#define XMS_STATUS_BAD_DEST_HANDLE
base of all file and directory entries
#define XMS_STATUS_OUT_OF_HANDLES