Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

257 lines
4.3 KiB

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
dpmi32p.h
Abstract:
This is the private include file for the 32 bit dpmi and protected mode
support
Author:
Dave Hastings (daveh) 24-Nov-1992
Revision History:
Neil Sandlin (neilsa) 31-Jul-1995 - Updates for the 486 emulator
--*/
#if DBG
#define GET_SELECTOR_LIMIT(Selector, Limit) \
Limit = SelectorLimit[(Selector & ~0x7) / sizeof(LDT_ENTRY)]
#else
#ifdef i386
#define GET_SELECTOR_LIMIT(Selector, Limit) _asm \
{ \
_asm xor eax, eax \
_asm xor ecx, ecx \
_asm mov ax, Selector \
_asm or eax, 7 \
_asm lsl ecx, eax \
_asm mov [Limit], ecx \
}
#else
#define GET_SELECTOR_LIMIT(Selector, Limit) { { \
USHORT i = (Selector & ~0x7)/sizeof(LDT_ENTRY); \
Limit = Ldt[i].HighWord.Bits.LimitHi << 16 | Ldt[i].LimitLow; \
Limit = (Limit << (12 * Ldt[i].HighWord.Bits.Granularity)) + \
Ldt[i].HighWord.Bits.Granularity * 0xFFF; \
} \
}
#endif
#endif
#ifdef i386
#define setEFLAGS(value) { \
VdmTib.VdmContext.EFlags = value; \
}
#define getEFLAGS() VdmTib.VdmContext.EFlags
#endif
#define SEGMENT_IS_BIG(sel) (Ldt[(sel & ~0x7)/sizeof(LDT_ENTRY)].HighWord.Bits.Default_Big)
#define SEGMENT_IS_PRESENT(sel) (Ldt[(sel & ~0x7)/sizeof(LDT_ENTRY)].HighWord.Bits.Pres)
// This checks for S, Data, W
#define SEGMENT_IS_WRITABLE(sel) ( (Ldt[(sel & ~0x7)/sizeof(LDT_ENTRY)].HighWord.Bits.Type & 0x1a) == 0x12)
//
// Internal Constants
//
#define MAX_V86_ADDRESS 64 * 1024 + 1024 * 1024
#define ONE_MB 1024 * 1024
//
// Internal structure definitions
//
#pragma pack(1)
typedef struct _DpmiMemInfo {
DWORD LargestFree;
DWORD MaxUnlocked;
DWORD MaxLocked;
DWORD AddressSpaceSize;
DWORD UnlockedPages;
DWORD FreePages;
DWORD PhysicalPages;
DWORD FreeAddressSpace;
DWORD PageFileSize;
} DPMIMEMINFO, *PDPMIMEMINFO;
#pragma pack()
//
// Information about the current PSP
//
extern USHORT CurrentPSPSelector;
//
// Table of selector bases and limits
//
extern ULONG FlatAddress[LDT_SIZE];
//
// Index to the last bop function dispatched. Used to report
// errors on risc
//
extern ULONG Index;
//
// Variables used in interrupt stack switching
//
#ifndef i386
extern USHORT LockedPMStackSel;
extern ULONG LockedPMStackCount;
extern ULONG PMLockOrigEIP;
extern ULONG PMLockOrigSS;
extern ULONG PMLockOrigESP;
extern ULONG DosxFaultHandlerIret;
extern ULONG DosxFaultHandlerIretd;
extern ULONG DosxIntHandlerIret;
extern ULONG DosxIntHandlerIretd;
#endif
extern ULONG DosxIret;
extern ULONG DosxIretd;
//
// Internal functions
//
VOID
DpmiInitApp(
VOID
);
VOID
DpmiSetDescriptorEntry(
VOID
);
VOID
DpmiGetFastBopEntry(
VOID
);
VOID
DpmiGetMemoryInfo(
VOID
);
VOID
DpmiDpmiInUse(
VOID
);
VOID
DpmiDpmiNoLongerInUse(
VOID
);
VOID
DpmiFreeAppXmem(
VOID
);
VOID
DpmiInitDosx(
VOID
);
VOID
DpmiPassPmStackInfo(
VOID
);
VOID
DpmiAllocateXmem(
VOID
);
VOID
DpmiFreeXmem(
VOID
);
VOID
DpmiReallocateXmem(
VOID
);
VOID
DpmiFreeAllXmem(
VOID
);
NTSTATUS
DpmiAllocateVirtualMemory(
PVOID *Address,
PULONG Size
);
NTSTATUS
DpmiFreeVirtualMemory(
PVOID *Address,
PULONG Size
);
BOOL
DpmiReallocateVirtualMemory(
PVOID OldAddress,
ULONG OldSize,
PVOID *NewAddress,
PULONG NewSize
);
VOID
DpmiPassTableAddress(
VOID
);
VOID
DpmiVcdPmSvcCall32(
VOID
);
VOID switch_to_protected_mode(
VOID
);
VOID DpmiSetProtectedmodeInterrupt(
VOID
);
VOID DpmiSetFaultHandler(
VOID
);
VOID DpmiFaultHandlerIret16(
VOID
);
VOID DpmiFaultHandlerIret32(
VOID
);
VOID DpmiIntHandlerIret16(
VOID
);
VOID DpmiIntHandlerIret32(
VOID
);
VOID DpmiUnhandledExceptionHandler(
VOID
);
VOID GetFastBopEntryAddress(
PCONTEXT VdmContext
);