windows-nt/Source/XPSP1/NT/base/mvdm/inc/vrmslot.h
2020-09-26 16:20:57 +08:00

144 lines
3.8 KiB
C

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
vrmslot.h
Abstract:
Prototypes, definitions and structures for VdmRedir mailslot handlers
Author:
Richard L Firth (rfirth) 16-Sep-1991
Revision History:
16-Sep-1991 rfirth
Created
--*/
//
// VDM Mailslot support routines. Prototypes
//
VOID
VrDeleteMailslot(
VOID
);
VOID
VrGetMailslotInfo(
VOID
);
VOID
VrMakeMailslot(
VOID
);
VOID
VrPeekMailslot(
VOID
);
VOID
VrReadMailslot(
VOID
);
VOID
VrWriteMailslot(
VOID
);
VOID
VrTerminateMailslots(
IN WORD DosPdb
);
//
// typedefs
//
//
// SELECTOR - in the absence of a standard SELECTOR type, 16-bit selector,
// doubles as SEGMENT (as in ADDRESS16)
//
typedef unsigned short SELECTOR;
//
// ADDRESS16 - an Intel architecture-specific 16:16 address, consisting of a
// 16-bit offset in the low word and a 16-bit segment (real mode) or selector
// (protect mode) in the high word. Both elements are little-endian
// Again, this exists in absence of Intel-specific DWORD structure which has
// correct endian-ness and views address as composed of two parts
//
typedef struct {
unsigned short Offset;
SELECTOR Selector;
} ADDRESS16;
//
// structures
//
//
// VR_MAILSLOT_INFO - the Dos mailslot subsystem needs some info which we do
// not keep, so we put it in this structure. The structure is linked into a
// list of active mailslot structures for every successful CreateMailslot
// call. The extra info we need is:
//
// DosPdb - the PDB (or PSP) of the Dos application. Used for
// consistency checks and removing mailslots when the
// app dies
// Handle16 - the handle returned to the Dos app. We have to invent
// this
// BufferAddress - the Dos app tells us where its buffer is then wants
// us to confirm the address in a DosMailslotInfo call
// Selector - the Dos app needs a protect mode selector when
// running under Windows 3.0 enhanced mode
// MessageSize - maximum message size which can be read. Not the same
// thing as mailslot size
//
// We also need some information for our own internal wrangling:
//
// NameLength - the length of the significant part of the mailslot
// name (after \MAILSLOT\). We compare this before
// doing a strcmp() on names
// Name - the significant part of the mailslot name. When a
// mailslot is opened, we store the name after \MAILSLOT\
// because DosMailslotWrite uses the symbolic name, even
// when writing locally; we need a handle, so we have
// to map the name to open mailslot handle.
//
// This structure is allocated from the heap and the Name field will actually
// be large enough to hold the entire string. I put Name[2] because the Mips
// compiler doesn't know about Name[] (Microsoft C compiler extension). 2 at
// least keeps things even. Maybe it should be 4. Maybe it doesn't matter
//
typedef struct _VR_MAILSLOT_INFO *PVR_MAILSLOT_INFO;
typedef struct _VR_MAILSLOT_INFO {
PVR_MAILSLOT_INFO Next; // linked list
WORD DosPdb; // for consistency etc
WORD Handle16; // Dos handle
HANDLE Handle32; // Win32 handle (proper)
ADDRESS16 BufferAddress; // Dos app's message buffer
SELECTOR Selector; // Win 3's buffer selector
DWORD MessageSize; // max. message size
DWORD NameLength; // length of name following:
CHAR Name[2]; // of mailslot, (after \\.\MAILSLOT\)
} VR_MAILSLOT_INFO;