Author: hbelusca Date: Mon Aug 19 17:50:27 2013 New Revision: 59779
URL: http://svn.reactos.org/svn/reactos?rev=59779&view=rev Log: [KERNEL32] Use some existing #define'd constants.
[CSRSRV-BASESRV] - Add CSR version define (based from BASESRV version define). - Add missing BASESRV structures, taken from https://code.google.com/p/ontl/source/browse/branches/devel/ntl/nt/csr.hxx (OpenNT Native Template Library).
Modified: trunk/reactos/dll/ntdll/csr/connect.c trunk/reactos/dll/win32/kernel32/client/dosdev.c trunk/reactos/dll/win32/kernel32/client/file/filename.c trunk/reactos/dll/win32/kernel32/client/proc.c trunk/reactos/dll/win32/kernel32/client/vdm.c trunk/reactos/include/reactos/subsys/csr/csrmsg.h trunk/reactos/include/reactos/subsys/win/basemsg.h trunk/reactos/subsystems/win/basesrv/dosdev.c trunk/reactos/subsystems/win/basesrv/proc.c trunk/reactos/subsystems/win/basesrv/vdm.c
Modified: trunk/reactos/dll/ntdll/csr/connect.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/ntdll/csr/connect.c?rev... ============================================================================== --- trunk/reactos/dll/ntdll/csr/connect.c [iso-8859-1] (original) +++ trunk/reactos/dll/ntdll/csr/connect.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -107,7 +107,7 @@ SecurityQos.EffectiveOnly = TRUE;
/* Setup the connection info */ - ConnectionInfo.Version = 0x10000; + ConnectionInfo.Version = CSRSRV_VERSION;
/* Create a SID for us */ Status = RtlAllocateAndInitializeSid(&NtSidAuthority,
Modified: trunk/reactos/dll/win32/kernel32/client/dosdev.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/d... ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/dosdev.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/dosdev.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -157,7 +157,7 @@ } else { - DefineDosDeviceRequest->dwFlags = dwFlags; + DefineDosDeviceRequest->Flags = dwFlags;
CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)DeviceUpcaseNameU.Buffer, @@ -174,11 +174,11 @@ CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)NtTargetPathU.Buffer, NtTargetPathU.Length, - (PVOID*)&DefineDosDeviceRequest->TargetName.Buffer); - } - DefineDosDeviceRequest->TargetName.Length = + (PVOID*)&DefineDosDeviceRequest->TargetPath.Buffer); + } + DefineDosDeviceRequest->TargetPath.Length = NtTargetPathU.Length; - DefineDosDeviceRequest->TargetName.MaximumLength = + DefineDosDeviceRequest->TargetPath.MaximumLength = NtTargetPathU.Length;
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
Modified: trunk/reactos/dll/win32/kernel32/client/file/filename.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/f... ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/file/filename.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/file/filename.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -92,7 +92,7 @@ CHAR IDString[5]; WCHAR * TempFileName; BASE_API_MESSAGE ApiMessage; - PBASE_GET_TEMP_FILE GetTempFile = &ApiMessage.Data.GetTempFile; + PBASE_GET_TEMP_FILE GetTempFile = &ApiMessage.Data.GetTempFileRequest; DWORD FileAttributes, LastError; UNICODE_STRING PathNameString, PrefixString; static const WCHAR Ext[] = { L'.', 't', 'm', 'p', UNICODE_NULL };
Modified: trunk/reactos/dll/win32/kernel32/client/proc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/p... ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/proc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/proc.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -963,13 +963,13 @@ { NTSTATUS Status; BASE_API_MESSAGE ApiMessage; - PBASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest = &ApiMessage.Data.GetShutdownParametersRequest; + PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &ApiMessage.Data.ShutdownParametersRequest;
/* Ask CSRSS for shutdown information */ Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepGetProcessShutdownParam), - sizeof(BASE_GET_PROCESS_SHUTDOWN_PARAMS)); + sizeof(BASE_GETSET_PROCESS_SHUTDOWN_PARAMS)); if (!NT_SUCCESS(Status)) { /* Return the failure from CSRSS */ @@ -978,8 +978,8 @@ }
/* Get the data back */ - *lpdwLevel = GetShutdownParametersRequest->Level; - *lpdwFlags = GetShutdownParametersRequest->Flags; + *lpdwLevel = ShutdownParametersRequest->ShutdownLevel; + *lpdwFlags = ShutdownParametersRequest->ShutdownFlags; return TRUE; }
@@ -993,15 +993,15 @@ { NTSTATUS Status; BASE_API_MESSAGE ApiMessage; - PBASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest = &ApiMessage.Data.SetShutdownParametersRequest; + PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &ApiMessage.Data.ShutdownParametersRequest;
/* Write the data into the CSRSS request and send it */ - SetShutdownParametersRequest->Level = dwLevel; - SetShutdownParametersRequest->Flags = dwFlags; + ShutdownParametersRequest->ShutdownLevel = dwLevel; + ShutdownParametersRequest->ShutdownFlags = dwFlags; Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepSetProcessShutdownParam), - sizeof(BASE_SET_PROCESS_SHUTDOWN_PARAMS)); + sizeof(BASE_GETSET_PROCESS_SHUTDOWN_PARAMS)); if (!NT_SUCCESS(Status)) { /* Return the failure from CSRSS */ @@ -2426,7 +2426,7 @@
/* Set message structures */ CreateProcessMsg = &CsrMsg.Data.CreateProcessRequest; - VdmMsg = &CsrMsg.Data.CheckVdm; + VdmMsg = &CsrMsg.Data.CheckVDMRequest;
/* Clear the more complex structures by zeroing out their entire memory */ RtlZeroMemory(&Context, sizeof(Context));
Modified: trunk/reactos/dll/win32/kernel32/client/vdm.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/v... ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/vdm.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/vdm.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -2,7 +2,7 @@ * PROJECT: ReactOS Win32 Base API * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/kernel32/client/vdm.c - * PURPOSE: Virtual Dos Machine (VDM) Support + * PURPOSE: Virtual DOS Machines (VDM) Support * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) */
@@ -49,17 +49,18 @@ /* Is it a .com? */ String.Length = BaseDotComSuffixName.Length; String.Buffer = &PathName->Buffer[(PathName->Length - String.Length) / sizeof(WCHAR)]; - if (RtlEqualUnicodeString(&String, &BaseDotComSuffixName, TRUE)) return 2; + if (RtlEqualUnicodeString(&String, &BaseDotComSuffixName, TRUE)) return BINARY_TYPE_COM;
/* Is it a .pif? */ String.Length = BaseDotPifSuffixName.Length; String.Buffer = &PathName->Buffer[(PathName->Length - String.Length) / sizeof(WCHAR)]; - if (RtlEqualUnicodeString(&String, &BaseDotPifSuffixName, TRUE)) return 3; + if (RtlEqualUnicodeString(&String, &BaseDotPifSuffixName, TRUE)) return BINARY_TYPE_PIF;
/* Is it an exe? */ String.Length = BaseDotExeSuffixName.Length; String.Buffer = &PathName->Buffer[(PathName->Length - String.Length) / sizeof(WCHAR)]; - if (RtlEqualUnicodeString(&String, &BaseDotExeSuffixName, TRUE)) return 1; + if (RtlEqualUnicodeString(&String, &BaseDotExeSuffixName, TRUE)) return BINARY_TYPE_EXE; + return 0; }
Modified: trunk/reactos/include/reactos/subsys/csr/csrmsg.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/subsys/csr/... ============================================================================== --- trunk/reactos/include/reactos/subsys/csr/csrmsg.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/subsys/csr/csrmsg.h [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -32,13 +32,6 @@ } CSRSRV_API_NUMBER, *PCSRSRV_API_NUMBER;
-/* -typedef struct _CSR_API_NUMBER -{ - WORD Index; - WORD Subsystem; -} CSR_API_NUMBER, *PCSR_API_NUMBER; -*/ typedef ULONG CSR_API_NUMBER;
#define CSR_CREATE_API_NUMBER(ServerId, ApiId) \ @@ -63,6 +56,8 @@ ULONG Unknown2[3]; HANDLE ProcessId; } CSR_CONNECTION_INFO, *PCSR_CONNECTION_INFO; + +#define CSRSRV_VERSION 0x10000
// We must have a size at most equal to the maximum acceptable LPC data size. C_ASSERT(sizeof(CSR_CONNECTION_INFO) <= LPC_MAX_DATA_LENGTH);
Modified: trunk/reactos/include/reactos/subsys/win/basemsg.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/subsys/win/... ============================================================================== --- trunk/reactos/include/reactos/subsys/win/basemsg.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/subsys/win/basemsg.h [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -52,6 +52,21 @@ BasepMaxApiNumber } BASESRV_API_NUMBER, *PBASESRV_API_NUMBER;
+ +typedef struct +{ + ULONG ExpectedVersion; + HANDLE DefaultObjectDirectory; + ULONG WindowsVersion; + ULONG CurrentVersion; + ULONG DebugFlags; + WCHAR WindowsDirectory[MAX_PATH]; + WCHAR WindowsSystemDirectory[MAX_PATH]; +} BASESRV_API_CONNECTINFO, *PBASESRV_API_CONNECTINFO; + +#define BASESRV_VERSION 0x10000 + + typedef struct _BASE_SXS_CREATEPROCESS_MSG { ULONG Flags; @@ -96,38 +111,38 @@
typedef struct { + UINT UniqueID; +} BASE_GET_TEMP_FILE, *PBASE_GET_TEMP_FILE; + +typedef struct +{ UINT uExitCode; } BASE_EXIT_PROCESS, *PBASE_EXIT_PROCESS;
typedef struct { - UINT UniqueID; -} BASE_GET_TEMP_FILE, *PBASE_GET_TEMP_FILE; - -typedef struct -{ - ULONG iTask; - HANDLE ConsoleHandle; - ULONG BinaryType; + ULONG iTask; + HANDLE ConsoleHandle; + ULONG BinaryType; HANDLE WaitObjectForParent; HANDLE StdIn; HANDLE StdOut; HANDLE StdErr; - ULONG CodePage; - ULONG dwCreationFlags; - PCHAR CmdLine; - PCHAR appName; - PCHAR PifFile; - PCHAR CurDirectory; - PCHAR Env; - ULONG EnvLen; - PVOID StartupInfo; - PCHAR Desktop; - ULONG DesktopLen; - PCHAR Title; - ULONG TitleLen; - PCHAR Reserved; - ULONG ReservedLen; + ULONG CodePage; + ULONG dwCreationFlags; + PCHAR CmdLine; + PCHAR appName; + PCHAR PifFile; + PCHAR CurDirectory; + PCHAR Env; + ULONG EnvLen; + LPSTARTUPINFOA StartupInfo; + PCHAR Desktop; + ULONG DesktopLen; + PCHAR Title; + ULONG TitleLen; + PCHAR Reserved; + ULONG ReservedLen; USHORT CmdLen; USHORT AppLen; USHORT PifLen; @@ -138,8 +153,8 @@
typedef struct { - ULONG iTask; - ULONG BinaryType; + ULONG iTask; + ULONG BinaryType; HANDLE ConsoleHandle; HANDLE VDMProcessHandle; HANDLE WaitObjectForParent; @@ -149,22 +164,85 @@
typedef struct { + ULONG iTask; + HANDLE ConsoleHandle; + HANDLE WaitObjectForVDM; + HANDLE StdIn; + HANDLE StdOut; + HANDLE StdErr; + ULONG CodePage; + ULONG dwCreationFlags; + ULONG ExitCode; + PCHAR CmdLine; + PCHAR AppName; + PCHAR PifFile; + PCHAR CurDirectory; + PCHAR Env; + ULONG EnvLen; + LPSTARTUPINFOA StartupInfo; + PCHAR Desktop; + ULONG DesktopLen; + PCHAR Title; + ULONG TitleLen; + PCHAR Reserved; + ULONG ReservedLen; + USHORT CurrentDrive; + USHORT CmdLen; + USHORT AppLen; + USHORT PifLen; + USHORT CurDirectoryLen; + USHORT VDMState; + ULONG fComingFromBat; +} BASE_GET_NEXT_VDM_COMMAND, *PBASE_GET_NEXT_VDM_COMMAND; + +typedef struct +{ + HANDLE ConsoleHandle; + ULONG iWowTask; + HANDLE WaitObjectForVDM; +} BASE_EXIT_VDM, *PBASE_EXIT_VDM; + +typedef struct +{ + ULONG FirstVDM; +} BASE_IS_FIRST_VDM, *PBASE_IS_FIRST_VDM; + +typedef struct +{ HANDLE ConsoleHandle; HANDLE hParent; - ULONG ExitCode; + ULONG ExitCode; } BASE_GET_VDM_EXIT_CODE, *PBASE_GET_VDM_EXIT_CODE;
typedef struct { - DWORD Level; - DWORD Flags; -} BASE_SET_PROCESS_SHUTDOWN_PARAMS, *PBASE_SET_PROCESS_SHUTDOWN_PARAMS; - -typedef struct -{ - DWORD Level; - DWORD Flags; -} BASE_GET_PROCESS_SHUTDOWN_PARAMS, *PBASE_GET_PROCESS_SHUTDOWN_PARAMS; + HANDLE ConsoleHandle; + ULONG fIncDec; +} BASE_SET_REENTER_COUNT, *PBASE_SET_REENTER_COUNT; + +typedef struct +{ + ULONG ShutdownLevel; + ULONG ShutdownFlags; +} BASE_GETSET_PROCESS_SHUTDOWN_PARAMS, *PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS; + +typedef struct +{ + HANDLE ConsoleHandle; + PCHAR lpszzCurDirs; + ULONG cchCurDirs; +} BASE_GETSET_VDM_CURDIRS, *PBASE_GETSET_VDM_CURDIRS; + +typedef struct +{ + HANDLE ConsoleHandle; + ULONG fBeginEnd; +} BASE_BAT_NOTIFICATION, *PBASE_BAT_NOTIFICATION; + +typedef struct +{ + HANDLE hwndWowExec; +} BASE_REGISTER_WOWEXEC, *PBASE_REGISTER_WOWEXEC;
typedef struct { @@ -173,9 +251,14 @@
typedef struct { + UNICODE_STRING IniFileName; +} BASE_REFRESH_INIFILE_MAPPING, *PBASE_REFRESH_INIFILE_MAPPING; + +typedef struct +{ + ULONG Flags; UNICODE_STRING DeviceName; - UNICODE_STRING TargetName; - DWORD dwFlags; + UNICODE_STRING TargetPath; } BASE_DEFINE_DOS_DEVICE, *PBASE_DEFINE_DOS_DEVICE;
typedef struct _BASE_API_MESSAGE @@ -190,14 +273,21 @@ { BASE_CREATE_PROCESS CreateProcessRequest; BASE_CREATE_THREAD CreateThreadRequest; + BASE_GET_TEMP_FILE GetTempFileRequest; BASE_EXIT_PROCESS ExitProcessRequest; - BASE_GET_TEMP_FILE GetTempFile; - BASE_CHECK_VDM CheckVdm; - BASE_UPDATE_VDM_ENTRY UpdateVdmEntry; - BASE_GET_VDM_EXIT_CODE GetVdmExitCode; - BASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest; - BASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest; + BASE_CHECK_VDM CheckVDMRequest; + BASE_UPDATE_VDM_ENTRY UpdateVDMEntryRequest; + BASE_GET_NEXT_VDM_COMMAND GetNextVDMCommandRequest; + BASE_EXIT_VDM ExitVDMRequest; + BASE_IS_FIRST_VDM IsFirstVDMRequest; + BASE_GET_VDM_EXIT_CODE GetVDMExitCodeRequest; + BASE_SET_REENTER_COUNT SetReenterCountRequest; + BASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest; + BASE_GETSET_VDM_CURDIRS VDMCurrentDirsRequest; + BASE_BAT_NOTIFICATION BatNotificationRequest; + BASE_REGISTER_WOWEXEC RegisterWowExecRequest; BASE_SOUND_SENTRY SoundSentryRequest; + BASE_REFRESH_INIFILE_MAPPING RefreshIniFileMappingRequest; BASE_DEFINE_DOS_DEVICE DefineDosDeviceRequest; } Data; } BASE_API_MESSAGE, *PBASE_API_MESSAGE;
Modified: trunk/reactos/subsystems/win/basesrv/dosdev.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win/basesrv/dosd... ============================================================================== --- trunk/reactos/subsystems/win/basesrv/dosdev.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win/basesrv/dosdev.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -99,17 +99,17 @@ DWORD dwFlags; PWSTR lpBuffer;
- DPRINT("BaseSrvDefineDosDevice entered, Flags:%d, DeviceName:%wZ, TargetName:%wZ\n", - DefineDosDeviceRequest->dwFlags, + DPRINT("BaseSrvDefineDosDevice entered, Flags:%d, DeviceName:%wZ, TargetPath:%wZ\n", + DefineDosDeviceRequest->Flags, &DefineDosDeviceRequest->DeviceName, - &DefineDosDeviceRequest->TargetName); + &DefineDosDeviceRequest->TargetPath);
Matched = AddHistory = FALSE; HistoryEntry = NULL; AdminSid = SystemSid = WorldSid = NULL; SecurityDescriptor = NULL; ListHead = &DosDeviceHistory; - dwFlags = DefineDosDeviceRequest->dwFlags; + dwFlags = DefineDosDeviceRequest->Flags;
/* Validate the flags */ if ( (dwFlags & 0xFFFFFFF0) || @@ -136,7 +136,7 @@ if (!NT_SUCCESS(Status)) _SEH2_LEAVE;
- RequestLinkTarget = &DefineDosDeviceRequest->TargetName; + RequestLinkTarget = &DefineDosDeviceRequest->TargetPath; lpBuffer = (PWSTR)RtlAllocateHeap(BaseSrvHeap, HEAP_ZERO_MEMORY, RequestDeviceName.MaximumLength + 5 * sizeof(WCHAR));
Modified: trunk/reactos/subsystems/win/basesrv/proc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win/basesrv/proc... ============================================================================== --- trunk/reactos/subsystems/win/basesrv/proc.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win/basesrv/proc.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -18,7 +18,7 @@ CSR_API(BaseSrvGetTempFile) { static UINT BaseGetTempFileUnique = 0; - PBASE_GET_TEMP_FILE GetTempFile = &((PBASE_API_MESSAGE)ApiMessage)->Data.GetTempFile; + PBASE_GET_TEMP_FILE GetTempFile = &((PBASE_API_MESSAGE)ApiMessage)->Data.GetTempFileRequest;
/* Return 16-bits ID */ GetTempFile->UniqueID = (++BaseGetTempFileUnique & 0xFFFF); @@ -211,24 +211,24 @@
CSR_API(BaseSrvGetProcessShutdownParam) { - PBASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.GetShutdownParametersRequest; + PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.ShutdownParametersRequest; PCSR_THREAD CsrThread = CsrGetClientThread(); ASSERT(CsrThread);
- GetShutdownParametersRequest->Level = CsrThread->Process->ShutdownLevel; - GetShutdownParametersRequest->Flags = CsrThread->Process->ShutdownFlags; + ShutdownParametersRequest->ShutdownLevel = CsrThread->Process->ShutdownLevel; + ShutdownParametersRequest->ShutdownFlags = CsrThread->Process->ShutdownFlags;
return STATUS_SUCCESS; }
CSR_API(BaseSrvSetProcessShutdownParam) { - PBASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.SetShutdownParametersRequest; + PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.ShutdownParametersRequest; PCSR_THREAD CsrThread = CsrGetClientThread(); ASSERT(CsrThread);
- CsrThread->Process->ShutdownLevel = SetShutdownParametersRequest->Level; - CsrThread->Process->ShutdownFlags = SetShutdownParametersRequest->Flags; + CsrThread->Process->ShutdownLevel = ShutdownParametersRequest->ShutdownLevel; + CsrThread->Process->ShutdownFlags = ShutdownParametersRequest->ShutdownFlags;
return STATUS_SUCCESS; }
Modified: trunk/reactos/subsystems/win/basesrv/vdm.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win/basesrv/vdm.... ============================================================================== --- trunk/reactos/subsystems/win/basesrv/vdm.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win/basesrv/vdm.c [iso-8859-1] Mon Aug 19 17:50:27 2013 @@ -2,7 +2,7 @@ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS Base API Server DLL * FILE: subsystems/win/basesrv/vdm.c - * PURPOSE: Virtual DOS Machines Management + * PURPOSE: Virtual DOS Machines (VDM) Support * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr) */